2014-7自编数字图像处理实验-参考答案 联系客服

发布时间 : 星期日 文章2014-7自编数字图像处理实验-参考答案更新完毕开始阅读9a311b25c8d376eeaeaa31d8

数字图像处理

—及MATLAB实现

实验指导参考答案

目录

实验1 MATLAB软件入门及数字图像处理工具箱(2学时) .................................................. 2 实验3 MATLAB实现数字图像的变换技术(2学时) ............................................................ 20 实验4 MATLAB实现数字图像增强(2学时) ...................................................................... 24

实验5 MATLAB实现图像的复原(2学时) ................................................................... 36 实验6 MATLAB实现图像分割(2学时) ......................................................................... 39 实验7 MATLAB实现彩色图像处理(2学时) ................................................................. 55 实验8 MATLAB实现数字图像其它处理(2学时).......................................................... 60

实验1 MATLAB软件入门及数字图像处理工具箱(2学时)

【实验内容】 一、二两项略

一、运行MATLAB,要求完成: (1)、了解MATLAB工作环境 (2)、运用MATLAB帮助系统,查询imread,imwrite,imshow这3个工具箱函数的功能,给出解释

(3)、在桌面上建立一个文件夹,以本人姓名拼音缩写为文件名,将该文件夹通过set path设置,放到MATLAB的搜索路径下。截图最后操作的界面,保存至该文件

夹下。

二、了解MATLAB的一些简单的工具箱函数使用,在MATLAB下完成一些图像处理操作。

1、在命令窗口下依次输入如下带下划线的英文命令,无需写注释,对比查看结果: (1)、读入并显示一幅图像

>> clear; close all; %首先清除 MATLAB 所有的工作平台变量,关闭已打开的图形窗口。 >> I=imread(′pout.tif′);%然后使用图像读取函数 imread 来读取一幅图像。假设要读取图像 pout.tif,并将其存储在一个名为 I的数组中 >> imshow(I) %使用 imshow 命令来显示数组 I 观察显示结果

(2)、检查内存中的图像

>> Whos %使用 whos命令来查看图像数据 I是如何存储在内存中, MATLAB 做出的响应如下: Name Size Bytes Class

I291 ×240 69840 uint8 array

Grand totalis69840 elementsusing69840 bytes (3)、实现直方图均衡化

如pout.tif图像对比较低,为了观察图像当前状态下亮度分布情况,可以通过使用 imhist函数创建描述该图像灰度分布的直方图。 >> figure,imhist(I);%首先使用 figure命令创建一个新的图像窗口,避免直方图覆盖图像数组 I的显示结果。 >> I2 =histeq(I); figure,imshow(I2);%可以通过调用 histeq函数将图像的灰度值扩展到整个灰度范围中,从而达到提高数组 I的对比度。此时修改过的图像数据保存在变量 I2中。然后,再通过调用imhist函数观察其拓展后的灰度值的分布情况。 (4)保存图像

将新调节后的图像 I2保存到磁盘中。假设希望将该图像保存为 PNG 格式图像文件,使用 imwrite函数并指定一个文件名,该文件的扩展名为.png。 >> imwrite(I2,′pout2.png′); (5)检查新生成文件的内容

利用 imfinfo函数可以观察上述语句写了什么内容在磁盘上。值得注意的是:在 imfinfo函数语句行末尾不要加上分号,以保证 MATLAB 能够显示图像输出结果;另外,要保证此时的路径与调用 imwrite时的路径一致。 >> imfinfo(′pout2.png′)

2、对一幅灰度图像 rice.tif进行一些较为高级的操作,在文本编辑器下输入如下程序,保存成test.m文件,按要求做,调试成功,并观察显示结果: clear; close all;

I=imread(′rice.tif′); imshow(I);%此处加一个断点,观察结果 background =imopen(I,stre(′disk15));%实现了背景亮度的估计 I2 =imsubtract(I,background);%得到背景一致的图像 figure,imshow(I2);%此处加一个断点,观察结果 I3 =imadjust(I2,stretchlim(I2),[0,1]);%修改后图很暗,调节对比度 figure,imshow(I3);%此处加一个断点,观察结果 level=graythresh(I3); bw =im2bw(I3,level);%通过阈值法实现图像的二值化 figure,imshow(bw);%此处加一个断点,观察结果 [labeled,numobjects]=bwlabel(bw,4); % labelcomponents %找出米粒的个数: numobjects=80 grain =imcrop(labeled);%使用imcrop选择标记区域

RGB_label(grain,@spring,’c’,’shuffle’);%伪彩色显示标记矩阵 Figure,imshow(RGB_label) %此处加一个断点,观察结果 graindata=regionprops(labeled,′basic′) allgrains=[graindata.area];

max(allgrains)%找最大的那粒米的尺寸

biggrain =find(allgrains==695)%返回最大的那粒米的标记号,%biggrain =68 mean(allgrains)%米粒的平均尺寸 hist(allgrains,20);%绘制一个包含20柱的直方图来说明米粒大小的分布 三、编程综合练习

1、试对lena图像分别进行4和16倍减采样,查看其减采样效果,分析。

提示:二维图像处理,行每隔2,列每隔2,抽取,则实现4倍减采样;行每隔4,列每隔4,抽取,则实现16倍减采样 参考程序如下: clear

a=imread('lena.bmp'); b=rgb2gray(a); figure

subplot(1,3,3),imshow(a),title('原图像'); m=[2 4]; for mn=1:2

[width,height]=size(b);

quartimage=zeros(floor(width/(m(mn))),floor(height/(m(mn)))); k=1; n=1;

for i=1:(m(mn)):width

for j=1:(m(mn)):height

quartimage(k,n)=b(i,j); n=n+1; end k=k+1; n=1; end

subplot(1,3,mn)