数图实验报告总汇

更新时间:2024-02-02 22:48:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二:数字图像增强

实验(一)为必做,写入实验报告;在时间宽裕的情况下继续做实验(二),但不写入报告。

实验目的:验证数字图像增强算法

实验设备与软件:硬件: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('中值滤波结果')

(3)采用边界保持的中值滤波算法抑制图像中的椒盐噪声。该算法在抑制噪声的同时,有利于避免图像边界的模糊。算法原理如下:对于待处理的像素,使用3×3的模板,在模版的其他8个像素中,选择灰度值最与待处理像素最为接近的5个像素(不包括当前像素)的灰度值,对这5个灰度值进行排序,取中间的灰度值作为待处理像素的新灰度值。

采用matlab编程,对椒盐噪声污染的图像lenap.bmp进行边界保持的中值滤波处理。在同一个窗口中显示与比较噪声图像与处理后的图像。将处理后的图像取名为“边界保持滤波结果”,在当前路径下保存为bmp格式。

3.边界保持的中值滤波算法:

1. clc;clear;

2. I=imread('lenap.bmp'); 3. J=I;

4. [m,n]=size(I); 5. I=double(I); 6. J=double(J); 7. for i=2:m-1; 8. for j=2:n-1;

9. a=reshape(I(i-1:i+1,j-1:j+1),1,9); 10. a(5)=[ ];

11. b=a-I(i,j); 12. b=abs(b); 13. [c,d]=sort(b);

相关的Matlab函数提示:

将矩阵A转换为向量B: B=reshape(A,1,n),其中n为向量的元素总数;

将向量A中的第k个元素去掉:A(k)=[]; // 如:A=[ 3 5 1 4 6],令 A (3)= []; 则A=[3 5 4 6]。

向量排序函数为:sort( ) // 如:A=[ 3 5 1 4 6],则sort(A)= [1 3 4 5 6] [B,C]=sort(A); B为向量A排序后的新向量,C为A的各元素下标的排序向量 如:A=[ 3 5 1 4 6],[B,C]=sort(A); 则有:B= [1 3 4 5 6]; C=[3 1 4 2 5]; 矩阵I的坐标(i, j) 周围的3×3矩阵: I(i-1:i+1, j-1:j+1))

取向量中间值运算:median( ) // 如:A=[ 3 5 1 4 6],则median(A)=4; 取向量平均值运算:mean( ) // 如:A=[ 3 3 9],则mean(A)=5 取矩阵A的所有元素的平均值:mean(mean(A))

获取矩阵A的所有元素的中间值:median(median(A)) (注意:是各行中间值构成向量的中间值,此处不合题意不能用,均值函数可用)

J(i,j)=median(a(d(1:5)));

end end

14. J=uint8(J); 15. I=uint8(I);

16. imwrite(J,'边界保持滤波结果.bmp'); 17. subplot(1,2,1),imshow(I);

