clc;                                                   %clc是清除command window里的内容
clear all;                                             %clear是清除workspace里的变量
close all;                                             %close all来关闭所有已经打开的图像窗口
image_ori = imread('skeleton_orig.bmp');               %读取图像数据
image_ori = rgb2gray(image_ori);                       % 将rgb模式转换成灰度图
figure;                                                %画图
subplot(2,4,1);                                        %把区域分成2行4列,并把图像显示到第一个
imshow(image_ori);                                     %显示图像
title('a.original image');                             %显示标题
image_ext = [zeros(1,500);image_ori;zeros(1,500)]';    %分别在上下两边加一行,并转置
image_ext = [zeros(1,802);image_ext;zeros(1,802);]';   %分别在左右两边加一列,并转置
image_double = im2double(image_ext);                   %将imdata_add转换成双精度

% lapa_modelace Operating 
lapa_mode = [-1,-1,-1;-1,8,-1;-1,-1,-1];                %拉普拉斯变换用模板[-1,-1,-1;-1,8,-1;-1,-1,-1]; 
lapa_mode = lapa_mode(:);                               %转换成列矩阵
for x = 2:1:801
    for y = 2:1:501
    A =image_double([x-1:x+1],[y-1:y+1]);               %从image_double中以(x,y)为中心取出一个3*3的矩阵 
    image_lapa(x-1,y-1) = lapa_mode'*A(:);              %将取出的矩阵与模板进行拉普拉斯变换取得的值放在image_lapa的(x-1,y-1)位置
    end
end
subplot(2,4,2);
imshow(image_lapa);
title('b.lapalace image');
subplot(2,4,3);

%Sharpening Operating
image_ab_sha = image_lapa+im2double(image_ori);           
imshow(image_ab_sha);
title('c.a+b sharpening image');

%Grads Operating
sobel_mode_1= [-1,-2,-1;0,0,0;1,2,1];                     %定义梯度处理的一个掩膜
sobel_mode_1= sobel_mode_1(:);
sobel_mode_2 = [-1,0,1;-2,0,2;-1,0,1];                    %定义梯度处理的另一个掩膜
sobel_mode_2 = sobel_mode_2(:);
for x = 2:1:801
    for y = 2:1:501
    A =image_double([x-1:x+1],[y-1:y+1]); 
    mid_1(x-1,y-1) = sobel_mode_1'*A(:); 
    mid_2(x-1,y-1) = sobel_mode_2'*A(:);
    end
end
image_grad = abs(mid_1)+abs(mid_2);                        %对gx、gy绝对值化,然后求和
subplot(2,4,4);
imshow(image_grad);
title('d.grads image');

%Smoothing Operating
Mxy_Ext = [zeros(2,500);image_grad;zeros(2,500)];           %分别在上下两边加两行
Mxy_Ext = [zeros(2,804);Mxy_Ext';zeros(2,804)]';            %先将Mxy_Ext转置,然后分别在左右两边加一列,最后将所得结果再转置
Linear_smooth = ones(5,5);                                  %创建一个5*5矩阵,初始值全是1
Linear_smooth = Linear_smooth(:);                           %将矩阵Linear_smooth转换成列矩阵
for x = 3:1:802                                             %大循环,x从3--802,步进是1
    for y = 3:1:502                                         %小循环,y从3--502,步进是1
        A = Mxy_Ext([x-2:x+2],[y-2:y+2]);                   %以Emx_Ext(x,y)为中心,截取5*5矩阵复制到A中
        image_smooth(x-2,y-2) = Linear_smooth'*A(:);         %将获取的矩阵值各个值求和然后放在新矩阵image_smooth的(x-2,y-2)位置
    end
end
image_smooth = image_smooth/25;                             %求平均值
subplot(2,4,5);                                             %把区域分成1行4列,并把图像显示到第一个
imshow(image_smooth);                                       %显示图像
title('e.smoothing image');                                 %显示标题

%Masking Operating 
image_mask = image_ab_sha.*image_smooth;                    %点乘
subplot(2,4,6);
imshow(image_mask);
title('f.Masking image');

%Sharpening Operating
image_af_sha = im2double(image_ori) + image_mask;
subplot(2,4,7);
imshow(image_af_sha);
title('g.a+f sharpening image');

%Exponential  Transform
image_fin = image_af_sha.^0.5;                              %幂律变换 
subplot(2,4,8);
imshow(image_fin);
title('h.final result');

 

posted on 2013-11-14 15:40  amanlikethis  阅读(1068)  评论(0编辑  收藏  举报