实验二 图像增强

一、实验目的:
(1)进一步掌握图像处理工具Matlab,熟悉基于Matlab的图像处理函数。
(2)掌握各种图像增强方法。
二、实验原理(略)
三、实验步骤(包括分析、代码和波形)
首先来看看这个实验的内容。
1.打开一幅彩色图像Image1,使用Matlab图像处理函数,对其进行下列变换:
(1)将Image1灰度化为gray,统计并显示其灰度直方图;
(2)对gray进行分段线性变换;
(3)对gray进行直方图均衡化;
(4)对gray进行伪彩色增强;
(5)对gray添加噪声并平滑;
(6)对gray利用Sobel算子锐化;
(7)实验要求中的拓展内容。

实验的思路是很明确的,结合原理中的讨论,我们只要按照题目的要求依据参考代码、查看运行并进行验证就可以了,不需要计算。

**下面是第(1)小题的代码。**该部分将Image1灰度化为gray,统计并显示其灰度直方图;

Image1=im2double(imread('fj.jpg'));
gray=rgb2gray(Image1);
imhist(gray); 
[h,w]=size(gray);                                     
NewImage1=zeros(h,w);                 
a=80/256; b=180/256; c=30/256; d=220/256;
for x=1:w
    for y=1:h
        if gray(y,x)<a 
            NewImage1(y,x)=gray(y,x)*c/a;
        elseif gray(y,x)<b
            NewImage1(y,x)=(gray(y,x)-a)*(d-c)/(b-a)+c;
        else
            NewImage1(y,x)=(gray(y,x)-b)*(255-d)/(255-b)+d;
        end                                               
    end
end
figure,imshow(NewImage1),title('分段线性变换');

得到的灰度直方图如下图:
实验二 图像增强_第1张图片
**下面是第(2)小题的代码。**对gray进行分段线性变换

Image1=im2double(imread('fj.jpg'));
gray=rgb2gray(Image1);
imhist(gray); 
[h,w]=size(gray);                                     
NewImage1=zeros(h,w);                 
a=80/256; b=180/256; c=30/256; d=220/256;
for x=1:w
    for y=1:h
        if gray(y,x)<a 
            NewImage1(y,x)=gray(y,x)*c/a;
        elseif gray(y,x)<b
            NewImage1(y,x)=(gray(y,x)-a)*(d-c)/(b-a)+c;
        else
            NewImage1(y,x)=(gray(y,x)-b)*(255-d)/(255-b)+d;
        end                                               
    end
end
figure,imshow(NewImage1),title('分段线性变换');

得到的分段线性变换如下图:
实验二 图像增强_第2张图片

**下面是第(3)小题的代码。**对gray进行直方图均衡化;

NewImage2=histeq(gray);
figure,imshow(NewImage2),title('直方图均衡化');

得到的直方图均衡化的图如下:
实验二 图像增强_第3张图片

**下面是第(4)小题的代码。**对gray进行伪彩色增强

NewImage3=zeros(h,w,3);
for x=1:w
    for y=1:h
        if gray(y,x)<64/256
            NewImage3(y,x,1)=0;
            NewImage3(y,x,2)=4*gray(y,x);
            NewImage3(y,x,3)=1;
        elseif gray(y,x)<128/256
            NewImage3(y,x,1)=0;
            NewImage3(y,x,2)=1;
            NewImage3(y,x,3)=2-4*gray(y,x);
        elseif gray(y,x)<192/256
            NewImage3(y,x,1)=4*gray(y,x)-2;
            NewImage3(y,x,2)=1;
            NewImage3(y,x,3)=0;
        else
            NewImage3(y,x,1)=1;
            NewImage3(y,x,2)=4-4*gray(y,x);
            NewImage3(y,x,3)=0;
        end
    end
end
figure,imshow(NewImage3);

得到伪彩色增强的图如下:
实验二 图像增强_第4张图片

**下面是第(5)小题的代码。**对gray添加噪声并平滑

noiseIsp=imnoise(gray,'salt & pepper',0.1);            
noiseIg=imnoise(gray,'gaussian');  
result1=medfilt2(noiseIsp); 
result2=medfilt2(noiseIg);
figure;
subplot(121),imshow(result1),title('椒盐噪声3×3中值滤波');
subplot(122),imshow(result2),title('高斯噪声3×3中值滤波');

