【随笔-1】黑白色顶帽变换 black/white top-hat transformation及MATLAB实现

形态学基本知识

参考链接:知乎的一篇文章

  • 结构元(SE)
    SE中的的值可以是0或1。常见的结构元有矩形和十字形。结构元有一个锚点O,O一般定义为结构元的中心(也可以自由定义位置)。如下图所示是几个不同形状的结构元,紫红色区域为锚点O。


    SE.png
  • 膨胀
    将结构元s在图像f上滑动,把结构元锚点位置的图像像素点的灰度值设置为结构元值为1的区域对应图像区域像素的最大值
    个人理解:类似于机器学习中的求卷积过程,不过这里不是相乘相加,而是取一定区域范围内的最大值,这样最大值得以扩增延展,分布到了更多的位置,起到了膨胀的效果。
  • 腐蚀
    将结构元s在图像f上滑动,把结构元锚点位置的图像像素点的灰度值设置为结构元值为1的区域对应图像区域像素的最小值
    个人理解:同理,最小值得以扩增延展,分布到了更多的位置,起到了腐蚀的效果。
  • 开运算
    对图像f用同一结构元s先腐蚀再膨胀
    效果:原本连接的地方分开了(主要是腐蚀的效果)


    开运算
  • 闭运算
    对图像f用同一结构元s先膨胀再腐蚀
    效果:原本分开的地方闭合了(主要是膨胀的效果)


    闭运算
  • white top hat transformation
    原图像与开运算(先腐蚀再膨胀)结果图之差
    得到图像中那些面积小于结构元且比周围亮的区域。


    白帽变换

    注意:白色顶帽变换也是非常有用的提取sure_foreground的方式

  • black top hat transformation
    闭运算(先膨胀再腐蚀)结果图与原图之差
    得到图像中那些面积小于结构元且比周围暗的区域。

MATLAB实现

White Top-hat Filtering: ( Original Image - Opening of original Image ) [which is imtophat() in matlab]
Black Top-hat Filtering: ( Closing of Original Image - Original Image ) [which is imbothat() in matlab ]

IM2 = imbothat(IM,SE) performs morphological bottom-hat filtering on the grayscale or binary input image, IM, returning the filtered image, IM2.
SE is a structuring element returned by the strel function. SE must be a single structuring element object, not an array containing multiple structuring element objects.

实践中的难点:SE的构造

MATLAB中可以用 strel函数,se = strel('disk',r, N);
有相关的strel函数文档可以查

creates a disk-shaped structuring element, where r specifies the radius and n specifies the number of line structuring elements used to approximate the disk shape

r是半径,n我也没太看懂,但是可以省略n这个参数的。

进一步探究:SE的size和白色顶帽变换效果的关系

SE的size越大,进行闭运算时就膨胀得越厉害,这样更大的亮的区域在闭运算之后被保留。在白色顶帽变换后,保留下的亮的区域的尺寸上限也比SE的size小的时候更大。
经过MATLAB实践,这样的分析结果是对的。
SE的size为3时,白色顶帽运算的效果如下:


image1

SE的size为10时,白色顶帽运算的效果如下:


image2

你可能感兴趣的:(【随笔-1】黑白色顶帽变换 black/white top-hat transformation及MATLAB实现)