数字图像处理综合作业2.docx
《数字图像处理综合作业2.docx》由会员分享,可在线阅读,更多相关《数字图像处理综合作业2.docx(34页珍藏版)》请在冰豆网上搜索。
数字图像处理综合作业2
综合作业二
(春季学期)
一.对X1照片图像增强
1.1直方图增强
1.1.1直方图拉伸增加对比度
为了增强图像,观察x1,我们考虑增加图像的对比度,看是否能使图像更清晰。
具体的编程思路是,读入x1图像,运用matlab自带的imadjust函数,对比所得结果,具体程序见附录1.1.1(a),实验结果见图1.1.1
(1)。
1.1.1(a)
结论:
由图1.1.1(a)对比发现,左右两边基本没有区别,基本没有图像增强效果。
我们考虑到运用imadjust函数可以得到原图的负片,即将原灰度图白色的地方变成黑色,黑色的地方变成白色,这种效果可能使X1图像自身对比更鲜明,起到图像增强的作用,具体程序见附录1.1.1
(2),实验结果见图1.1.1(b)。
1.1.1(b)
结论:
由图1.1.1(b)的对比发现,从人眼的视觉角度来看,右图比起左图,在感官上比较舒适,似乎有点图像增强的意思,但总体上,效果还不是很好。
1.1.2直方图均衡
在第三章的作业习题里,我们已经接触过直方图均衡,它是一种利用图像直方图对对比度进行调整的方法,也是图像增强常用的方法之一。
我们的编程思路是运用matlab中自带的一些函数对原图进行处理,具体程序见附录1.1.2,实验结果见图1.1.2。
1.1.2
结论:
由图1.1.2的对比,我们可以发现直方图均衡化后的图像整体变亮,图片中部分位置变得清晰一些,部分位置灰度值过高,图像有些发白,没有得到好的图像增强效果,甚至发白部位阻碍医生观察骨骼细节。
原因是因为这种方法对处理的数据不加选择,当原图的直方图有高峰时,经处理后对比度会不自然的过分增强。
1.2伪彩色增强
1.2.1等密度分割法
对图像中各像元亮度值进行统计,确定其最小值和最大值,确定分割的等级N,计算出分割的间隔再对输入图像的每一个像元进行亮度转换,为像元新值赋色。
(1)matlab自带函数grayslice(I,n)(源程序:
color1.m)
将灰度图X1均匀量化为n个等级,然后利用jet映射将其转化为伪彩色图像x。
程序见附录1.2.1
(1)
1.2.1(a)N=8
1.2.1(b)N=64
1.2.1(c)n=256
分析:
由上面三组图像可知,当分割等级越大,所呈现的效果越好。
(2)自编程序(源程序:
color2.m)
将图像X1按灰度分为11份
R=0:
256间隔为256/10
G=0到256再到0间隔为256/5
B=256:
0间隔为256/10
1.2.1(d)
分析:
从上面各图的分析我们知道n越大,效果越好。
但对比利用grayslice(I,n)函数n=8时的效果,自编程序n=11时的效果没有很好,可能是颜色映射不恰当,导致效果不好。
1.2.2多波段合成伪彩色显示
(源程序:
color.m)
对同一幅图像在不同波长获得多幅图像,可采用多种变换方式,最后合成R、G、B图像进而形成为彩色图像显示。
在这里使用分段线性映射法。
实验结果见1.2.2.程序见附录1.2.2.
1.2.2
分析:
对比利用密度分割法产生的效果,多波段合成伪彩色显示法的效果不是很好,反而将图像变得更加模糊。
结论:
通过对图像进行伪彩色处理,主要得出以下两点。
(1)对图像进行伪彩色处理时,不同的伪彩色处理方法有不同的效果,要选择合适的处理方法。
(2)不同的颜色映射法也有不同的效果,根据图像选择合适的颜色映射法。
二.对x2照片图像增强
2.1滤波
首先我们先分别观察一下X2的在MATLAB中的原始图像和频谱分布情况。
因为我们观察到X2是彩色图,所以我们需要利用rgb2gray函数将它转换成灰度图再进行处理。
X2的原始图像和频谱分布图如下图2.1所示:
2.1
我们观察到X2的灰度图存在较严重的椒盐噪声,其频谱图也存在一个十字叉的亮线,但是围绕中间亮点又有一个矩型噪声。
综上,X2存在明显的噪声近似于椒盐噪声,所以我们先采用“广撒网,捞大鱼”的方法进行筛选,尝试使用不同类型的滤波器对X2进行滤波处理,分析对比哪种滤波器的滤波效果最好,然后再选择滤波效果最好的滤波器进行各种参数设置,使其滤波效果最好。
2.1.1各种滤波器
在这里我们使用了高斯低通滤波器,均值滤波器,中值滤波器,自适应滤波器,二维统计顺序滤波器,二阶Butterworth滤波器分别对X2图像进行滤波。
程序见附录2.1.1
各种滤波结果如下图2.1.1所示:
高斯低通滤波均值滤波
中值滤波自适应滤波
二维统计顺序滤波二阶butterworth滤波
2.1.1
结论:
对比分析后我们发现,中值滤波对于去除噪声效果最好,第二好的是二阶butterworth滤波,而自适应滤波去除效果则较差。
所以接下来我们针对中值滤波器和二阶butterworth滤波器进行详细的参数设置,通过多次试验使其达到最好的效果。
2.1.2中值滤波
因为观察X2的原始图像和频谱分布图,我们发现X2存在很明显的椒盐噪声,所以我们可以预见到使用中值滤波对X2进行处理后会有明显的改善。
基本思路是先读入待处理图像,因为我们到观察X2是彩色图,所以我们需要利用rgb2gray函数先将它转换成灰度图,再利用中值滤波器对其进行平滑滤波,分别使用3*3窗口,5*5窗口,7*7窗口,11*11窗口进行处理,分析比较处理结果。
程序见附录2.1.2
X2的处理结果如下图2.1.2所示:
3*3窗口中值滤波7*7窗口中值滤波
11*11窗口中值滤波13*13窗口中值滤波
2.1.2
结论:
正如预想的那样,中值滤波对X2会产生明显的效果。
中值滤波对于去除椒盐噪声效果明显,是因为椒盐噪声只在画面上的部分点随机出现,而中值滤波根据数据排序,将未被污染的点代替噪声点的值的概率较大,所以抑制效果好。
但是当我们选择的窗口较小时噪声依然比较严重,当我们把窗口加到11*11时只存在少数噪声,当我们把窗口加到13*13时,噪声基本消除,虽然一些细节也模糊了,但是效果最好。
2.1.3二阶butterworth滤波
基本步骤与中值滤波相似,这里不再赘述。
但是,我们认为二阶butterworth滤波应该达不到中值滤波的效果。
另外,二阶butterworth滤波需要修改与原点的距离d0,来实现最优效果,下图2.1.3分别展示了在d0=10,12,14,16,18,20时的情况。
程序见附录2.1.3
d0=10d0=12
d0=14d0=16
d0=18d0=20
2.1.3
结论:
显而易见,无论我们怎么修改参数d0,其结果始终没有中值滤波好。
同时,我们发现就X2图像而言,当d0=14左右时,二阶butterworth滤波器的效果是最好的。
因此,为了达到对X2图像最好的处理效果,我们选择了中值滤波器进行滤波处理。
2.2直方图增强
由于在之前1.1的
(1)中,我们发现通过直方图拉伸来增加对比度的方法几乎没有任何作用,所以对X2不再重复。
因为x2明显存在噪声,所以我们对2.1中去噪后的图进行直方图均衡化处理,具体程序见附录2.2,实验结果见图2.2。
2.2
结论:
观察并对比图2.2,我们发现,中值滤波去噪后的图像再做均衡化处理,泛白情况非常严重,严重损害了图像质量,所以直方图均衡的方法不能用于x2图像的增强。
三.边缘提取与增强
图像的边缘部分对应图像上灰度变化剧烈的区域。
图像的边缘提取有多种方法,可以采用一阶微分算子,如sobel算子,Roberts算子,Prewitt算子,Canny算子。
也可以采用二阶微分算子,如Laplacian算子。
各种算子都有对应的优缺点,Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,但Sobel算子对边缘定位不是很准确,图像的边缘不止一个像素。
Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。
Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好。
但边缘较宽,而且间断点多。
Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。
Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。
优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像,它是目前边缘检测最常用的算法,效果也是最理想的。
3.1对x1边缘提取与复合
3.1.1对x1边缘提取
根据上述对边缘提取的分析,我们编写了各个边缘提取的程序,希望找到一个最好的边缘提取函数,进而得到最好的图像增强效果。
X1的具体程序见附录3.1.1,实验结果见图3.1.1。
3.1.1
观察对比图3.1.1,可以很明显地发现Canny方法提取的边缘效果最好,这个结果符合我们之前的分析,所以接下来的复合边缘,我们都采取Canny方法。
3.1.2对x1边缘复合
因为对x1做直方图均衡化后,部分图像由于对比度过高而泛白,不但没有增强图像,还损害了图像的部分细节,所以复合时不再考虑叠加均衡化后的图,所以我们的思路是将canny边缘提取图叠加在原图上,进行边缘复合。
具体程序见附录3.1.2,实验结果见图3.1.2。
3.1.2
结论:
观察并分析3.1.2,利用canny算子提取边缘后的图像与原图进行叠加,复合后的图像轮廓更加清晰,对比度明显增强,达到了图像增强的效果。
但是提取的边缘过多,很多细节被模糊了,总体效果不是很理想,这是我们需要解决的问题,但是目前还没找到更好的办法。
3.2对x2边缘提取与复合
3.2.1直接对原图x2边缘提取
因为x2是彩色图,所以要对其进行灰度转化,其他操作思路同x1。
x2的具体程序见附录3.2.1,实验结果见图3.2.1。
3.2.1
结论:
观察对比图3.2.1,同图3.1.1一样,也可以很明显地发现Canny方法提取的边缘效果最好,所以接下来的复合边缘,我们也就只采取Canny方法进行图像增强。
此外,我们还发现,在提取边缘的同时,我们把噪声也当边缘提取了。
这是因为原图X2有明显的噪声存在,我们在提取边缘时,是提取图像上灰度变化剧烈的区域,自然就会把噪声也提取出来,这是我们不希望看到的,所以在提取边缘之前需要对输入图像X2进行消除噪声的处理。
3.2.2去噪后边缘提取
具体的思路是:
前面我们已经对x2滤波进行去噪处理,发现13*13的中值滤波器具有最好的效果,而且canny算子具有最好的边缘提取效果。
所以我们将采用该尺寸的中值滤波器,对滤波后所得的图,进行canny边缘提取。
具体程序见附录3.2.2,实验结果见图3.2.2。
3.2.2
观察对比图3.2.2,很明显,去噪后得到的边缘图就是我们所需要的。
3.2.3对x2边缘复合
因为直方图均衡不仅不能增强x2,反而由于对比度过高,损害了图像细节,所以复合时,不再考虑叠加直方均衡图。
在前面,我们成功的得到了中值滤波去噪后的图和去噪后的边缘提取图,接下来我们的思路是将这两幅图叠加,来增强图像。
具体程序见附录3.2.3,实验结果见图3.2.3。
3.2.3
结论:
观察对比图3.2.3,利用canny算子提取边缘后的图像与原图进行叠加,复合后的图像轮廓更加清晰,很多原来模糊的细节可被肉眼直接观察,比如复合后的图像中指甲也清晰可见。
但是手腕关节处的骨骼由于过多的细节提取被掩盖。
不过总体效果比较理想,图像的对比度明显增强。
作业合作说明
我们三个(厉宏兰,徐节速,李倩)都来自XX天光所,但是之前从未接触过MATLAB编程以与图像处理的相关内容,所以此次作业我们选择了一起合作探讨,相互学习。
徐节速同学主要做了直方图增强以与边缘函数提取复合,李倩同学主要做了图像的伪彩色增强,厉宏兰同学主要做了图像滤波去噪工作。
最后一起讨论了处理结果,利用了各自的最优算法对图像进行了最后的综合处理。
附录:
1.1.1
(1)
f=imread('C:
\Users\Administrator\Desktop\X1.tif');
f1=imadjust(f,stretchlim(f),[]);
subplot(1,2,1);imshow(f)
title('原始图像')
subplot(1,2,2);imshow(f1)
title('增加对比度后图像')
1.1.1
(2)
f=imread('C:
\Users\Administrator\Desktop\X1.tif');
f1=imadjust(f,[0,1],[1,0]);
subplot(1,2,1);imshow(f)
title('原始图像')
subplot(1,2,2);imshow(f1)
title('负片')
1.1.2
f=imread('C:
\Users\Administrator\Desktop\X1.tif');
subplot(2,2,1),imshow(f);
title('原图像');
subplot(2,2,2),imhist(f);
title('原图像直方图')
subplot(2,2,3),f1=histeq(f);
imshow(f1);
title('均衡化后图像')
subplot(2,2,4),imhist(f1);
title('均衡化后图像直方图')
1.2.1
(1)
I=imread('C:
\Users\lenovo\Desktop\综合作业2_V3\X光图像\X1.tif');
X=grayslice(I,64);
figure;imshow(X);title('索引图像');
figure;imshow(X,jet(64));title('matlab自带程序处理图像');
1.2.1
(2)
I=imread('C:
\Users\lenovo\Desktop\综合作业2_V3\X光图像\X1.tif');
figure;imshow(I);title('原始图像');
[m,n]=size(I);
Imax=max(max(I));
Imin=min(min(I));
a=(Imax-Imin)/10;
fori=1:
m
forj=1:
n
ifImin<=I(i,j)&&I(i,j)<=(Imin+a)
R(i,j)=0;
G(i,j)=0;
B(i,j)=256;
elseif(Imin+a)
R(i,j)=25;
G(i,j)=50;
B(i,j)=225;
elseif(Imin+2*a)
R(i,j)=50;
G(i,j)=100;
B(i,j)=200;
elseif(Imin+3*a)
R(i,j)=75;
G(i,j)=150;
B(i,j)=175;
elseif(Imin+4*a)
R(i,j)=100;
G(i,j)=200;
B(i,j)=150;
elseif(Imin+5*a)
R(i,j)=125;
G(i,j)=256;
B(i,j)=125;
elseif(Imin+6*a)
R(i,j)=150;
G(i,j)=200;
B(i,j)=100;
elseif(Imin+7*a)
R(i,j)=175;
G(i,j)=150;
B(i,j)=75;
elseif(Imin+8*a)
R(i,j)=200;
G(i,j)=100;
B(i,j)=50;
elseif(Imin+9*a)
R(i,j)=225;
G(i,j)=50;
B(i,j)=25;
else
R(i,j)=256;
G(i,j)=0;
B(i,j)=0;
end
end
end
end
end
end
end
end
end
end
end
end
fori=1:
m
forj=1:
n
x1(i,j,1)=R(i,j);
x1(i,j,2)=G(i,j);
x1(i,j,3)=B(i,j);
end
end
x1=x1/256;
figure;
imshow(x1);title('密度分割法');
1.2.2
I=imread('C:
\Users\lenovo\Desktop\综合作业2_V3\X光图像\X1.tif');
figure;imshow(I);title('原始图像');
I=double(I);
[m,n]=size(I);
L=256;
fori=1:
m
forj=1:
n
ifI(i,j)R(i,j)=0;
G(i,j)=4*I(i,j);
B(i,j)=L;
elseifI(i,j)<=L/2
R(i,j)=0;
G(i,j)=L;
B(i,j)=-4*I(i,j)+2*L;
elseifI(i,j)<=3*L/4
R(i,j)=4*I(i,j)-2*L;
G(i,j)=L;
B(i,j)=0;
else
R(i,j)=L;
G(i,j)=-4*I(i,j)+4*L;
B(i,j)=0;
end
end
end
end
end
fori=1:
m
forj=1:
n
x1(i,j,1)=R(i,j);
x1(i,j,2)=G(i,j);
x1(i,j,3)=B(i,j);
end
end
x1=x1/256;
figure;
imshow(x1);title('多波段合成为彩色显示');
2.1.1
I1=imread('D:
\MATLAB图像处理程序\X光图像\X2.tif');
I2=rgb2gray(I1);
figure;imshow(I2);
title('X2灰图像')%显示原始图像
G=fspecial('gaussian',[1212],1);%这里的gaussian滤波窗口可选任意尺寸和标准差
A=fspecial('average',12);%这里的average滤波窗口可选任意尺寸
f1=filter2(G,I2);%使用G矩阵中的gaussian滤波器对图像滤波
f2=filter2(A,I2);%使用A矩阵中的average滤波器对图像滤波
f3=medfilt2(I2,[1212]);%使用中值滤波器对图像滤波
f4=wiener2(I2,[1212]);%使用自适应滤波器对图像滤波
f5=ordfilt2(I2,5,ones(12,12));%使用二维统计顺序过滤
figure;imshow(f1,[]);
title('高斯低通滤波器处理结果');
figure;imshow(f2,[]);
title('均值滤波器处理结果');
figure;imshow(f3,[]);
title('中值滤波器处理结果');
figure;imshow(f4,[]);
title('自适应滤波器处理结果');
figure;imshow(f5,[]);
title('二维统计顺序滤波处理结果');
J=double(I2);
f=fft2(J);
g=fftshift(f);
[M,N]=size(f);
n=2;d0=16;
n1=floor(M/2);n2=floor(N/2);
fori=1:
M;
forj=1:
N;
d=sqrt((i-n1)^2+(j-n2)^2);
h=1/(1+0.414*(d/d0)^(2*n));
g(i,j)=h*g(i,j);
end
end
g=ifftshift(g);
f6=uint8(real(ifft2(g)));
figure;imshow(f6)
title('二阶Butterworth滤波图像')
2.1.2
I1=imread('D:
\MATLAB图像处理程序\X光图像\X2.tif');
I2=rgb2gray(I1);
figure;imshow(I2);
title('X2灰图像')%显示原始图像
filtered1=medfilt2(I2,[33]);%使用3*3滤波窗口
figure;imshow(filtered1);
title('3x3窗的中值滤波图像')
filtered2=medfilt2(I2,[77]);%使用7*7滤波窗口
figure;imshow(filtered2);
title('7x7窗的中值滤波图像')
filtered2=medfilt2(I2,[1111]);%使用11*11滤波窗口
figure;imshow(filtered2);
title('11x11窗的中值滤波图像')
filtered2=medfilt2(I2,[1313]);%使用13*13滤波窗口
figure;imshow(filtered2);
title('13x13窗的中值滤波图像')
2.1.3
I1=imread('D:
\MATLAB图像处理程序\X光图像\X2.tif');
I2=rgb2gray(I1);
J=double(I2);
f=fft2(J);
g=fftshift(f);
[M,N]=size(f);
n=2;d0=16;%这里的d0可任意修改
n1=floor(M/2);n2=floor(N/2);
fori=1:
M;
forj=1:
N;
d=sqrt((i-n1)^2+(j-n2)^2);
h=1/(1+0.414*(d/d0)^(2*n));
g(i,j)=h*g(i,j);
end
end
g=ifftshift(g);
g=uint8(real(ifft2(g)));
figure;imshow(g)
title('二阶Butterworth滤波图像')
2.2
clear;clc;
I=imread('C:
\Users\Administrator\Desktop\x2.tif');
I=rgb2gray(I);
figure;
subplot(1,2,1),imshow(I);
title('原图');
subplot(1,2,2),imhist(I);
title('原图直方图')
filtered2=medfilt2(I,[1313]);%使用13*13滤波窗口
figure;
subplot(221),imshow(filtered2);
title('13x13窗的中值滤波去噪后的图像')
subplot(2,2,2),imhist(filtered2);
title('去噪后图像直方图')
subplot(2,2,3),f1=