得到添加噪声并平滑的图如下:
实验二 图像增强_第5张图片

下面是第(6)小题的代码。该部要求对gray利用Sobel算子锐化

H1=[-1 -2 -1;0 0 0;1 2 1]; 
H2=[-1 0 1;-2 0 2;-1 0 1];  
R1=imfilter(gray,H1);    
R2=imfilter(gray,H2);
edgeImage=abs(R1)+abs(R2);    
sharpImage=gray+edgeImage;               
figure;
subplot(121),imshow(edgeImage),title('Sobel梯度图像');             
subplot(122),imshow(sharpImage),title('Sobel锐化图像');

得到Sobel算子锐化的图如下:
实验二 图像增强_第6张图片

2.实验要求中的拓展内容
(1)对以上处理变换参数,查看处理效果;
(2)更改伪彩色增强方法为热金属编码或彩虹编码;
(3)设计不同的平滑滤波、锐化滤波方法,查看处理效果;
(4)自行设计方法,实现对彩色图像增强处理。
下面是拓展第(1)小题的代码。处理变换参数,查看处理效果
(略,可参考上一部分代码,由于太多了,就不重复放上来了)

得到变换参数的图如下:
实验二 图像增强_第7张图片
实验二 图像增强_第8张图片
实验二 图像增强_第9张图片
实验二 图像增强_第10张图片
实验二 图像增强_第11张图片
实验二 图像增强_第12张图片

下面是拓展第(2)小题的代码。该小题要求更改伪彩色增强方法为热金属编码或彩虹编码。

彩虹编码:

Image1=imread('lotus.bmp');
    
%转换为灰度
gray=rgb2gray(Image1);
[h,w]=size(gray);
%新图像的矩阵
NewImage3=zeros(h,w,3);
for x=1:h
    for y=1:w
        if gray(x,y)<96
        NewImage3(x,y,1)=0;
        elseif gray(x,y)<128
        NewImage3(x,y,1)=255*(gray(x,y)-96)/32;
        else
        NewImage3(x,y,1)=255;
        end
    end
end
for x=1:h
    for y=1:w
        if gray(x,y)<32
        NewImage3(x,y,2)=0;
        elseif gray(x,y)<64
        NewImage3(x,y,2)=255*(gray(x,y)-32)/32;
        elseif gray(x,y)<128
        NewImage3(x,y,2)=255;
        elseif gray(x,y)<192
        NewImage3(x,y,2)=255*(192-gray(x,y))/64;
        else
        NewImage3(x,y,2)=255*(gray(x,y)-192)/64;
        end
    end
end
for x=1:h
    for y=1:w
        if gray(x,y)<32
        NewImage3(x,y,3)=255*gray(x,y)/32;
        elseif gray(x,y)<64
        NewImage3(x,y,3)=255;
        elseif gray(x,y)<96
        NewImage3(x,y,3)=255*(96-gray(x,y))/32;
        elseif gray(x,y)<192 
        NewImage3(x,y,3)=0;
        else
        NewImage3(x,y,3)=255*(gray(x,y)-192)/64;
        end
    end
end
imshow(NewImage3),title('彩虹编码')

得到彩色图像变换到彩虹编码的图如下:
实验二 图像增强_第13张图片

下面是拓展第(3)小题的代码。该小题设计不同的平滑滤波、锐化滤波方法,查看处理效果。
1.基于Robert交叉梯度的图像锐化:

I = imread('fj.jpg');  
imshow(I);   
I = double(I); % 转换为double型,这样可以保存负值,否则uint8型会把负值截掉  
w1 = [-1 0; 0 1]  
w2 = [0 -1; 1 0]  
G1 =  imfilter(I, w1, 'corr', 'replicate'); % 以重复方式填充边界  
G2 =  imfilter(I, w2, 'corr', 'replicate');  
G = abs(G1) + abs(G2); % 计算Robert梯度   
figure, imshow(G, []);   
figure, imshow(abs(G1), []);  
figure, imshow(abs(G2), []);  
2. 平滑滤波代码
I = imread('fj.jpg');
J1=imnoise(I,'salt & pepper',0.02); %加均值为0,方差为0.02的椒盐噪声
J2=imnoise(I,'gaussian',0.02); %加均值为0,方差为0.02的高斯噪声。
g1=rgb2gray(J1);
g2=rgb2gray(J2);
figure('units','normalized','position',[0 0 1 1]);
subplot(2,4,1),imshow(J1),xlabel('椒盐噪声'); %显示有椒盐噪声图像
subplot(2,4,2),imshow(J2),xlabel('高斯噪声'); %显示有高斯噪声图像

