精华内容
下载资源
问答
  • 形态学重建

    千次阅读 2011-05-13 20:43:00
     在形态学梯度图像的基础上,利用形态学的开闭重建运算对梯度图像进行重建,在保留重要区域伦敦的同时去除细节和噪声。  分水岭变换存在过分割现象,原因在于检测的局部极值过多,造成极值过多的原因...

     在形态学梯度图像的基础上,利用形态学的开闭重建运算对梯度图像进行重建,在保留重要区域伦敦的同时去除细节和噪声。

     分水岭变换存在过分割现象,原因在于检测的局部极值过多,造成极值过多的原因在于图像中的非规则灰度扰动和噪声。对于好的分水岭图像分割方法,不仅能消除过分割现象,而且应保证分割后的区域伦敦边缘具有较准确的定位能力。

    方法1:利用形态学开闭重建运算对原始图像的形态学梯度图像进行滤波重建,在简化梯度图像的同时,保持伦敦分水线的准确定位,消除产生过分分割现象的根源。分割过程中需选择一个结构元素,以对图像进行形态学重建。该结构元素对图像应该有:处理后,图像中的灰度跃变急剧增强,消除梯度对边缘方向的依赖性,同时,结构元素半径较小,避免梯度图像产生过厚边缘造成的区域伦敦定位误差。由于噪声的影响,采用形态学开闭重建运算对梯度图像进行重建。消除噪声,保留重要的伦敦极值信息。随着结构元素的递增,图像中的局部极值会消除,而不会产生新的区域极值。

    展开全文
  • 形态学重建之孔洞填充

    千次阅读 2020-11-28 15:52:30
    白菜苗1、什么是膨胀(如果已经了解,请往下看)2、什么是孔洞填充(如果已经了解,请往下看)3、什么是形态学重建(如果已经了解,请往下看)4、什么是测地膨胀(如果已经了解,请往下看)5、什么是形态学重建之...

    如果你不小心又亦或是专门寻找形态学相关知识,那么很高兴能和你们分享这篇文章。

    首先,如果想了解形态学重建之孔洞填充原理,那么必须先了解什么是膨胀、什么是孔洞填充、什么是形态学重建、什么是测地膨胀,只有具备相关知识,我们才能把形态学重建之孔洞填充原理吃透。

    话不多说!!我们看看

    1、什么是膨胀(如果已经了解,请往下看)

    在这里插入图片描述
    这是来源于冈萨雷斯数字图像处理(第三版)的公式,如果光看字面晦涩难懂,那看看例子:

    在这里插入图片描述

    • 左边,是原图,一个边长dd的正方形,至于左上角的小正方形是用来膨胀画上去的。
    • 右边,变为膨胀后的一个边长18+1+18d(\frac{1}{8} +1+\frac{1}{8})d的正方形。

    那么怎么会这样呢?你可以这样理解,小正方形(即边长d/4d/4的正方形)的中心可以在大的正方形里面运动,但是起不到膨胀效果,只有当它的中心点(即那个黑点)在边界运动时,是不是有d/8d/8露在大正方形外面(看左边那个图),沿着边界绕一圈,是不是整个边长都会多了d/8d/8其实中心思想就是取并集,只要我的中心点在大正方形以内(包括边界),凡是能包含的地方,就是我俩共有的地方(即膨胀后的图形)。

    在这里插入图片描述

    同理可得:

    在这里插入图片描述

    2、什么是孔洞填充(如果已经了解,请往下看)

    孔洞:一个孔洞可以被定义为由前景像素相连接的边界所包围的一个背景区域。(左到右依次是未填充,填充一部分、填充完毕)
    在这里插入图片描述
    在这里插入图片描述
    有点抽象是不是,其实它的意思就是先找孔洞的一个点,用结构元去膨胀,然后用原图像的补集进行约束(就是求个交集),不断重复膨胀,约束直至图形不改变(即收敛)就停止,与原图求个交集,孔洞就填上了,那我们看看如何填充的:(AA原图,AcA^c补集,BB结构元,先在原图需要填充部分找一个点,进行膨胀)

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    到此,填充完毕,如果你还纠结,那么我们思路理一下,例如X1X_1为什么从第一张图变成第二张,是因为图1,是膨胀后的,还需要AcA^c补集约束一下,就是求个交集才是最后图形,其它以此类推,为什么到了X8X_8停下了呢,因为到这里已经收敛了,再膨胀也是X8X_8这张图形。
    在这里插入图片描述
    在这里插入图片描述

    3、什么是形态学重建(如果已经了解,请往下看)

    在这里插入图片描述

    在这里插入图片描述

    4、什么是测地膨胀(如果已经了解,请往下看)

    在这里插入图片描述
    测地膨胀,说白了,和前面的膨胀思想有点区别,前面的膨胀其实就是直接膨胀,测地膨胀呢?其实就是有条件的膨胀,怎么说,我们看看图:

    在这里插入图片描述
    一开始膨胀了是3*3个格子,中间那图,然后再跟模板IcI^c求个交集,那么就是测地膨胀的思想:先膨胀后约束(即求交集)。

    在这里插入图片描述
    哈哈哈哈,是不是以为测地膨胀结束了,其实不是,这只是第一步,后面不断重复迭代,直至收敛,就是前面说到为什么到X8X_8就停止是一样的,前一跟后一个一样就没必要继续了。

    在这里插入图片描述
    在这里插入图片描述

    5、什么是形态学重建之孔洞填充(终于到正题了)

    在这里插入图片描述
    首先,F(x,y)F(x,y)呢,其实求标记图像的方法,很简单,就是减去原始预想的边界值,其它地方为0,H则是我们要的结果。(看下图,对比下,是不是清楚点,边界取反,其它地方为0)

    在这里插入图片描述

    在这里插入图片描述

    如果懂了,继续往下:用3*3的结构元BB去膨胀F。

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    • 左1图为膨胀一次的结果,我们不是说了吗,测地膨胀的精髓在于,先膨胀,后约束,那么我们用IcI^c(原始图像II的补集)约束下,得到最右边图。

    然后多次迭代。
    在这里插入图片描述
    在这里插入图片描述
    可以发现,其实图形迭代一次就收敛了(这图刚好凑巧,其它可能多次)

    在这里插入图片描述
    H是我们要的结果,那么左1图,就是H公式里面的函数,[]c[]^c里面的其实就是补集的意思,所以对左1图取个补集就是H,细看,是不是填充好了。到此形态学重建之孔洞填充完成。

    6、实验

    代码:(非我所写:参见链接

    import numpy as np
    import cv2 as cv
    from matplotlib import pyplot as plt
    
    img = cv.imread("text.jpg")
    
    # 二值化
    imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    imgray[imgray < 100] = 0
    imgray[imgray >= 100] = 255
    
    # 原图取补得到MASK图像
    mask = 255 - imgray
    
    # 构造Marker图像
    marker = np.zeros_like(imgray)
    marker[0, :] = 255
    marker[-1, :] = 255
    marker[:, 0] = 255
    marker[:, -1] = 255
    marker_0 = marker.copy()
    
    # 形态学重建
    SE = cv.getStructuringElement(shape=cv.MORPH_CROSS, ksize=(3, 3))
    while True:
        marker_pre = marker
        dilation = cv.dilate(marker, kernel=SE)
        marker = np.min((dilation, mask), axis=0)
        if (marker_pre == marker).all():
            break
    dst = 255 - marker
    filling = dst - imgray
    
    # 显示
    plt.figure(figsize=(12, 6))  # width * height
    plt.subplot(2, 3, 1), plt.imshow(imgray, cmap='gray'), plt.title('src'), plt.axis("off")
    plt.subplot(2, 3, 2), plt.imshow(mask, cmap='gray'), plt.title('Mask'), plt.axis("off")
    plt.subplot(2, 3, 3), plt.imshow(marker_0, cmap='gray'), plt.title('Marker 0'), plt.axis("off")
    plt.subplot(2, 3, 4), plt.imshow(marker, cmap='gray'), plt.title('Marker'), plt.axis("off")
    plt.subplot(2, 3, 5), plt.imshow(dst, cmap='gray'), plt.title('dst'), plt.axis("off")
    plt.subplot(2, 3, 6), plt.imshow(filling, cmap='gray'), plt.title('Holes'), plt.axis("off")
    plt.show()
    

    结果:
    在这里插入图片描述
    我解释下,(从上开始数)src图为原始图,Mask为它的补集,Marker 0 为标记图像F,其实应该有白边框,估计像素小看不见,Marker为膨胀约束后的最后结果,dst为Marker补集图(即H),Holes图为dstMask\color{purple}{dst \cap Mask},就是填充部分。

    对于结构元的选择不宜过大,不然填充不上。

    在这里插入图片描述
    明显发现333*3的结构元优于777*7的,(看下图)因为结构元过大,两个图像一样,取个补集就是原图II,所以孔洞没填充上,所以选择结构元得适中。
    在这里插入图片描述

    \color{maroon}{到此结束,希望能帮助到你}

    展开全文
  • 形态学重建:孔洞填充的python实现

    千次阅读 多人点赞 2019-07-23 21:00:57
    基于形态学重建的孔洞填充应用。

    主要参考:(美)拉斐尔·C.冈萨雷斯. 数字图像处理 第3版[M]. 阮秋琦,译. 北京:电子工业出版社, 2017: 633.


    形态学重建

    形态学重建涉及两幅图像和一个结构元:

    • Marker 图像:包含变换的起点,将被连续膨胀,直至收敛
    • Mask 图像:用来约束膨胀结果,即 Mask >= Marker
    • 结构单元(Structuring Element,SE):定义连通性

    数学迭代式:
    Marker=(MarkerSE)Mask Marker = (Marker \oplus SE) \cap Mask
    代码示例:

    def imreconstruct(marker, mask, SE=np.ones([3,3])):
        """
        描述:以mask为约束,连续膨胀marker,实现形态学重建,其中mask >= marker
        
        参数:
            - marker 标记图像,单通道/三通道图像
            - mask   模板图像,与marker同型
            - conn   联通性重建结构元,参照matlab::imreconstruct::conn参数,默认为8联通
        """
        while True:
            marker_pre = marker
            dilation = cv.dilate(marker, kernel=SE)
            marker = np.min((dilation, mask), axis=0)
            if (marker_pre == marker).all():
                break
        return marker
    

    孔洞填充

    孔洞定义:被前景(白色)连通域包围的封闭的背景(黑色)区域,不限于圆形。如图所示。
    孔洞定义
    原理:
    以原图像的补集作为Mask,用来限制膨胀结果;以带有白色边框的黑色图像为初始Marker,用SE对其进行连续膨胀,直至收敛;最后对Marker取补即得到最终图像,与原图相减可得到填充图像。

    Marker(x,y)={255,(x,y)Boundary0,others Marker(x, y) = \left\{\begin{matrix} 255 & , & (x,y) \in Boundary\\ 0 & , & others \end{matrix}\right.

    代码示例:

    import numpy as np
    import cv2 as cv
    from matplotlib import pyplot as plt
    
    img = cv.imread("text.jpg")
    
    # 二值化
    imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    imgray[imgray < 100] = 0
    imgray[imgray >= 100] = 255
    
    # 原图取补得到MASK图像
    mask = 255 - imgray
    
    # 构造Marker图像
    marker = np.zeros_like(imgray)
    marker[0, :] = 255
    marker[-1, :] = 255
    marker[:, 0] = 255
    marker[:, -1] = 255
    marker_0 = marker.copy()
    
    # 形态学重建
    SE = cv.getStructuringElement(shape=cv.MORPH_CROSS, ksize=(3, 3))
    while True:
        marker_pre = marker
        dilation = cv.dilate(marker, kernel=SE)
        marker = np.min((dilation, mask), axis=0)
        if (marker_pre == marker).all():
            break
    dst = 255 - marker
    filling = dst - imgray
    
    # 显示
    plt.figure(figsize=(12, 6))  # width * height
    plt.subplot(2, 3, 1), plt.imshow(imgray, cmap='gray'), plt.title('src'), plt.axis("off")
    plt.subplot(2, 3, 2), plt.imshow(mask, cmap='gray'), plt.title('Mask'), plt.axis("off")
    plt.subplot(2, 3, 3), plt.imshow(marker_0, cmap='gray'), plt.title('Marker 0'), plt.axis("off")
    plt.subplot(2, 3, 4), plt.imshow(marker, cmap='gray'), plt.title('Marker'), plt.axis("off")
    plt.subplot(2, 3, 5), plt.imshow(dst, cmap='gray'), plt.title('dst'), plt.axis("off")
    plt.subplot(2, 3, 6), plt.imshow(filling, cmap='gray'), plt.title('Holes'), plt.axis("off")
    plt.show()
    
    

    结果展示:
    Figure_1

    原图 text.jpg
    text.jpg

    选用不同尺寸的SE,进行填充对比:ksize=3x3(左),ksize=7x7(右)
    ksize=3x3(左),ksize=7x7(右)
    由此可见, 如果选择的结构单元过大,膨胀操作会越过边界,膨胀到孔洞中,导致部分孔洞填充失败。就本例来看3x3的SE可以做到准确填充。

    并且,对于大小不一的孔洞,3x3的SE同样可以做到准确填充。如图所示:
    在这里插入图片描述

    注: 关于孔洞填充的其他问题,可以参考博文 形态学填充孔洞的几个问题

    展开全文
  • 针对脑部核磁共振成像(magnetic resonance imaging,MRI)图像中因噪声、灰度不均匀及边界模糊不连续等造成肿瘤难以准确分割的问题,提出一种基于形态学重建和梯度分层多尺度修正的分水岭分割方法。首先对原始图像...
  • opencv之形态学重建

    千次阅读 2017-02-22 15:09:37
    形态学梯度图像的基础上,利用形态学的开闭重建运算对梯度图像进行重建,在保留重要区域伦敦的同时去除细节和噪声。  分水岭变换存在过分割现象,原因在于检测的局部极值过多,造成极值过多的原因在于图像中的...

    在形态学梯度图像的基础上,利用形态学的开闭重建运算对梯度图像进行重建,在保留重要区域伦敦的同时去除细节和噪声。

     分水岭变换存在过分割现象,原因在于检测的局部极值过多,造成极值过多的原因在于图像中的非规则灰度扰动和噪声。对于好的分水岭图像分割方法,不仅能消除过分割现象,而且应保证分割后的区域伦敦边缘具有较准确的定位能力。

    方法1:利用形态学开闭重建运算对原始图像的形态学梯度图像进行滤波重建,在简化梯度图像的同时,保持伦敦分水线的准确定位,消除产生过分分割现象的根源。分割过程中需选择一个结构元素,以对图像进行形态学重建。该结构元素对图像应该有:处理后,图像中的灰度跃变急剧增强,消除梯度对边缘方向的依赖性,同时,结构元素半径较小,避免梯度图像产生过厚边缘造成的区域伦敦定位误差。由于噪声的影响,采用形态学开闭重建运算对梯度图像进行重建。消除噪声,保留重要的伦敦极值信息。随着结构元素的递增,图像中的局部极值会消除,而不会产生新的区域极值。

    转载自:http://blog.csdn.net/lijie45655/article/details/6418199

    本人对canny边缘检测后生成的梯度图进行形态学开闭重建滤波,但是却报指针错误。对灰度图像和彩色图像进行形态学开闭重建滤波,可以恢复彩色图像,但是有色彩失真。

    详细分析,可参考博文:http://lh2078.blog.163.com/blog/static/568113722010519105212558/

    展开全文
  • python 使用openCV 实现形态学重建

    千次阅读 2018-10-09 20:13:33
    注意膨胀(腐蚀)重建时使用的结构元是基于连通性的,不是b,,参照matlab对应函数imreconstruct中conn参数, 如二维时可以是ones((3,3)) 需要numpy cv2 公式见下 DEBUG = False # 测地膨胀 def D_g(n,f,b,...
  • 形态学原理原理介绍 数字图像处理 第三版》(冈萨雷斯)——第九章 形态学图像处理 本文所有程序均在ubuntu环境编写,Windows 兼用性未知,理论上不会有什么问题,如果运气不好,运行失败,建议百度。 腐蚀膨胀...
  • 但是细化和骨架在很多手势识别,步态识别中应用广泛,形态学重建可以算作一种很简单的图像分割,但高速有效。 数学公式 完整内容已迁移至 http://www.face2ai.com/DIP-3-4-二值图像-形态学处理4-其他/ ...
  • 这意味着与图像边界相连的背景成分补集的输出为空洞抑制后的图像,可以通过腐蚀重建实现。其中掩模图像等于输入图像,而标记图像为与输入图像具有相同边界并具有常数 的图像。该方法同样适用于灰度图像。 二值图像 ...
  • 写这个帖子的原因是在学习灰度图像处理中,发现没有一个博客很系统全面的讲解这些形态学变换,所以为了帮助后来人,特此做此工作,但是能力有限,如果有不对的地方请大家多多批评指正!另外有一些前辈的工作在里面,...
  • 首先,通过引入形态学重构操作将图像的局部空间信息纳入FRFCM中,以保证抗噪性和图像细节保留。其次,基于局部空间邻居和聚类中心内像素之间距离的成员资格分区的修改被仅依赖于成员资格分区的空间邻居的局部成员...
  • 首先,通过引入形态学重构操作将图像的局部空间信息纳入FRFCM中,以保证抗噪性和图像细节保留。其次,基于局部空间邻居和聚类中心内像素之间距离的成员资格分区的修改被仅依赖于成员资格分区的空间邻居的局部成员...
  • clc close all clear all %% parameters cluster=3; % the number of clustering centers se=3; % the parameter of structuing element used for morphological reconstruction w_size=3; % the size of ...
  • 首先,通过引入形态学重构操作将图像的局部空间信息纳入FRFCM中,以保证抗噪性和图像细节保留。其次,基于局部空间邻居和聚类中心内像素之间距离的成员资格分区的修改被仅依赖于成员资格分区的空间邻居的局部成员...
  • 在许多应用中,需要去除所有与图像边界连接的目标。...标记图像包含每一个与图像边界连接目标的种子,重建输出则为这些边界的目标。 与图像边界连通目标的去除,可以扩展到灰度图像。 二值图像 灰度图像 ...
  • 但是细化和骨架在很多手势识别,步态识别中应用广泛,形态学重建可以算作一种很简单的图像分割,但高速有效。 数学公式 完整内容已迁移至 http://www.face2ai.com/DIP-3-4-二值图像-形态学处理4-其他/ ...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 238
精华内容 95
关键字:

形态学重建