信息实验报告.docx
《信息实验报告.docx》由会员分享,可在线阅读,更多相关《信息实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
信息实验报告
信息处理的数学基础
实验四
班级:
信息1201班
姓名:
学号:
成绩:
2015年6月12日
实验四
一、实验目的:
本次实验与书中6.1节、6.2节、6.3节、6.4节的内容有关,包括以下的几个部分:
1)膨胀算子,腐蚀算子
2)中值算子
3)开集合算子,闭集合算子
4)ExtremaKiller算子
同时需要掌握MATLAB中subplot语句的功能。
二、实验过程
(1)膨胀(腐蚀)算子
命令格式:
dilation_block(‘输入图像名’,r,‘输出图像名’);
erosion_block(‘输入图像名’,r,‘输出图像名’);
结构元素是方块,参数r说明结构元素是一个中心在原点,边长为(2r+1)的方块。
作用对象是二值图像。
例1:
image=imread('2curve_256.bmp');
imshow(image);
dilation_block('2curve_256.bmp',5,'2_dilation.bmp');
erosion_block('2curve_256.bmp',5,'2_erosion.bmp');
differ('2curve_256.bmp','2_erosion.bmp','original_erosion.bmp');
differ('2_dilation.bmp','2curve_256.bmp','dilation_original.bmp');
figure;
subplot(2,2,1)image1=imread('2_dilation.bmp');
imshow(image1);
subplot(2,2,2)image2=imread('dilation_original.bmp');
imshow(image2);
subplot(2,2,3)image3=imread('2_erosion.bmp');
imshow(image2);
subplot(2,2,4)imshow('dilation_original.bmp');
结果如图1所示。
其中需要解释两个函数:
第一、differ(’输入图像名一’,’输入图像名二’,’’输出图像名’)是表示两个二值图像的差。
第二、subplot语句用来同时显示几个图像。
subplot(2,2,i)(i=1,2,3,4)中的2,2说明图像按2行2类排放,另外i按照
1
2
3
4
的次序排放。
原图像
图1
例2:
dilation_block(‘pentagram.bmp’,i,‘pi.bmp’);
i.=1,2,3,4,5,6,7,8,9,10;
figure;
subplot(3,4,i);
imshow(pi.bmp);
make_movie(‘p’,10);
先用dilation_block产生十幅膨胀图像,然后make_movie用来产生电影和显示图像,它使用的参数必须和bmp图像组的名字保持一致。
结果如图2所示。
图2
膨胀(腐蚀)算子
命令格式
dilation_disk(‘输入图像名’,r,‘输出图像名’)
erosion_disk(‘输入图像名’,r,‘输出图像名’)
结构元素是圆盘,其中r是圆盘的半径,作用对象是二值图像。
结果如图3所示:
例3:
image=imread('jylcq.bmp');
imshow(image);
dilation_disk('jylcq.bmp',5,'jylcq_dilation.bmp');
erosion_disk('jylcq.bmp',5,'jylcq_erosion.bmp');
differ('jylcq.bmp','jylcq_erosion.bmp','original_erosion.bmp');
differ('jylcq_dilation.bmp','jylcq.bmp','dilation_original.bmp');
figure;
subplot(2,2,1)
imshow('jylcq_dilation.bmp');
subplot(2,2,2)
imshow('jylcq_erosion.bmp');
subplot(2,2,3)
imshow('original_erosion.bmp');
subplot(2,2,4)
imshow('dilation_original.bmp');
结果如图4所示。
jylcq.bmp
膨胀(腐蚀)算子
命令格式
dilation_block(‘输入图像名’,r,‘输出图像名’);
erosion_block(‘输入图像名’,r,‘输出图像名’);
dilation_disk(‘输入图像名’,r,‘输出图像名’);
erosion_disk(‘输入图像名’,r,‘输出图像名’);
作用对象是灰度图像。
例4
dilation_block('16I8.bmp',3,'16I8_db.bmp');
erosion_block('16I8.bmp',3,'16I9_eb.bmp');
dilation_disk('16I8.bmp',3,'16I9_dc.bmp');
erosion_disk('16I8.bmp',3,'16I9_ec.bmp');通过图4,可以发现图像的质量退化非常严重。
可见,单个的膨胀(腐蚀)算子不是一个好的滤波算子。
16I18.bmp
图4
二、中值算子
1)中值算子
命令格式:
median_block(‘输入图像名’,r,‘输出图像名’);
结构元素是方块,参数r说明结构元素是一个中心在原点,边长为(2r+1)的方块。
作用对象是二值图像。
例5:
image=imread('8I3_256.bmp');
imshow(image)
median_block('8I3_256.bmp',6,'8_median.bmp');
figure;
image2=imread('8_median.bmp');
imshow(image2)
2)中值算子
命令格式:
median_disk(‘输入图像名’,r,‘输出图像名’);
结构元素是圆,其中参数r表示半径,作用对象是二值图像。
例6:
image=imread(‘17I9.bmp’);
imshow(image);
median_disk(‘17I9.bmp’,5,‘17I9_median.bmp’);
figure;
image2=imread(‘17I9_median.bmp’);
imshow(image2);
结果如图5所示。
17I9.bmp17I9_median.bmp
3)中值算子
命令格式:
midean_block(‘输入图像名’,r,‘输出图像名’)
midean_disk(‘输入图像名’,r,‘输出图像名’)
参数说明同1)2),作用对象是图像。
例7:
image=imread('23I17.bmp');
imshow(image);
noiseimage=imnoise(image,'salt&pepper',0.50);
figure;
imshow(noiseimage);
imwrite(noiseimage,'23noise.bmp');
median_block('23noise.bmp',3,'23denoise.bmp')
figure;
denoiseimage=imread('23denoise.bmp');
imshow(denoiseimage);
我们先把图像加上50%的椒盐噪声,图像质量非常恶劣。
而经过中值滤波后,图像的质量有了提升,如图3所示。
原图像(a)加了50%椒盐噪声的图像(b)中值滤波后的结果
图3
一、开集(闭集)算子
我们曾经说明,单独的dilation算子和erosion算子都不是好的滤波器,但经过组合可以产生很好的滤波效果。
命令格式
close_open(‘输入图像名’)
open_close(‘输入图像名’)
close_open经过以下四步得到:
(1)结构元素为1×3的矩阵腐蚀;
(2)结构元素为1×3的矩阵膨胀;(3)结构元素为3×1的矩阵膨胀;(4)结构元素为3×1的矩阵腐蚀。
每个步骤分别生成结果文件,名字分别是输入图像名加上e,de,dde,edde。
open_close经过以下四步得到:
(1)结构元素为1×3的矩阵膨胀;
(2)结构元素为1×3的矩阵腐蚀;(3)结构元素为3×1的矩阵腐蚀;(4)结构元素为3×1的矩阵膨胀。
每个步骤分别生成结果文件,名字分别是输入图像名加上d,ed,eed,deed。
例7
close_open('3Enoise.bmp');
产生的结果如图8(a)-8(e)所示。
3Enoisee.bmp,3Enoisede.bmp,3Enoisedde.bmp为中间结果,3Enoiseedde.bmp为最终的滤波结果。
(a)原图像
(b)腐蚀的结果(c)膨胀、腐蚀的结果
(d)膨胀、膨胀、腐蚀的结果(e)腐蚀、膨胀、膨胀、腐蚀的结果
图8
例8
open_close(‘pentagram.bmp’);
产生的结果如图9所示。
图9
该图由左至右由上至下分别为(f)原图像(g)膨胀的结果(h)腐蚀、膨胀的结果(i)腐蚀、腐蚀、膨胀的结果(j)膨胀、腐蚀、腐蚀、膨胀的结果
四Extrema算子
1)单个水平集的处理
命令格式
level_conduct(‘输入图像名’,threshold,‘输出图像名’);
输入文件名所指示的文件必须是一个二值图像文件,否则程序会产生意想不到的结果。
该程序将去除二值图像中面积比较小的白色(灰度值为255)连通区域,如果这部分面积小于threshold。
例9
level_conduct('4Equation.bmp',5,'4EquationC.bmp');
结果如图10
图10
2)Extremakiller算子的实现
Extremakiller算子的定义见6.1节和7.1节。
我们的算法对经典的Extremakiller作了改进。
命令格式
killer(‘输入文件名’,threshold,‘输出文件名’)
其中threshold为Extremakiller的尺度参数。
例10
a=imread('23I17.bmp');
J=imnoise(a,'salt&pepper',0.7);
imshow(J);
imwrite(J,'23I17_sp7.bmp');
killer('23I17_sp7.bmp',8,'I8_sp7_k8.bmp')
结果如图5所示。
(a)噪声图像(b)killer算子作用后图像
图5
实践和思考:
执行以下两段程序,
1)killer('23I17_sp7.bmp',8,'23I17_sp7_k8.bmp');
level_set('23I17_sp7_k8.bmp',128,'s1.bmp');
2)level_set('23I17_sp7.bmp',128,'s2.bmp');
level_conduct('s2.bmp',8,‘s3.bmp’);
说明:
以下三行程序是翻转图像值,常见实验手册
(二)
I=imread('s3.bmp');
JJ=imadjust(I,[01],[10]);
imwrite(JJ,'s4.bmp');
level_conduct('s4.bmp',8,‘s5.bmp’);
说明:
以下三行程序是翻转图像值
I=imread('s5.bmp');
JJ=imadjust(I,[01],[10]);
imwrite(JJ,'s6.bmp');
观察s1.bmp是否非常接近s6.bmp。
如果是,运用书6.1节的知识,请说明killer执行了怎样的运算,它和经典的Extremakiller之间存在怎样的关系。
原图像图像的水平集128
原图像图像的水平集128