1、一、 实验目的1. 熟悉 matlab 软件图像处理工具2. 理解和掌握混合空间增强法在图像处理中的应用二、 实验内容下图是人体骨骼核扫描图像,要求通过混合空间增强法突出骨骼的更多细节来增强图像。三、 实验步骤由于图像灰度的动态范围很窄并且有很高的噪声内容,所以很难对其进行增强首先用拉普拉斯法突出图像中的小细节,然后用梯度法突出其边。平滑过的梯度图像将用于掩蔽拉普拉斯图像。最后,我们将试图试用灰度变换来增强图像的灰度动态范围。原 始 图 像Sobel梯 度 处理5*5均 值 滤 波拉 普 拉 斯 锐化图 像 相 乘图 像 相 加幂 律 变 换图 像 相 加四、 实验结果五、 实验分析步骤2中,
2、使用的拉普拉斯算子为-1,-1,-1;-1,8,-1;-1,-1,-1(或0 1 0,1 -4 1,0 1 0)操作后滤波,为了便于显示,对图像进行了标定,这一步先对图像进行初步的锐化滤波。步骤 3 中,由于使用的模板如上,让常数 c=1,简单的将原图和图 2 相加就可以得到一幅经过锐化过的图像。(而这个时候看到图 2 的噪声水平,将图 1 和图 2 相加之后也必然会有很多的噪声。拉普拉斯操作作为一种二阶微分算子,能很好的增强细节,但也产生更多的噪声。而降低噪声的一种方法就是使用中值滤波器,但属于非线性滤波器的中值滤波器有可能改变图像的性质,所以不可取。所以采取另一种方法,使用原图像梯度操作的
3、平滑形式所形成的一个模板。)步骤 4 中,对原图像试用 Sobel 梯度操作,分量 gx 为-1,-2,-1;0,0,0;1,2,1,而分量 gy 为-1,0,1;-2,0,2;-1,0,1的模板。( 梯度变换在灰度斜坡或台阶的平均相应要比拉普拉斯操作的更强烈,而对噪声和小细节的响应要比拉普拉斯操作的相应弱,而且可以通过均值滤波器对其进行平滑处理可以进一步降低, 此时看图像中的边缘要比拉普拉斯图像(即图 3)中的边缘要突出许多)步骤 5 中,使用大小为 5*5 的一个均值滤波器得到平滑后的 Sobel 梯度图像。(图4,5 要比图 2 亮表明具有重要边缘内容的梯度图像的值一般要比拉普拉斯图像的
4、值高) 步骤 6 中,将拉普拉斯图像(即图 3)与平滑后的梯度图像(即图 5)进行点乘。(此时看到强边缘的优势和可见噪声的相对减少,用平滑后的梯度图像来掩蔽拉普拉斯图像的目的达到了)步骤 7 中,将乘积图像(即图 6)与原图像相加就产生一幅需要的锐化图像。(与原图像相比,该图像中大部分细节的清晰度的增加都很明显,所以我们才需要综合多种的方法对图像进行处理,单独使用一种方法根本不可能达到这么好的效果,只需要看相对应的图像进行对比即可知道)步骤 8 中,我们希望扩展灰度范围,对图 7 进行幂率变换处理, r=0.5,c=1,然后即可对图像进行幂率变换(此时需要增大锐化后图像的动态范围,即使有很多种
5、这样效果的灰度变换函数,但是用幂率变换处理更好,直方图均衡和规定化的效果都不太好)(此时人体的轮廓的清晰度虽然还是不高,因为扩大的灰度动态范围的同时也增大了噪声,但是相比原图还是有相当大幅度的提高的,看下图原图与最终图像对比)六、 实验遇到的问题及解决1.问题:Attempt to execute SCRIPT imadd as a function:D:大学学习大三上 数字图像处理 作业imadd.m解决:imadd 是关键字,不要将其命名为 m 文件名,可以改成 add1 等2.问题:Error using imadd (line 69)X and Y must have the same
6、 size and class or Y must be a scalar double.解决:通过网上搜索找到:I think one of your images is RGB (size(.,3)=3) and the other is grayscale (size(.,3)=1). Say the vasculature image a is grayscale and the activation image c is RGB. To convert a to RGB to match c, use ind2rgb, then add.aRGB = ind2rgb(a,gray(2
7、56); % assuming uint8Alternatively, you could do aRGB = repmat(a,1 1 3);.Or to put the activation image into grayscale:cGray = rgb2gray(c);另外,也要将图像大小设置为一致,如:I1 = imresize(I,800 500)3、问题:Undefined function conv2 for input arguments of type double and attributes full 3d real. Error in filter2 (line 59
8、) y = conv2(hcol, hrow, x, shape);解决:添加 I1 = rgb2gray(I);七、 其他方法探究几种经典的锐化算子对人体骨骼图像处理后的视觉效果并不太理想所以提出一种混合空间增强算法首先进行对比度提升,然后用Laplace变换突出图像中的小细节接着用canny算子进行边缘检测最后将Laplace变换后的图像与边缘检测后的图像相乘再加上提升对比度后的图像得到混合空间增强图像。“canny”算子用法 B=edge(I,Canny,0.04); 经比较,可知其主要区别在与使用的边缘检测算子不同,但最终得到的图像都达到了要求。八、 实验总结刚开始做的时候每个步骤都写
9、成一个独立的 M 文件,需要每次截图,还遇到了一系列的问题,比如使用图像相加、相乘时报错,原因是两个图像大小格式不一致。不得不花费大量时间在网上寻找相关的方法教程,这相当麻烦。后来我采用了将所有代码写入一个 M文件中,只改动一些小细节,就能实现生成所想要的图像。相比较而言,后者节省了时间精力,提高了效率,值得以后我采用这种方法编程。总的来说。我在此次的图像处理实验中,收获还是挺大的。首次我对图像处理的混合空间增强的各种方法有了一个感性的理解,知道了拉普拉斯算子、sobel 梯度、均值滤波、幂律变换等。在架构后编程逻辑后,接下来就是具体实现每一项功能。在完成本次实验后,显然我对 matlab 图
10、像处理更加熟练了,同时也巩固了我在书本上学习的相关知识。另外,不得不说,在实验过程中,我也提高了处理分析问题的能力。比如,如何快速找到并利用教材、网上资源(特别是一些编程过程中遇到问题的解决方法)。附录%-人体骨骼图像处理-%clear;clc; %步骤 1:输出原图I=imread(1.tif); J = im2double(I); %增强%imshow(J); %title(原始图像 1); %步骤 2:拉普拉斯操作 h =-1,-1,-1;-1,8,-1;-1,-1,-1; %拉普拉斯算子%h=0 1 0,1 -4 1,0 1 0;J1 =imfilter(J,h); %滤波 %imsh
11、ow(J1); %title(拉普拉斯操作后图像 2); %步骤 3:将原图和图 2 相加就可以得到一幅经过锐化过的图像。 %J2=J+J1; J2=imadd(J,J1); %加法%imshow(J2) %title(原图和图 2 相加后图像 3); %步骤 4:Sobel 梯度操作:hx=-1,-2,-1;0,0,0;1,2,1; %生产 sobel 垂直梯度模板 hy=-1,0,1;-2,0,2;-1,0,1; %生产 sobel 水平梯度模板 gradx=filter2(hx,J,same); gradx=abs(gradx); %计算图像的 sobel 垂直梯度 grady=filt
12、er2(hy,J,same); grady=abs(grady); %计算图像的 sobel 水平梯度 J3=gradx+grady; %得到图像的 sobel 梯度 %imshow(J3,); %title(sobel 梯度处理后图像 4); %步骤 5:5*5 均值滤波器得到平滑后的 Sobel 梯度图像。 h1 = fspecial(average,5) ; J4 = imfilter(J3,h1); %imshow(J4,); %title(平滑后的 sobel 图像 5);%步骤 6:将拉普拉斯图像与平滑后的梯度图像进行点乘。 J5=J2.*J4;%J5=immultiply(J2,J4); %imshow(J5); %title(图 3 和图 5 相乘的掩蔽图像 6); %步骤 7:将乘积图像(即图 6)与原图像相加得到锐化图像。 J6=J+J5;%J6=imadd(J,J5);%imshow(J6); %title(原图和图 6 求和得到的锐化图像 7); %步骤 8:对图像进行幂率变换( garmma) gamma=0.5; c=1; J7=c.*J6.gamma; %imshow(J7); %figure,imshow(J7,)%title(幂率变换后的最终图像 8);