18. subplot(1,2,2),imshow(J),title('边界保持滤波

结果')

实验五:数字图像的锐化处理

实验目的:验证与设计数字图像的锐化算法

实验设备与软件:硬件:P4微机 软件:Matlab软件 实验原理:

(1) 采用水平方向的一阶微分算子处理图像。

采用水平方向的一阶微分算子处理图像可以用于提取图像水平方向的边缘信息,通过一个3×3的模板来实现。

?121?? H???000????1?2?1??采用取绝对值的方法对锐化图像进行后处理,即按照下式计算像素锐化后的值:

g(i,j)?f(i?1,j?1)?f(i?1,j?1)?2*[f(i?1,j)?f(i?1,j)]?f(i?1,j?1)?f(i?1,j?1)

计算结果中有的像素值还可能大于255。为了显示处理后的图像,将像素值限幅为255。

水平一阶微分算子锐化:

1. clear,clc 2.

3. 4. 5. 6.

I=imread('building.jpg'); I=double(I); J=I;

[m,n]=size(J); for i=2:m-1; for j=2:n-1;

J(i,j)=abs(I(i-1,j-1)-I(i+1,j-1)+2*(I(i-1,j)-I(i+1,j))+I(i-1,j+1)-I(i+1,j+); if J(i,j)>255

J(i,j)=255; end end

7. I=uint8(I);J=uint8(J);

8. subplot(1,2,1),imshow(I),title('原图像'); 9. subplot(1,2,2),imshow(J),title('新图像'); 10. imwrite(J,'水平锐化图像.bmp')

(2) 采用Sobel算子处理图像。

Sobel算子处理图像可以用于提取任意方向的边缘信息。其计算公式如下:

end

上式中的dx与dy都是采用以下3×3的模板来计算:

??1?2?1???101?? d???202? dx??000y????????121?101????即按照下式计算dx与dy:

为了显示处理后的图像,将像素值限幅为255。

(二阶微分算子)背景保持锐化:

1.

2. 3. 4. 5. 6.

clc,clear

I=imread('building.jpg'); I=double(I); J=zeros(size(I)); [m,n]=size(I); for i=2:m-1

for j=2:n-1

J(i,j)=4*I(i,j)-I(i-1,j)-I(i+1,j)-I(i,j-1)-I(i,j+1);

if J(i,j)>225 J(i,j)=225; end end

7. end 8. J=I+J;

9. I=uint8(I),J=uint8(J); 10. imshow(J)

11. imwrite(J,'背景保持的锐化图像.bmp')

实验内容:

(1)给定灰度图像building.jpg,采用matlab编程,采用水平方向的一阶微分算子对其进行处理。显示处理后的图像,并将其在当前路径下保存为“水平锐化图像.bmp”。

(2)给定灰度图像building.jpg,采用matlab编程,采用Sobel算子对其进行处理。显示处理后的图像,并将其在当前路径下保存为“Sobel锐化图像.bmp”。

(3)对于给定图像building.jpg,设计一种背景保持的图像锐化方法(例如,可以将Laplacian算子的处理结果与原图像进行叠加),使该图像的边缘变得清晰。并将其在当前路径下保存为“背景保持的锐化图像.bmp”。设计一种方法,使图像锐化的程度可以人为控制与选择。显示处理前后的图像,对比视觉效果的变化。

Sobel 算子锐化:

1. clc,clear

2. I=imread('building.jpg'); 3. I=double(I); 4. J=zeros(size(I)); 5. [m,n]=size(I); 6. for i=2:m-1 7. for j=2:n-1

8. x=I(i+1,j-1)-I(i-1,j-1)+2*(I(i+1,j)-I(i

-1,j))+I(i+1,j+1)-I(i-1,j+1);

9. y=I(i-1,j+1)-I(i-1,j-1)+2*(I(i,j+1)-I(i

,j-1))+I(i+1,j+1)-I(i+1,j-1); 10. J(i,j)=(x.^2+y.^2).^0.5; 11. if J(i,j)>225 J(i,j)=225; 12. end 13. end 14. end

15. I=uint8(I),J=uint8(J); 16. imshow(J)

17. imwrite(J,'Sobel锐化图像.bmp')

实验六:图像分割

实验内容(1)为必做;实验内容(2)为选做。

实验目的:验证图像分割的若干算法。

实验设备与软件:硬件:P4微机 软件:Matlab软件 实验原理:

图像分割是一种将灰度图像转换为二值图像的过程。计算公式如下:

f(i,j)?Th?1g(i,j)??f(i,j)?Th ?0 图像分割的关键在于确定合理的阈值Th。 (一)p-参数法

p-参数法,根据目标物在画面中所占的比例来选择阈值Th。对于已知目标物在画面中所占比例的情况下使用效果较好。假设背景为白色,目标物为黑色,算法步骤如下:

1)输入目标物所占画面的比例p;

2)计算原图的灰度直方图h; h(1)、h(256)是什么含义? (如何编程求向量h?)

3)计算灰度小于Th的像素个数N; (可以将N设置为对应于不同Th的向量,?)

4)设图像的尺寸为m×n,判断满足N(Th)>p*(m×n)条件的最小值N(Th),则输出Th的值;

5)按阈值Th对图像进行分割。 p-参数法:

1. clear,clc

2. I=imread('seal.bmp'); 3. I=double(I); 4. [m,n]=size(I);

5. J=logical(zeros(m,n)); 6. p=0.18

7. h=zeros(1,256); 8. for i=1:m 9. for j=1:n

10. h(I(i,j)+1)=h(I(i,j)+1)+1; 11. end 12. end

13. N(1)=h(1);

(二)基于灰度直方图的图像分割

? 假设某图像的灰度直方图具有二峰性( f(Ta)=Ha; f(Tb)=Hb ),表明这个图像较亮的区域和较暗的区域可以较好地分离。取二峰间的谷点为阈值Th,可以得到好的二值处理的效果。

15. for a=2:255;

16. N(a)=N(a-1)+h(a); 17. end

18. Th=min(find(N>p*m*n)) 19. for i=1:m; 20. for j=1:n; 21. if I(i,j)>=Th 22. J(i,j)=1; 23. else J(i,j)=0; 24. end 25. end 26. end

