实验二:数字图像增强
实验(一)为必做,写入实验报告;在时间宽裕的情况下继续做实验(二),但不写入报告。
实验目的:验证数字图像增强算法
实验设备与软件:硬件:P4微机; 软件:Matlab 实验原理与实验内容:
(一)采用对比度线性展宽算法增强人物图像。
对比度线性展宽,原图像像素灰度 f(i,j) 与处理后图像像素灰度 g(i,j) 的映射关系可用下图表示。
其中,K1、K2、K3为三段折线的斜率。用计算公式表达像素的灰度映射关系为:
I(i,j)?fa?K1?I(i,j)?J(i,j)??K2?(I(i,j)?fa)?ga fa?I(i,j)?fb?K3?(I(i,j)?f)?gI(i,j)?fbbb? (i?1,2,...,m;j?1,2,...,n)K1?ga/faK2?(gb?ga)/(fb?fa);K3?(255?gb)/(255?fb);给定灰度图像girl.bmp,采用matlab编程,请对其进行线性对比度展宽处理。原图中重
要景物灰度分布在[fa, fb]范围,希望处理后图像的重要景物灰度分布范围为[ga, gb]。相关参数如下:fa=30, fb=140, ga=60, gb=200。实现上述算法,最后显示处理后的图像,并将其取名为new-girl,在当前路径下保存为bmp格式。 编程思路提示:
1) 对fa, fb, ga, gb进行赋值;
2) 读取图像girl.bmp的数据,存放到矩阵I; 3) 读取矩阵I的行与列的大小,赋给变量m与n 4) 把I的数据类型从uint8转换为double 5) 计算三段折线的斜率k1、k2、k3;
6) 用循环语句,根据对比度线性展宽的计算公式,计算对每个像素的新灰度值,赋值给
新矩阵J;
7) 把I与J的数据类型从double转换为uint8; 8) 将矩阵J保存为新图像“new_girl.bmp”。
9) 在同时显示原始图像girl.bmp与新图像new_girl.bmp。并分别用“原始图像”与“新
图像”为标题。
对比度线性展宽程序:
1. clc,clear 2. fa=70; 3. fb=180; 4. ga=40; 5. gb=220;
6. I=imread('girl.bmp'); 7. [m,n]=size(I); 8. k1=4/7; 9. k2=18/11; 10. k3=7/15; 11. I=double(I); 12. for i=1:m 13. for j=1:n 14. if I(i,j) 15. J(i,j)=k1*I(i,j); 16. elseif I(i,j) 17. J(i,j)=k2*(I(i,j)-fa)+ga; 18. else I(i,j)>=fb 19. J(i,j)=k3*(I(i,j)-fb)+gb; 20. end 21. end 22. end 23. I=uint8(I); 24. J=uint8(J); 25. imwrite(I, 'girl.bmp') 26. imwrite(J, 'new girl.bmp') 27. subplot(1,2,1),imshow(I),title('原始图像'); 28. subplot(1,2,2),imshow(J),title('新图像'); 10) (二)采用灰级窗算法增强CT图像中的肺部区域。 灰级窗算法只显示指定灰度级范围内的信息,并充分其增强对比度 本实验根据给定的CT图像,通过灰级窗算法,充分增强肺部区域,尽量不显示其他人体组织。用计算公式灰度映射关系请同学们自行推导。已知肺部区域的图像灰度范围大致为:fa=45;fb=160。采用matlab编程实现上述算法,最后显示处理后的图像,并将其取名为lung_window,在当前路径下保存为bmp格式。 实验三:数字图像的几何变换 实验(一)为必做;实验时间宽裕的同学继续做实验(二)。 实验目的:验证数字图像的几何变换算法 实验设备与软件:硬件:P4微机; 软件:Matlab 实验原理: 图像的几何变换是通过将图像中所有像素按要求进行移动来实现的。通过像素坐标变换公式,将原图像所有像素从位置( i, j )放置到新图像的新位置( i’, j’ )。 1、图像平移。假设图像在画布上沿行方向与列方向分别移动Δi与Δj。设图像的任一像素坐标为( i, j ),其在新图像中的坐标为(i’, j’)。平移处理的像素坐标变换关系如下: ?i'?i??i??j'?j??j 提示:假设原图像的大小为M×N,则新图像为(M+Δi)×(N+Δj)。 2、图像的水平镜像。以图像垂直中轴线为中心,交换图像的左右两部部分。假设图像的大小为M×N,水平镜像处理的像素坐标变换关系如下: ?i'?i??j'?N?j?1 提示:新图像与原图像相同大小。 3、图像的旋转。以图像中的某一点为原点,按照顺时针或逆时针旋转一定的角度。图像逆时针旋转的像素坐标变换关系如下: ?i'?icos??jsin???j'?isin??jcos? 提示:(1)原图像四个顶点像素旋转之后的坐标最大值与最小值为: imin=min([cosθ-sinθ,m*cosθ-sinθ,cosθ-n*sinθ,m*cosθ-n*sinθ]); imax=max([cosθ-sinθ,m*cosθ-sinθ,cosθ-n*sinθ,m*cosθ-n*sinθ]); jmin=min([sinθ+cosθ, m*sinθ+cosθ, sinθ+ n*cosθ, m*sinθ+ n*cosθ]); jmax=max([sinθ+cosθ, m*sinθ+cosθ, sinθ+ n*cosθ, m*sinθ+ n*cosθ]); (2)旋转后的图像大小:M=imax-imin;N= jmax-jmin。定义新图像,像素值全部为0。 (3)对旋转后的图像像素,需要平移的行数与列数为: di=1-imin;dj=1-jmin (4)使用原图像的每个像素(i, j)的灰度值,填充到新图像中:(新坐标:整型,限幅) J(i*cosθ-j*sinθ+di, i*sinθ+j*cosθ+dj)=I(i, j) (5)填充空洞像素: 判断新图像的每个像素:如果其值为0,且其四近邻像素值全部不为0,则用其上方的像素值对该像素进行赋值。 实验内容: (一)给定灰度图像capsicum.jpg,分别进行平移与水平镜像处理: 1、将图像平移120行与90列,将其保存为bmp格式文件,文件名为“平移图像”。 2、将图像进行水平镜像处理,将其保存为bmp格式文件,文件名为“水平镜像图像”。 (二)将图像逆时针旋转300,将其保存为bmp格式文件,文件名为“旋转图像”。 注意:定义M×N的黑色背景图像J:J=uint8(zeros(M,N)); 四舍五入取整数:x=round(x); 取向量的最大元素值:例如max([3, 5, 8]) =8;取向量的最小元素值:例如min([3, 5, 8])=3; 图像旋转程序: 水平镜像程序: 1. clc,clear 1. Clc,clear 2. I=imread('capsicum.jpg'); 2. I=imread('capsicum.jpg'); 3. [m,n]=size(I); 3. [m n]=size(I); 4. a=30*pi/180 4. I=double(I); 5. J=uint8(zeros(m,n)); 5. imin=.……; 6. for i=1:m; 6. imax=.........; for j=1:n; 7. jmin=..........; J(i,n-j+1)=I(i,j); 8. M=imax-imin,N=jmax-jmin,di=1-imin,dj=1-jmin end 9. J=uint8(zeros(M,N)); 7. end 10. for i=1:m 8. I=uint8(I) 11. for j=1:n 9. J=uint8(J) 10. imwrite(J,'new_capsicum2.bmp') 12. J(round(i*cos(a)-j*sin(a)+di), round(i 11. subplot(1,2,1),imshow(I),title('capsic*sin(a)+j*cos(a)+dj))=I(i, j) ; um') 13. end 12. subplot(1,2,2),imshow(J),title('new_c 14. end apsicum2') 15. for i=2:M-1 16. for j=2:N-1 17. if J(i,j)==0&J(i+1,j)~=0&J(i-1,j) ~=0&J(i,j+1)~=0&J(i,j-1)~=0 18. J(i,j)=J(i-1,j); 19. end 20. end 21. end 22. imshow(J) 23. imwrite(J,'旋转图像.bmp') 实验四:数字图像的噪声抑制 实验内容(1)(2)为必做;在时间宽裕的情况下继续做实验内容(3)。 实验目的:通过本实验,掌握运用Matlab软件编程对图像噪声进行滤波处理的方法。 实验设备与软件:硬件:P4微机;软件:Matlab软件 实验内容: (1)对高斯噪声污染的图像,进行均值滤波处理。(2)对椒盐噪声污染的图像,进行中值滤波处理。(3)对椒盐噪声污染的图像,进行边界保持的中值滤波处理。 实验原理:(1)采用均值滤波算法抑制图像高斯噪声。高斯噪声的特点是:图像中的每一点都存在噪声,但噪声的幅值是随机分布的。均值滤波方法对高斯噪声的滤波效果较好。均值滤波原理如下:对于待处理的像素,使用3×3的模板,计算该模版中9个像素的灰度平均值,作为该像素的新灰度值。采用matlab编程,对高斯噪声污染图像lenag.bmp进行均值滤波处理。在同一个窗口中显示与比较噪声图像与处理后的图像。将处理后的图像取名为“均值滤波结果”,在当前路径下保存为bmp格式。 1.均值滤波算法: 1. 2. 3. 4. 5. 6. clc,clear I=imread('lenag.bmp'); I=double(I); J=I; [m,n]=size(I); for i=2:m-1; for j=2:n-1; A=J(i-1:i+1,j-1:j+1); J(i,j)=mean(A(:)); end 7. end 8. I=uint8(I); 9. J=uint8(J); 10. imshow(J),imwrite(J,'均值滤波结果 图像.bmp') (2)采用中值滤波算法抑制图像椒盐噪声。椒盐噪声的幅值基本恒定,但噪声出现的位置是随机的。中值滤波方法对椒盐噪声的抑制效果较好。中值滤波原理如下:对于待处理的像素,使用3×3的模板,让模版中的9个像素按照灰度值大小进行排序,取排列在中间的灰度值作为待处理像素的新灰度值。采用matlab编程,对椒盐噪声污染的图像lenap.bmp进行中值滤波处理。在同一个窗口中显示与比较噪声图像与处理后的图像。将处理后的图像取名为“中值滤波结果”,在当前路径下保存为bmp格式. 2.中值滤波算法: 1. 2. 3. 4. 5. 6. clc;clear; I=imread('lenap.bmp'); I=double(I); J=I; [m,n]=size(I); for i=2:m-1; for j=2:n-1; 8. J(i,j)=median(median(I(i-1:i+1,j-1:j+1))); end end 9. I=uint8(I); 10. J=uint8(J); 11. imwrite(J,'中值滤波结果.bmp'); 12. subplot(1,2,1),imshow(I); 13. subplot(1,2,2),imshow(J),title('中值滤波结果')