1 基础介绍
- 首先需要具备集合论的相关知识,交集,并集,补集,差集等运算。注意,这些运算要求图像前景为白色,背景为黑色,若反过来,则会导致运算也是反的(交集运算会变成补集,也包括后面的膨胀与腐蚀)。
- 还需要加入两种运算,映射与平移。其中,映射就是原图 A {A} A关于原点的对称,记作 A ^ \widehat{A} A ,而将图像 B {B} B按点z的坐标平移则记作 ( B ) z {(B)z} (B)z。
2 膨胀
- 膨胀是在二值图像中加长或变粗的操作。类似于word里的对文字加粗操作。
- 就是让结构元素的原点遍历图像,并将遍历期间结构元素覆盖到的地方置为1。
- 代码:
I = imdilate(I, SE)
- 示例:
subplot(121), imshow(I1), title('原图1'); se = strel('square',5); % 5*5的正方形结构元 I2 = imdilate(I1, se); subplot(122), imshow(I2), title('膨胀');
- 还可以用来修复断裂的文字。
3 腐蚀
- 腐蚀收缩或细化二值图像中的元素。
- 让结构元素的原点遍历图像,若某点的值为1,但结构元素有一部分位于原图像中的值为0的位置,则将,原点置为0。其实也就是提取能将结构元素完全覆盖的区域。
- 代码:
I = imerode(I, SE)
- 示例:
subplot(121), imshow(I1), title('原图1'); se = strel('square',5); % 5*5的正方形结构元 I2 = imerode(I1, se); subplot(122), imshow(I2), title('腐蚀');
- 可以用来消除一些不必要的细线,从而突出感兴趣的区域。
4 膨胀与腐蚀的组合
- 在图像处理的实际运用中,我们更多地是使用膨胀和腐蚀的组合。
4.1 开运算
- 先腐蚀后膨胀,记作 A {A} A○ B {B} B。
- 开运算完全删除了不能包含结构元素的对象区域,平滑了对象的轮廓,断开了狭窄的连接,去掉了细小的突出部分。
- 代码:
I = imopen(I, SE)
- 示例:
I1 = imread('double.jpg'); I1 = imbinarize(rgb2gray(I1)); subplot(121), imshow(I1), title('原图'); se = strel('square', 20); I2 = imopen(I1, se); subplot(122), imshow(I2), title('开运算');
4.2 闭运算
- 先膨胀后腐蚀,记作 A {A} A· B {B} B。
- 与开运算一样,闭运算会平滑对象的轮廓。然而,与开运算不同的是,闭运算一般会将狭窄的缺口连接起来形成细长的弯口,并填充比结构元素小的洞(如下图所示)。
- 代码:
I = imclose(I, SE)
- 示例:
I1 = imread('broken_double.jpg'); I1 = imbinarize(rgb2gray(I1)); subplot(121), imshow(I1), title('原图'); se = strel('square', 20); I3 = imclose(I1, se); subplot(122), imshow(I3), title('闭运算');
- 一般可以先使用开运算消除图像中的小噪声,再用闭运算连接断裂部分。
4.3 击中或击不中变换
- 是形状检测的一种基本工具。
- 击中-击不中变换实际上对应两个操作,所以需要用到两个结构元素。
- 如果两幅图像 A {A} A, B {B} B交集为空,则称 B {B} B击中 A {A} A,反之为 B {B} B击不中 A {A} A。
- 一般来说,一个物体的结构可以由物体内部各种成分之间的关系来确定。为了研究物体(在这里指图像)的结构,可以逐个地利用其各种成分 (例如各种结构元素)对其进行检验,判定哪些成分包括在图像内,哪些在图像外,从而最终确定图像的结构。(比如检测汽车,可以分别检测两个轮子,车窗等子结构)。
- 只有当结构元素与其覆盖的图像区域彻底相同时,中心像素的值才会被置为1,不然为0。
- 代码:
I = bwhitmiss(I, SE1, SE2)
5 拓展
- 对二值图像的膨胀和腐蚀都可以拓展到灰度图像上。膨胀和腐蚀类似于空间卷积。
- 膨胀运算定义为让结构元素中心遍历图像,让每个中心的值取结构元素定义域内原图像与结构元素图像相加后的最大值,而腐蚀则是最小值。
- 灰度图像下,开运算还可以用来处理不均匀光照下的阈值操作,具体为,使用大小不能被前景对象完全包含的结构元素对图像进行开运算,然后用原图像减去开运算后的图像,即可得到一副具有均匀背景的图像,便可使用阈值处理了,也可以使用顶帽变换直接计算得到同样的效果。