27. I=uint8(I);

28. subplot(1,2,1),imshow(J),title('新图像') 29. subplot(1,2,2),imshow(I),title('原图像') 30. imwrite(J,'p参数法分割图像.bmp')

实验内容:

(1)给定灰度图像Seal.bmp,假设已知目标物在画面所占比例为18%。采用matlab编程,采用p-参数法对其进行分割处理。在同一个窗口中同时显示原图像与分割图像,并将其在当前路径下保存为“p参数法分割图像.bmp”。(h,N,Th,分割)

(2)给定灰度图像ct.bmp,假设其直方图具有明显的二峰性:已知两个峰值对应的灰度级分别为:Ta=141;Tb=173。采用matlab编程,采用两峰之间的谷点所对应的灰度级作为阈值Th,对图像进行分割处理。显示原图像的直方图,显示处理后的图像,并将其在当前路径下保存为“基于直方图双峰性分割图像.bmp”。(h,局部h,最小像素个数的对应灰度级获取)

(略)

编程提示:

(1)图像直方图h为一个向量:h=zeros(1,256)。 h(1)~h(256) (2)显示图像直方图: imhist(I);

(3)定义分割后的二值图像矩阵J : J=logical(zeros(m, n));

(4)向量排序函数为:sort( ) [B,C]=sort(A); B为向量A排序后的新向量,C为A的各元素下标的排序向量。

(5)若x=[ 1 3 6 0 7 8]; y=find(x>2); 那么:y=[2 3 5 6];

实验七:二值图像处理

实验目的:验证二值图像处理算法

实验设备与软件:硬件:P4微机 软件:Matlab软件 实验原理:

1、 二值图像的腐蚀处理

腐蚀是一种消除连通域的边界点,使边界向内收缩的处理,可以使粘连的物体分开。 本实验规定目标物为黑色,像素值为0;背景为白色,像素值为1。算法描述如下: 扫描整个图像,处理每一个像素值为0的目标点:将结构元素的原点移到该点,判断该结构元素所覆盖的所有像素是否存在灰度值为1的像素?如果是,则将该像素值改为1;如果不是,则保持该像素值不变。

结构元素S为: S???10?,原点位于左上角元素处。 ??11?function Y=erode(X) [m,n]=size(X); S=[1 0;1 1]; Y=ones(m,n); O=zeros(2); for i=1:m-1 for j=1:n-1

if X(i:i+1,j:j+1).*S==O Y(i,j)=0; else Y(i,j)=1; end end end

2、二值图像的膨胀处理

clc,clear

I=imread('rice.bmp'); J=erode(erode(erode(I))); subplot(1,2,1) imshow(I) subplot(1,2,2) imshow(J)

imwrite(J,'三次腐蚀图像.bmp')

膨胀是使目标物边界向外部扩张的处理,为此需要将目标边界附近的背景点合并到该目标物中。膨胀处理可以使断开的目标物重新粘合在一起。

本实验规定目标物为黑色,像素值为0;背景为白色,像素值为1。算法描述如下: 扫描整个图像,处理每一个像素值为1的背景点:将结构元素的原点移到该点,判断该结构元素所覆盖的所有像素是否存在灰度值为0的像素?如果是,则将该像素值改为0;如果不是,则保持该像素值不变;

结构元素S为: S???10?,原点位于左上角元素处。 ??11?function Y=dilate(X)

[m,n]=size(X);

S=[1 0;1 1]; Y=ones(m,n); for i=1:m-1 for j=1:n-1

if X(i:i+1,j:j+1).*S==S Y(i,j)=1; else Y(i,j)=0; end end end clc,clear

I=imread('seal.bmp'); J=dilate(dilate(dilate(I))); figure(2)

subplot(1,2,1) imshow(I)

subplot(1,2,2) imshow(J)

imwrite(J,'三次膨胀图像.bmp')

3、二值图像的开运算与闭运算

开运算是对原图像先进行腐蚀处理,然后再进行膨胀的处理。闭运算是对原图像先进行膨胀处理,然后再进行腐蚀的处理。开运算可以在分离粘连目标物的同时,基本保持原目标物面积不变;闭运算可以在合并断裂目标物的同时,基本保持原目标物面积不变。

为了加强分离粘连物、合并断裂物的效果,开运算可以先进行N次腐蚀,再进行N次膨胀;对于闭运算可以先进行N次膨胀,再进行N次腐蚀。

clc,clear

I=imread('rice.bmp');

