当前位置:文档之家› 数字图像处理实验报告实验三

数字图像处理实验报告实验三

数字图像处理实验报告实验三中南大学数字图像处理实验报告实验三数学形态学及其应用实验三 数学形态学及其应用一.实验目的1.了解二值形态学的基本运算2.掌握基本形态学运算的实现3.了解形态操作的应用 二.实验基本原理腐蚀和膨胀是数学形态学最基本的变换,数学形态学的应用几乎覆盖了图像处理的所有领域,给出利用数学形态学对二值图像处理的一些运算。

膨胀就是把连接成分的边界扩大一层的处理。

而收缩则是把连接成分的边界点去掉从而缩小一层的处理。

二值形态学I(x,y), T(i,j)为 0/1图像Θ腐蚀:[]),(&),(),)((),(0,j i T j y i x I AND y x T I y x E mj i ++=Θ==膨胀:[]),(&),(),)((),(0,j i T j y i x I OR y x T I y x D mj i ++=⊕== 灰度形态学 T(i,j)可取10以外的值 腐蚀: []),(),(min ),)((),(1,0j i T j y i x I y x T I y x E m j i -++=Θ=-≤≤膨胀: []),(),(max ),)((),(1,0j i T j y i x I y x T I y x D m j i +++=⊕=-≤≤1.腐蚀Erosion:{}x B x B X x ⊂=Θ:1B 删两边 2B 删右上图5-1 剥去一层(皮)2.膨胀Dilation:{}X B x B X x ↑⊕:=1B 补两边 2B 补左下图5-2 添上一层(漆)3.开运算open :B B X ⊕Θ=)(X B4.闭close :∨Θ⊕=B B X X B)(5.HMT(Hit-Miss Transform:击中——击不中变换) 条件严格的模板匹配),(21T T T =模板由两部分组成。

1T :物体,2T :背景。

{}C x x i X T X T X T X ⊂⊂=⊗21,图5-3 击不中变换示意图性质:(1)φ=2T 时,1T X T X Θ=⊗ (2))()()(21T X T X T X C Θ⋂Θ=⊗C T X T X )()(21Θ⋂Θ=)/()(21T X T X ΘΘ= 6.细化/粗化 (1)细化(Thin )C T X X T X XoT )(/⊗⋂=⊗= 去掉满足匹配条件的点。

图5-4 细化示意图系统细化{}n B oB XoB T Xo Λ))(((21=, i B 是1-i B 旋转的结果(90︒,180︒,270︒)共8种情况 适于细化的结构元素1111000d d I = dd d L 101100=(2)粗化(Thick ) )(T X X T X ⊗⋃=•用(){}0,01=T (){}0,12=T 时,X X X T X =⋃=•X 2211123T⨯⨯⨯⨯⨯XoTXX ⊗T ⨯X X ⊗TX ΘTT ⊕故要选择合适的结构元素,如(){}0,11-=T ,(){}0,02=T对偶性:()*T X T X C Cο=•(验证一下) where ),(*12T T T = when ),(21T T T = 7. Morphology 小结A.通过物体(对象)和结构元素的相互作用,得到更本质的形态(shape )(1) 图像滤波(2) 平滑区域的边界(3) 将一定形状施加于区域边界(4) 描述和定义图像的各种几何参数和特征(区域数、面积、周长、连通度、颗粒度、骨架、边界) B.形态运算是并行运算 C.细化区域或边界变为1个象素的宽度,但它不破坏连通性 四方向细化算法:逻辑运算(可删除条件) 形态运算是否可用于细化?(1)腐蚀:收缩(去掉边缘的点)何时结束?能否保证连通性? (2)开:去毛刺,能否细化(去掉尺寸小于结构元素的块) 三.实验提示Matlab 中用imdilate 函数实现膨胀。

用法为:Imdilate(X,SE).其中X 是待处理的图像,SE 是结构元素对象。

例如:bw = imread('text.png'); se = strel('line',11,90); bw2 = imdilate(bw,se); imshow(bw), title('Original') figure, imshow(bw2), title('Dilated') Matlab 用imerode 函数实现图像腐蚀。

用法为:Imerode(X,SE).其中X 是待处理的图像,SE 是结构元素对象。

如:I = imread('cameraman.tif'); se = strel('ball',5,5); I2 = imerode(I,se); imshow(I), title('Original') figure, imshow(I2), title('Eroded')Matlab 用imopen 函数实现图像开运算。

用法为: imopen(I,se);I 为图像源,se 为结构元素Matlab 用imclosee 函数实现图像闭运算。

用法为:imclose(I,se);I为图像源,se为结构元素结构元素的选取:strel函数SE = strel('arbitrary',NHOOD)将NHOOD构造成你设定的矩阵;如将NHOOD写在[1 1 1;1 1 1; 1 1 1] SE = strel('diamond',R)构造一个中心具有菱形结构的结构元素,R为跟中心点的距离SE = strel('rectangle',MN)构造一个矩形的结构元素,MN可写在[3 4],表示3行4列SE = strel('square',W)构造一个正方形的矩阵。

计算二值图像面积bwarea功能:计算二进制图像对象的面积。

语法:total = bwarea(BW)举例BW = imread('circles.png');imshow(BW);bwarea(BW)ans =15799bwmorph功能:提取二进制图像的轮廓。

语法:BW2 = bwmorph(BW1,operation)BW2 = bwmorph(BW1,operation,n)举例BW1 = imread('circles.png');imshow(BW1);BW2 = bwmorph(BW1,'remove');BW3 = bwmorph(BW1,'skel',Inf);imshow(BW2)figure, imshow(BW3)四.实验内容与要求1.设计程序实现对图5-5,实现去除图像中的噪声。

2.设计程序,实现将图5-6转化为二值图像,并计算图中鸡块中骨头的比重。

3.设计程序,实现去除图5-7中的矩形区域外的噪声,并填充矩形区域内部了。

提示:做题是把下面的图另存为单独的图像文件进行处理。

图5-5图5-6图5-7五、实验过程与结果1.分别用Roberts,Sobel和拉普拉斯高斯算子对图像进行边缘检测。

比较三种算子处理的不同之处代码:I=imread('test_pattern.tif');subplot(2,2,1);imshow(I),title('原图');BW1=edge(I,'roberts');subplot(2,2,2);imshow(BW1),title('用Roberts算子')BW2=edge(I,'sobel');subplot(2,2,3);imshow(BW2),title('用Sobel算子 ')BW3=edge(I,'log');subplot(2,2,4);imshow(BW2),title('用拉普拉斯高斯算子 ')结果:(3)比较Roberts算子:边缘定位准,但是对噪声敏感。

适用于边缘明显且噪声较少的图像分割。

Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑,会在图像边缘附近的区域内产生较宽的响应,边缘定位的精度不是很高。

Sobel算子:算法的优点是计算简单,速度快。

但是由于只采用了2个方向的模板,只能检测水平和垂直方向的边缘,因此这种算法对于纹理较为复杂的图像,其边缘检测效果就不是很理想。

拉普拉斯:对噪声敏感,会产生双边效果。

不能检测出边的方向。

通常不直接用于边的检测,只起辅助的角色,检测一个像素是在边的亮的一边还是暗的一边利用零跨越,确定边的位置。

2.设计一个检测图3-2中边缘的程序,要求结果类似图3-3,并附原理说明代码:I=imread('lines.png');F=rgb2gray(I);subplot(2,2,1);imshow(I);title('原始图像');thread=130/255;subplot(2,2,2);imhist(F);title('直方图');subplot(2,2,3);J2=im2bw(F,thread);imshow(J2);title('分割结果');实验结果:(3)原理说明:根据图像的直方图,发现背景和目标的分割值在135左右,将此作为分割值,将图像转换为二值图像。

3.任选一种阈值法进行图像分割:(1)选取阈值为180进行分割:I=imread('lines.png');F=rgb2gray(I);subplot(2,2,1);imshow(I);title('原始图像');thread=180/255; %阈值为180进行分割subplot(2,2,2);imhist(F);title('直方图');subplot(2,2,3);J2=im2bw(F,thread);imshow(J2);title('分割结果');实验结果:将阈值调节到180,明显的看到线条的边缘变得模糊,而背景的线条被消除。

4.检测出3.3图像的线条,要求完成的结果为二值图像:代码:I=imread('line2.png');F=rgb2gray(I);subplot(2,2,1);imshow(I);title('原始图像');thread=120/255;subplot(2,2,2);imhist(F);title('直方图');subplot(2,2,3);J2=im2bw(F,thread);imshow(J2);title('分割结果');实验结果:说明:根据直方图,分割值在120左右,去120为分割线,得到以上分割结果。

相关主题