-
实验三 图像处理MATLAB 实验
(一) 实验目的和要求
1. 熟悉MATLAB中数字图像处理工具箱(Image Processing Toolbox)的基本使用方法和常用函数; 2. 熟练图像的矩阵表示方法;
3. 掌握图像处理的基本算法及函数调用,如直方图、二值化、图像分割、图像增强、图像变换等等。 4. 通过MATLAB在图像处理中的应用,体会MATLAB矩阵运算的技巧。
(二) 实验设备及材料
计算机,MATLAB2010
(三) 实验内容
1. 对任意灰度图像(最好是MATLAB 自带图像)进行以下操作:
a. 输入一幅灰度图像;
b. 调用im2bw,输出其二值化图像; c. 调用imhist函数,输出其直方图;
d. 其上输入输出放在一个figure中,并加title。以脚本文件的形式保存。
2. 自己编写二值化函数、直方图函数,以函数文件的形式保存。通过调
用自己编写的函数验证其有效性。
3. 对任意灰度图像加高斯噪声,利用中值滤波和平均滤波对其进行平
滑,观察平滑效果,将原图像、噪声图像、滤波后图像显示在一个figure中。
4. 通过调用edge函数对任意图像进行边缘提取,使用3种以上的算子
(如sobel\\prewitt等),比较每种算子分割效果,在一个figure中显示。
5、用MATLAB实现对图像的JPEG压缩编码。(此题不做要求,感兴趣的同学可以尝试编写)
解:1、如下所示: I=imread(''); subplot(2,2,1); imshow(I)
title(' 源图像'); bw=im2bw(I,; subplot(2,2,2); imshow(bw)
title('二值化图像');
11
-
subplot(2,2,3) imhist(I)
title(' 直方图');
在命令窗键入m文件名:shiyan3cell 结果如下所示:
2、直方图函数文件如下: %文件名为
function y=zft(I)
x=double(I);
Error in zft1 (line 8) h(f)=h(f)+1;
调用显示程序如下:
(1)当读入的图像为RGB彩色图像时要转成灰度图像再求其直方图 I=imread(''); x=rgb2gray(I); s=zft1(x);
subplot(2,2,1); imshow(I)
title(' 源图像'); subplot(2,2,2); imshow(x)
title(' 灰度图像'); subplot(2,2,3); bar(s)
title(' 直方图') y=imhist(x); subplot(2,2,4); bar(y)
title(' matlab自带的直方图函数imhist的图'); 结果如下:
22
-
(2)当读入的图像自身就为灰度图像时直接求其直方图 I=imread(''); s=zft1(I);
subplot(2,2,1); imshow(I)
title(' 源图像'); subplot(2,2,2); bar(s)
title(' 直方图') y=imhist(I); subplot(2,2,3); bar(y)
title(' matlab自带的直方图函数imhist的图'); 运行结果如下:
33
-
二值化函数文件如下: %function函数名为
function k=erzhi(I) I=double(I); else IK(p,q)=0; end end end
k=uint8(IK);
当为赋值逻辑1时,函数文件如下: function k=erzhi(I) [M,N]=size(I); IK=I;
for p=1:M; for q=1:N;
if I(p,q)>=90
logical(IK(p,q))= 1; else
44
-
IK(p,q)=0; end end end
k=uint8(IK);
调用显示程序如下:
(1)当读入的为RGB彩色图像时,要用rgb2gray函数将其转成灰度图像 I=imread(''); X=rgb2gray(I); t=erzhi (X); subplot(1,3,1); imshow(I)
title(' 源图像'); subplot(1,3,2); imshow(X)
title('灰度图像'); subplot(1,3,3); imshow(t)
title(' 二值化图像'); 显示图像如下所示:
55
-
(2)当读入的图像本身就是灰度图像时直接二值化即可,如: I=imread('') ; t=erzhi(I); subplot(1,2,1); imshow(I)
title(' 源图像'); subplot(1,2,2); imshow(t)
title(' 二值化图像'); 运行结果如下所示:
66
-
3、程序如下所示:
M=imread('') ; subplot(2,2,1);
imshow(M) title('原始图像');
P1=imnoise(M,'gaussian',0,; subplot(2,2,2);
imshow(P1) title('加高斯噪声图像');
K=fspecial('average',[5,5]); //预定义滤波函数 p2=filter2(K,P1)/255; subplot(2,2,3); imshow(p2)
title('平均滤波后图像');
P3=medfilt2(P1); subplot(2,2,4); 77
-
imshow(P3) title('中值滤波图像'); 图像如下:
如图可见,对于高斯噪声,均值滤波效果比中值滤波效果好。原因: (1)高斯噪声是幅值近似正态分布,但分布在每点像素上。
(2)因为图像中的每点都是污染点,所以中值滤波选不到合适的干净点。
(3)因为正态分布的均值为0,所以均值滤波可以消除噪声。(实际上只能减弱,不能消除。)
4、用Sobel、roberts、log、 prewitt四种边缘提取函数 I=imread('');
BW1=edge(I, 'roberts'); BW2=edge(I,'sobel'); BW3=edge(I,'log'); BW4=edge(I, 'prewitt');
subplot(2,3,1);
imshow(I) title('源图像')
subplot(2,3,2);
imshow(BW1)
title('用Roberts算子') subplot(2,3,3); imshow(BW2)
title('用Sobel算子 ') subplot(2,3,4); imshow(BW3)
title('用拉普拉斯高斯算子') subplot(2,3,5); imshow(BW4)
title(' 用prewitt 算子')
88
-
实验结果如下所示:
99