J=erode(erode(erode(erode(erode(I))))); J=dilate(dilate(dilate(dilate(dilate(J))))); subplot(1,2,1) imshow(I) subplot(1,2,2) imshow(J)

imwrite(J,'开运算图像.bmp')

clc,clear

I=imread('seal.bmp'); J=dilate(dilate(I)); J=erode(erode(J)); subplot(1,2,1)

imshow(I) subplot(1,2,2) imshow(J)

imwrite(J,'闭运算图像.bmp')

实验内容:

(1)建立matlab函数文件erode.m,用于对图像进行一次腐蚀处理,函数定义行为:function Y=erode(X)

建立matlab函数文件dilate.m,用于对图像进行一次膨胀处理,函数定义行为:function Y=dilate(X)

(2)调用函数文件erode.m,对二值图像rice.bmp连续进行三次腐蚀处理。显示处理后的图像,并将其在当前路径下保存为“三次腐蚀图像.bmp”。调用函数文件dilate.m,对二值图像seal.bmp其连续进行三次膨胀处理。显示处理后的图像,并将其在当前路径下保存为“三次膨胀图像.bmp”。

(3)对图像rice.bmp进行如下形式的开运算:先进行5次腐蚀,再进行5次膨胀。将处理后的图像保存为“开运算图像.bmp”。然后对图像seal.bmp进行如下形式的闭运算:先进行2次膨胀,再进行2次腐蚀。将处理后的图像保存为“闭运算图像.bmp”。

注:(2)与(3)的每个实验内容需要另建函数文件进行编程。

实验八:彩色图像处理

实验内容(1)为必做;实验内容(2)为选做。

实验目的:通过Matlab软件编程,掌握彩色图像处理基本方法。 实验设备与软件:硬件:P4微机;软件:Matlab软件 实验内容:

(1)对于有明显色偏的彩色图像,通过Matlab编程,对其进行色彩平衡处理。 (2)对椒盐噪声污染的彩色图像,通过Matlab编程,对其进行中值滤波处理。 实验原理与要求:

(1) 采用色彩平衡处理方法纠正彩色图像的色偏现象

有色偏的图像画面中,色彩发生了偏离。通常会导致本来应当为灰色的像素点却带上某种颜色。我们根据这种像素点色偏程度,校正整幅图像色彩。

? 在图像中找到一个本应为灰色的像素点,设其发生色偏后的颜色值为(R,G,B)。 ? 按照下式统计该像素的亮度值:Y?0.299?R?0.587?G?0.114?B ? 计算色彩平衡的校正参数: KR?YYY,KG?, KB? RGB? 对图像每个像素的三个颜色分量按下式重新计算,实现对整幅图像进行色彩平衡处理:

R*?KR?R,G*?KG?GB*?KB?B

采用matlab编程,对给定的图像stone.jpg进行色彩平衡处理。假设已知位于图像中石头上的某像素点的坐标为(148,206),被认为应当为灰色。由于图像发生了色偏,该像素有明显的偏红色现象。因此通过色彩平衡处理之后,我们期待图像中的石头能够得以恢复其灰色特征。将处理后的图像取名为“色彩平衡图像”,在当前路径下保存为bmp格式。

1. clc,clear

14. end

2. I=imread('stone.jpg');

15. end

3. [m,n,k]=size(I);

16. J=uint8(J);

4. J=zeros(m,n,k);

17. imshow(J),imwrite(J,'色彩平衡图

5. I=double(I);

像.bmp') 6. J=double(J);

7. R=I(148,206,1); 8. G=I(148,206,2); 9. B=I(148,206,3);

10. Y=0.299*R+0.587*G+0.114*B; 11. k1=Y/R,k2=Y/G,k3=Y/B; 12. for i=1:m 13. for j=1:n

J(i,j,1)=I(i,j,1)*k1; J(i,j,2)=I(i,j,2)*k2; J(i,j,3)=I(i,j,3)*k3;

(2) 采用中值滤波算法抑制彩色图像中的椒盐噪声。

中值滤波方法对椒盐噪声的抑制效果较好。中值滤波原理如下:对于待处理的像素,如果采用3×3的模板,则我们可以让该像素与其周围的8个相邻像素一起按照灰度值的大小进行排序,取排列在中间的灰度值作为待处理像素新的灰度值。采用matlab编程,对椒盐噪声污染的彩色图像capsicum.bmp进行中值滤波处理。将处理后的图像取名为“中值滤波图像”,在当前路径下保存为bmp格式。相对灰度图像处理方法而言,处理彩色图像的方法是将同样的操作处理在R,G, B三个分量上分别进行。

1.

2. 3. 4. 5. 6. 7.

clc,clear end I=imread('capsicum.bmp'); I=uint8(I); [m,n,k]=size(I); J=uint8(J); J=ones(m,n,k); imshow(J) I=double(I); imwrite(J,'中值滤波图像.bmp') J=double(J); for i=2:m-1 for j=2:n-1

J(i,j,1)=median(median(I(i-1:i+1,j-1:j+1,1))); J(i,j,2)=median(median(I(i-1:i+1,j-1:j+1,2))); J(i,j,3)=median(median(I(i-1:i+1,j-1:j+1,3))); end

特别提示:

(1)彩色图像的数据结构:

读取图像文件到数据数组I:I=imread(‘FILENAME. FMT’) ;

如果图像文件为彩色图像格式,则I为m×n×3的数组,其中I(: ,: ,1)表示红色分量的矩阵,其中I(: ,: ,2)表示绿色分量的矩阵,其中I(: ,: ,3)表示篮色分量的矩阵。

如果图像文件为灰度图像格式,则I为m×n的矩阵。 (2)获取图像数据的数组的大小:

对于灰度图像:[m, n]=size(I); m为图像的总行数,n为图像的总列数

对于彩色图像:[m, n, k]=size(I); m为图像的总行数,n为图像的总列数,k为描述彩色的分量的个数,一般为3。

(3)处理彩色图像的每个像素的每个颜色分量: for i=1:m for j=1:n for k=1:3

J(i,j,k) =…….. I(i,j,k) end end end

Matlab图像处理函数

【编程注意事项】

1)将matlab的当前路径设置到存放图像文件的文件夹; 2)在新建的.m文件中进行编程; 3)程序开头写:clc; clear 4)语句后面记得加分号“;” ? 读取图像文件到数据数组I:

I=imread(‘FILENAME. FMT’) ;

其中,FILENAME为文件名,FMT为图像格式;例如I=imread(‘girl, bmp’),即从当前路径读图像文件girl.bmp的数据,并保存到矩阵I中。

如果图像文件为24位位图,则I为m×n×3的数组,其中I(: ,: ,1)表示红色分量的矩阵,其中I(: ,: ,2)表示绿色分量的矩阵,其中I(: ,: ,3)表示篮色分量的矩阵;

如果图像文件为灰度图像格式,则I为m×n的矩阵。

特别提示:读取图像的数据矩阵的数据类型为uint8(8位无符号整数),如果进行四则运算,须要先转换为double数据类型。完成运算后,再转换为uint8的图像数据类型。 ? 将彩色图像转换为灰度图像:

I= rgb2gray(I); 即:I从m×n×3的数组转换为m×n的矩阵。 获取图像数据的数组的大小: 对于灰度图像:

[m, n]=size(I); m为图像的总行数,n为图像的总列数 对于彩色图像:

[m, n, k]=size(I); m为图像的总行数,n为图像的总列数,k为描述彩色的分量的

个数,一般为3。

? 显示图像: (1)imshow(‘FILENAME.FMT’); 其中FILENAME为当前路径下的图像文

件名, FMT为图像格式。例如:imshow(‘girl.bmp’); 将当前路径下的图像文件girl.bmp进行显示。

(2)imshow(I); 将矩阵I对应的图像进行显示。

(3)在一个窗口中同时显示多个图像:例如,以下语句用于显示4幅图像,排成两行两列;另外,还采用了title函数,以便在图像上方添加标题:

subplot(2,2,1), imshow(I1), title(‘图像1’);

subplot(2,2,2), imshow(I2) , title(‘图像2’);

subplot(2,2,3), imshow(I3) , title(‘图像3’);

subplot(2,2,4), imshow(I4) , title(‘图像4’); ? 保存图像文件: imwrite(I, ‘FILENAME.FMT’);

其中I是图像数据矩阵,FILENAME是保存文件的名称,FMT是保存文件的格式。 例如:imwrite(I, ’girl.bmp’); 该命令用于将图像矩阵I保存到当前路径下,文件名为girl,格式为bmp文件。

? 逐个处理每一个象素: 采用双重循环语句,可以逐个处理每一个象素,例如对于m行

n列的图像I,使其变为黑色: for i=1: m for j=1: n I(i, j)=0; end end

《数字图像处理基础》实验报告

实验名称: 成绩:

学生姓名: 学号:

实验目的:

实验设备与软件:

实验内容:

实验步骤:

实验结果分析:

本文来源:https://www.bwwdw.com/article/6bvw.html

Top