示例:灰度形态
使用灰度形态函数提取图像分量。您还可以通过挑出图像中小的亮暗特征来描述对象形状。
gray_erode
在二值腐蚀中,您可使用结构元素来定义每个像素周围的邻域。在此像素的邻域中,任何背景像素的存在都将导致前景变为背景。灰度腐蚀是二值腐蚀的扩展,可从输入图像的像素值中减去结构元素的像素值。该输出是结构元素边界内的最小结果像素值。
1. 创建 5 x 4 连续矩阵。
2. 创建简单结构元素 (SE)。
4. 计算新矩阵,该矩阵除了最右边一列和最下面一行 (边界条件),其余值应该等于 M - 1。
6. 利用 5 x 5 的中心 SE 腐蚀更逼真的的图像。
7. 将
gray_erode 函数应用于新图像,然后使用
WRITEBMP 函数将其保存到文件中。
8. 显示原始图像及腐蚀图像。
正如预料的那样,我们注意到图像大体上变暗了,黑暗区域得到了扩展,而一些较亮的细节消失了。
gray_dilate
在二值扩散中,结构元素用于定义每个像素周围的邻域,在此邻域中,任何前景像素的存在都将导致背景变为前景。
1. 使用之前所使用的连续矩阵和结构元素 (SE)。
3. 计算新矩阵,该矩阵除了最右边一列和最下面一行 (边界条件),其余值应该等于 M + 1。
4. 将 gray_dilate 函数应用于之前的图像。
5. 显示原始图像及扩散图像。
扩散的结果是增大了全局亮度,明亮区域得到了扩展,而丢失了小的黑暗细节。
gray_open, gray_close
可使用类似的方法将灰度开放和闭合定义为二值形态中的开放和闭合;开放是先进行灰度腐蚀再进行灰度扩散,而闭合则是先进行灰度扩散再进行灰度腐蚀。
将
gray_open 和
gray_close 应用于连续矩阵便可看到其相当于腐蚀和扩散的结合。
1. 将灰度开放应用于连续矩阵。
2. 在 SE 的原点为 (0,0) 时将灰度腐蚀应用于连续矩阵。
3. 在 SE 的原点为 (0,0) 时将灰度扩散应用于腐蚀矩阵。
4. 表明灰度开放相当于灰度腐蚀和灰度扩散的结合。
5. 将灰度闭合应用于连续矩阵。
6. 在 SE 原点为 (0,0) 时将灰度扩散应用于连续矩阵。
7. 在 SE 原点为 (0,0) 时将灰度腐蚀应用于扩散矩阵。
8. 表明灰度闭合相当于灰度扩散和灰度腐蚀的结合。
9. 将函数应用于测试图像 L,然后对比扩散图像、腐蚀图像、开放图像和闭合图像。
(lena_ld.bmp) | (lena_le.bmp) |
(lena_lc.bmp) | (lena_lo.bmp) |
灰度开放和闭合并不造成整体亮度的变化,而扩散和腐蚀则具有这种作用。扩散和闭合均可增强图像的亮度并弱化暗色特征,而腐蚀和开放可增强暗色并弱化明亮特征。