📄 gray_transform.m
字号:
function fileStr = gray_Transform( grayMatrix , charArray)
[row,column] = size(grayMatrix);
Y = double(grayMatrix);
Y = Y - 128;
charArray = strcat(charArray,num2str(row),'F',num2str(column),'F');
rowB = row/8;% block number
columnB = column/8;
lastDC = 0;
for rowBcount = 40%:rowB
for columnBcount = 46%:columnB
dctB = Y((rowBcount-1)*8 + 1:rowBcount*8 , (columnBcount-1)*8 + 1:columnBcount*8);%get a block for dct_transform
dctCoefficient = dctTransform(dctB);% carrying out dct_transform for a block to get DC and AC coefficients
[quant,lastDC] = gray_Quant(dctCoefficient , lastDC);% lastDC is last block's DC value
zigList = zigScan(quant);% transform block_matrix to zigzag_array
[midCArray,count] = midCode(zigList);% middle entropy coding , and midCArray for mid_coding result
charArray = gray_VLC(charArray,midCArray,count);% VLC = variable length coding
end
end
fileStr = charArray;
%*******在边缘处的滤波运算中所用到的图像外象素值,采用0填充******%
[X , Y] = size(target_picture);
target = zeros(X+M , Y+N);
target(M/2+1:M/2+X , N/2+1:N/2+Y) = target_picture;
% figure
% imshow(uint8(target));
% 定义角度变量 angle
transform_result = zeros(X , Y);
all_result = zeros(N_orient , X , Y); % 存放 N_orient 个方向上的gabor变换值
for i = 1:N_orient
angle = ((i-1)*pi)/N_orient;
for x = 1+M/2:X+M/2
for y = 1+N/2:Y+N/2
sum = 0.0;
for x1 = x-M/2:x+M/2
for y1 = y-N/2:y+N/2
%sum = sum + ( target(x1,y1) * exp((-(x1-M/2-x)^2-(y1-N/2-y)^2)/(2*delta^2)) * cos(nunda *( cos(angle)*(x1-M/2-x)+sin(angle)*(y1-N/2-y) ))) / (sqrt(2*pi)*delta );
sum = sum + ( target(x1,y1) * exp((-(x-x1)^2-(y-y1)^2)/(2*delta^2)) * cos(nunda *( cos(angle)*(x-x1)+sin(angle)*(y-y1) ))) / (sqrt(2*pi)*delta );
% 注意此处x1代表行(y轴),y1代表列(x轴),与论文中提及的表达式有点不同
end
end
all_result(i,x-M/2,y-N/2) = abs(sum); % 取得实部值
% 此处用绝对值的效果较好?????
end
end
end
% *************并列画出不同方向gabor变换值************%
P = zeros(X , Y);
for i = 1:N_orient
subplot(6,N_orient,(nunda_num-1)*8+i)
P(:,:) = all_result(i,:,:);
imshow(uint8(P))
end
%**************找出gabor变换矩阵中最大最小值,以分析正负值和特大值的影响**************%
% minilize = 100;
% maxilize = 0;
% for i = 1:N_orient
% for x = 1:X
% s = min(all_result(i,x,:));
% if s<minilize
% minilize = s;
% end
% s = max(all_result(i,x,:));
% if s>maxilize
% maxilize = s;
% end
% end
% end
% minilize
% maxilize
%***************取不同方向上gabor变换值的平均*************%
% for x = 1:X
% for y = 1:Y
% %transform_result(x,y) = max(all_result(1,x,y) , all_result(2,x,y) , all_result(3,x,y) , all_result(4,x,y) , all_result(5,x,y) , all_result(6,x,y) , all_result(7,x,y) , all_result(8,x,y) );
% sum = all_result(1,x,y) +all_result(2,x,y) +all_result(3,x,y) +all_result(4,x,y) +all_result(5,x,y) +all_result(6,x,y) +all_result(7,x,y) +all_result(8,x,y);
%
% transform_result(x,y) = sum/8.0; % 各个方向的gabor变换值求平均--------此法待定
% end
% end
% figure
% imshow(uint8(transform_result));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -