⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gray_transform.m

📁 这是用MATALB编写的静态图像压缩程序中的灰度转换部分
💻 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 + -