% %  邻域平均法  neighborhood averaging

% imfilter 可进行多维图像(RGB等)进行空间滤波,且可选参数较多
% filter2 / medfilt2 只能对二维图像(灰度图)进行空间滤波,
% 两个函数结果类型不一样,只需要在I1=filter2(h,I)后面加上I1=uint8(I1)进行类型转换,结果就是一样的。

K1 = filter2(fspecial('average',3),g1); % 对椒盐噪声进行 3*3 模板平滑滤波
K2 = filter2(fspecial('average',11),g1);
k3 = imfilter(I,fspecial('average',3),'replicate');
K4 = filter2(fspecial('average',3),g2); % 对高斯噪声进行 3*3 模板平滑滤波

subplot(2,4,3),imshow(uint8(K1)),xlabel({'对椒盐噪声进行';'3*3 模板平滑滤波'});
subplot(2,4,4),imshow(uint8(K1)),xlabel({'对椒盐噪声进行';'11*11 模板平滑滤波'});
subplot(2,4,5),imshow(k3),xlabel('3*3 imfilter空间滤波');
subplot(2,4,6),imshow(uint8(K4)),xlabel('对高斯噪声进行 3*3 模板平滑滤波');

% 中值滤波
I1= medfilt2(g1,[3,3]); % 对有椒盐噪声图像进行5×5方形窗口中值滤波
I2= medfilt2(g2,[3,3]); % 对有高斯噪声图像进行5×5方形窗口中值滤波

subplot(2,4,7),imshow(I1),xlabel({'椒盐噪声进行';'3*3 中值滤波'}); 
subplot(2,4,8),imshow(I2),xlabel({'高斯噪声进行';'3*3 中值滤波'}); 

得到自行设计基于平滑滤波、锐化滤波的图像的图如下:
实验二 图像增强_第14张图片

实验二 图像增强_第15张图片

(锐化滤波)
实验二 图像增强_第16张图片

(平滑滤波)

**下面是拓展第(4)小题的代码。**自行设计方法,实现对彩色图像增强处理。
对RGB图像直接线性变换进行彩色增强

clear;clc;
rgb  = imread('fj.jpg');  
[o p q]=size(rgb);
r(:,:,1)=rgb(:,:,1);
r(:,:,2)=zeros(o,p); 
r(:,:,3)=zeros(o,p);
r=r*1.4;
g(:,:,2)=rgb(:,:,2);
g(:,:,1)=zeros(o,p); 
g(:,:,3)=zeros(o,p);
g=g*1.4;
b(:,:,3)=rgb(:,:,3);
b(:,:,2)=zeros(o,p); 
b(:,:,1)=zeros(o,p);
b=b*1.4;
rgb_new(:,:,1)=r(:,:,1); 
rgb_new(:,:,2)=g(:,:,2);
rgb_new(:,:,3)=b(:,:,3);
figure;
subplot(121);imshow(rgb);title('原始rgb图像');  
%subplot(231);imshow(r);title('红色分量图像');
%subplot(232);imshow(g);title('绿色分量图像');
%subplot(233);imshow(b);title('蓝色分量图像');
subplot(122);imshow(rgb_new);title('增强后rgb图像');

得到彩色图像增强的图如下:
实验二 图像增强_第17张图片

四、实验总结
进一步掌握图像处理工具Matlab,熟悉基于Matlab的图像处理函数。通过实验深入了解了掌握各种图像增强方法,例如掌握了将Image1灰度化为gray,统计并显示其灰度直方图;对gray进行分段线性变换;对gray进行直方图均衡化;对gray进行伪彩色增强;对gray添加噪声并平滑;对gray利用Sobel算子锐化方法等内容,为接下来的学习进一步打下了基础。

你可能感兴趣的:(数字图像处理,matlab,图像处理,开发语言)