文档介绍:试验三 图像处理MATLAB 试验
试验目标和要求
熟悉MATLAB中数字图像处理工具箱(Image Processing Toolbox)基础使用方法和常见函数;
熟练图像矩阵表示方法;
掌握图像处理基础算法及函数调用,如直方图、二值化、图像分割、图像增强、图像变换等等。
经过MATLAB在图像处理中应用,体会MATLAB矩阵运算技巧。
试验设备及材料
计算机,MATLAB
试验内容
对任意灰度图像(最好是MATLAB 自带图像)进行以下操作:
输入一幅灰度图像;
调用im2bw,输出其二值化图像;
调用imhist函数,输出其直方图;
其上输入输出放在一个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('二值化图像');
subplot(2,2,3)
imhist(I)
title(' 直方图');
在命令窗键入m文件名:shiyan3cell
结果以下所表示:
2、直方图函数文件以下:
%
function y=zft(I)
x=double(I); //此句不要也可,因为I=imread('')读出是整形,有需要用双字节型则需要转换
[M,N]=size(x);
h=zeros(1,256); //产生1个1*256一维向量,用于存放每个灰度值个数
for i=1:M,
for j=1:N,
f=I(i,j);
h(f+1)=h(f+1)+1; //注意用h(f+1)是因为matlab中数组不能从零开始
end
end
y=h; //y要有返回值,不然该函数无作用
注:假如用h(f)=h(f)+1话,调用运行时会出现以下报错:
Attempted to access h(0); index must be a positive integer or logical.
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图');
结果以下:
(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图');
运行结果以下:
二值化函数文件以下:
%
function k=erzhi(I)
I=double(I); //该句没有也正确
[M,N]=size(I);
IK=I;
for p=1:M;
for q=1:N;