系列文章
·【基于MATLAB的数字图像处理】第二章·视觉系统与图像处理系统
·【基于MATLAB的数字图像处理】第六章·形态学图像处理
·【基于MATLAB的数字图像处理】大作业·综合图像处理平台
目录
前言
这一章老师没讲,我觉得比较有用,也比较接近于中级图像处理的知识,属于我的自学内容,偏向应用
一、形态学预备知识
基本思想:用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。
二值图像:图像可以看成是关于坐标x,y的二值函数,图像中的每一点的像素值只有0和1两个取值,这时集合间的运算可以直接应用于二值图像集合
比如两幅图像A、B,可以使用MATLAB中的运算语句,或:A|B,与:A&B,非:~A,差:A-B,直接运算,图像看成像素的集合,其基本操作都和集合运算保持一致。
二、腐蚀和膨胀
腐蚀和膨胀是形态学图像处理的基础,主要作用是消除噪点和分割出独立的图像元素等。
1.腐蚀
腐蚀是缩小和细化图像中的物体,可以看做形态学的滤波操作,这种操作是将小于结构元的图像细节从图像中滤除,下面是图像中的结构元,腐蚀实质上就是将结构元在待处理的图像集合上进行与运算的过程。
腐蚀的操作过程为:
- 确定结构元和图像
- 使结构元的中心在图像上的每一点移动
- 当结构元的中心位于待处理图像的边界时,因为结构元的一部分超出了图像边界,需要对图像进行背景扩充,以适应计算需要
- 如果待处理图像能够完全包含结构元,则待处理图像中的位置定义为新的图像前景点,否则将该位置定义为非成员元素
- 最终的效果就是将图像的边界腐蚀掉了
例子参考这篇文章
应用:边界提取:使用原图像减去腐蚀后的图像=前景物体边界。
2.膨胀
膨胀与腐蚀不同,腐蚀是一种收缩或细化的操作,而膨胀则会扩张和粗化二值图像中的物体。这两个操作所使用的的结构元是类似的,类似于上图。
膨胀的操作过程为:
- 确定结构元和图像
- 使结构元在图像上尽情移动,只需要保证结构元和图像有重叠
- 对于结构元中心超出图像边界的部分但有重叠的部分,将结构点的中心作为图像的边界
- 最终的结果就是图像的边界会向外扩展一圈
例子参考这篇文章
应用:孔洞填充:对原图像进行膨胀操作,对膨胀后的图像求补,将求补后的结果与膨胀的结果求并集即可完全实现孔洞的填充。
实例:
%%腐蚀和膨胀
I=imread('rice.png');
B=im2bw(I); %RGB转二值图像
se=strel('square',5); %设定结构元
ImD=imdilate(B,se); %二值图像的膨胀处理
ImE=imerode(B,se); %二值图像的腐蚀处理
figure;
subplot(131);imshow(B);title('二值图');
subplot(132);imshow(ImD);title('膨胀');
subplot(133);imshow(ImE);title('腐蚀');
效果:
三、开运算和闭运算
开运算:平滑物体的轮廓、断开较窄的部分并消除细的突出物
闭运算:平滑轮廓的一部分,通常会弥合较窄的间断和细长的沟壑、消除小的孔洞、填补轮廓中的断裂
假设有两个集合(图像)A和B,A对B的形态学开运算定义为结构元B对A先进行腐蚀,然后再用结构元B对A进行膨胀;A对B的形态学闭运算,与之相反,定义为结构元B对A先进行膨胀,然后再用结构元B对A进行腐蚀;
实例:
%%开运算和闭运算
%仍然使用之前的二值图像和结构元
ImO=imopen(B,se); %图像的开运算
ImC=imclose(B,se); %图像的闭运算
figure;
subplot(131);imshow(B);title('二值图');
subplot(132);imshow(ImO);title('开运算');
subplot(133);imshow(ImC);title('闭运算');
效果:
四、击中和击不中变换
形态学中的击中个击不中变换是一种形状检测的基本工具,基本思想是:
- 假如A集合中包含了几种不同的形状B、C、D,如果想要检测B是否存在于A中,那么就使用一个结构元素对(B1,B2),B1是B的形状结构元,B2是B的局部背景集合W-B。
- 使用这个结构元素对中的单个结构元分别与A和A的补集进行腐蚀处理
- 最终处理结果的交集即为集合B的位置,这样就可以判断A中是否包含了集合B