精华内容
下载资源
问答
  • C++ 孔洞填充代码

    2019-08-26 11:01:56
    冈萨雷斯的数字图像处理孔洞填充方法运行缓慢,写了个简略的版本。文档附带测试图片
  • 工程代码下载传送门: 普遍的孔洞填充结果 孔洞定义为:被前景元素包围的后景的元素 虽然从定义上来看四周不被完全包围的元素不应该为孔洞,但是我还是想改善一下使周围这些(暂且称作伪孔洞)也被填充 ...

    工程代码下载传送门:https://download.csdn.net/download/jidxiaohuo/11827907

    普遍的孔洞填充结果
    在这里插入图片描述

    孔洞定义为:被前景元素包围的后景的元素
    虽然从定义上来看四周不被完全包围的元素不应该为孔洞,但是我还是想改善一下使周围这些(暂且称作伪孔洞)也被填充
    在这里插入图片描述

    展开全文
  • 孔洞填充.py

    2017-10-20 17:58:47
    本工具使用的是python实现,主要的功能就是孔洞填充的实现。
  • 形态学重建之孔洞填充

    千次阅读 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}{到此结束,希望能帮助到你}

    展开全文
  • 二值图像孔洞填充

    万次阅读 2017-10-04 17:14:21
    二值图像的孔洞填充 二值图像的孔洞填充是基于图像形态学操作的基本运算,本文参考数字图像处理(冈萨雷斯著)相关章节的有关内容并结合作者自己的思考,给出了基于C# 二值图像孔洞填充的可行程序。 基础知识:参考...

    (这里的二值为0和255)

    二值图像的孔洞填充是基于图像形态学操作的基本运算,本文参考数字图像处理(冈萨雷斯著)相关章节的有关内容并结合作者自己的思考,给出了基于C# 二值图像孔洞填充的可行程序。

    基础知识:参考数字图像处理 P402-P415

    数学形态学的语言是集合论,这里所说的孔洞是二值图像内部八连通点阵组成的闭合圈内的像素点集,孔洞填充的基本步骤如下:
    1.确定二值图像像素[0,0]为初始种子点,这里认为[0,0]像素点为背景点,而非某个孔洞内部的点。

    2.以种子点为起点,采用形态学膨胀算法对背景进行填充。膨胀到不能膨胀为止。膨胀运算采用四连通结构元。

     

     


    四连通结构元(即中心像素为种子,以四连通的方式向周围膨胀):

     

     

    3.背景填充结束后,对得到的二值图像取反得到新的二值图像,此时图像为全部孔洞的点集。

    4.将第三步骤得到的二值图像与原二值图像相加及得到孔洞填充的结果。

     

    这样的算法对于大多数图像有效,然而对于[0,0]位置的像素,若为某孔洞内部的点则无法实现有效的孔洞填充。为了解决这一问题,这里采用拓展图像的方法,即在原图像的上下左右分别增加一行或一列数值为255的像素。使原图像尺寸由a*b 变为(a+2)*(b+2),以增加的四周全部像素或[0,0]处的像素为种子,对原图像进行膨胀运算。

    结果如下:(图中未被填充“孔洞”是由于边缘未闭合)

             





    展开全文
  • Python-基于OpenCV的轮廓填充 泛洪算法 孔洞填充

    千次阅读 热门讨论 2021-04-03 21:19:40
    孔洞填充就是在二值化下,图像中出现了“白点”或者“黑点”,这会影响我们计算轮廓里面的面积计算! 孔洞填充在这里我们针对的是二值图,并不是灰度图! 在OpenCV中实现imfill的步骤 阅读以下步骤时请参考下图. ...

    在这里插入图片描述
    左为原图 右为填充后

    针对轮廓填充,我们先要提取图像中的轮廓,在对里面的进行颜色填充,这个我自己也有点分不清楚,他和阈值分割进行填充有什么区别,要是有大佬知道,分享一下,将感激不尽!轮廓填充的方法常用的是泛洪算法!

    孔洞填充就是在二值化下,图像中出现了“白点”或者“黑点”,这会影响我们计算轮廓里面的面积计算!
    孔洞填充在这里我们针对的是二值图,并不是灰度图!

    在OpenCV中实现imfill的步骤
    阅读以下步骤时请参考下图.

    • 读取图片。
    • 将输入图像二值化。
    • 从像素(0,0)填充颜色。请注意,步骤2和步骤3的输出之间的差异在于步骤3中的图像的背景现在是白色的。
    • 反转洪水填充的图像(即黑色变为白色,白色变为黑色)。
    • 使用按位OR运算将阈值图像与反向洪水填充图像组合以获得填充有孔的最终前景掩模。步骤4中的图像在边界内具有一些黑色区域。通过步骤2,填充了图像中的孔。因此,我们将两者结合起来得到前景蒙版。

    在这里插入图片描述
    左为二值化取图 右为二值化图
    简单来说就是两张背景不变图像,将轮廓里面的颜色取反,再将两张图片合并,这样就能对轮廓里面的“孔洞”进行填充;
    方法很笨,但是有效!

    重点来啦,上代码!!!!!

    import cv2;
    import numpy as np;
    
    '''
    图像说明:
    图像为二值化图像,255白色为目标物,0黑色为背景
    要填充白色目标物中的黑色空洞
    '''
    imgPath = "H:/image.jpg"
    im_in = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE);
    
    # 复制 im_in 图像
    im_floodfill = im_in.copy()
    
    # Mask 用于 floodFill,官方要求长宽+2
    h, w = im_in.shape[:2]
    mask = np.zeros((h+2, w+2), np.uint8)
    
    # floodFill函数中的seedPoint必须是背景
    isbreak = False
    for i in range(im_floodfill.shape[0]):
        for j in range(im_floodfill.shape[1]):
            if(im_floodfill[i][j]==0):
                seedPoint=(i,j)
                isbreak = True
                break
        if(isbreak):
            break
    # 得到im_floodfill
    cv2.floodFill(im_floodfill, mask, seedPoint, 255);
    
    # 得到im_floodfill的逆im_floodfill_inv
    im_floodfill_inv = cv2.bitwise_not(im_floodfill)
    # 把im_in、im_floodfill_inv这两幅图像结合起来得到前景
    im_out = im_in | im_floodfill_inv
    cv2.imshow('de',im_out)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    在这里插入图片描述
    谢谢点赞评论!

    展开全文
  • opencv实现二值图像孔洞填充

    万次阅读 2018-04-22 11:45:37
    matlab中的imfill函数可以方便得实现二值图像的孔洞填充,而在opencv中并没有相同功能的函数。因此,在opencv的基础上编写实现孔洞填充的函数,并且能够设定阈值,对面积大于阈值的孔洞不进行填充。使用形态学重建的...
  • 13孔洞填充method1

    2018-04-05 15:09:08
    13孔洞填充 有的时候,我们需要对图像进行孔洞填充,一般想到的方法都是,使用findcontours函数,查找最外层轮廓,然后画出找到的轮廓。 这确实是一种方法,但似乎不够高效。下面贴出一个函数,可以更好的实现这个...
  • 形态学重建:孔洞填充的python实现

    千次阅读 2019-07-23 21:00:57
    基于形态学重建的孔洞填充应用。
  • 孔洞填充及连通分量提取

    千次阅读 2018-05-24 21:03:49
    一、 目的(1) 实现孔洞填充;(2) 实现连通分量的提取并计算连通分量的个数及每个连通分量的像素数。二、 代码思路(1)孔洞填充:先选取十字形结构作为结构元;接着生成一个由0组成的阵列X,大小与二值图像A...
  • 形态学之孔洞填充

    千次阅读 2018-10-06 20:00:49
    说实话,我第一次看到这只是明白了它的原理,但是对它的作用并不是很了解,在做过一些图像...孔洞填充的公式:Xk=(Xk−1⊕B)∩Ack=1,2,3...X_k=(X_{k-1}\oplus B)\cap A^c \qquad k=1,2,3...Xk​=(Xk−1​⊕B)∩Ack...
  • OpenCV图像内轮廓填-孔洞填充

    千次阅读 2018-11-10 00:35:07
    OpenCV图像内轮廓填-孔洞填充
  • 提出了一种对任意形状物体都适用的基于区域外接矩形的孔洞填充算法,与传统的区域填充算法相比较,该算法填充速度快、实用性强,因而可应用于图形及图像处理的诸多领域。
  • 在Matlab下,使用imfill可以很容易的完成孔洞填充操作,感觉这是一个极为常用的方法,然而不知道为什么OpenCV里面却没有集成这个函数。在网上查了好多关于Opencv下的孔洞填充方法,大部分使用轮廓查找方法去做的,但...
  • 有的时候,我们需要对图像进行孔洞填充,一般想到的方法都是,使用findcontours函数,查找最外层轮廓,然后画出找到的轮廓。 这确实是一种方法,但似乎不够高效。下面贴出一个函数,可以更好的实现这个功能。 话不...
  • itk中的数据孔洞填充

    千次阅读 2017-05-23 16:11:03
    可能是因为几乎每个图像算法库中都会有孔洞填充算法吧,一直觉得是一个很简单的事儿,从来都没注意过它的存在,今天花点时间理一下吧。 itk提供了两个的补洞类: itkGrayscaleFillholeImageFilter(针对灰度图像...
  • 图像孔洞填充与小连通域的删除 cvFindContours 从二值图像中检索轮廓,并返回检测到的轮廓的个数。first_contour的值由函数填充返回,它的值将为第一个外轮廓的指针,当没有轮廓被检测到时为NULL。其它轮廓可以...
  • Scipy.ndimage--孔洞填充(多维图像)

    千次阅读 2019-03-13 13:58:41
    本节重点介绍形态学处理---孔洞填充 填充二进制图像矩阵中的孔洞 scipy.ndimage.binary_fill_holes(input,structure=None,output=None,origin=0) 描述:填充二进制图像矩阵中的孔洞 参数: input:类型:array...
  • 今天我们就用python语言基于OpenCV实现孔洞填充。 代码实现: import cv2; import numpy as np; ''' 图像说明: 图像为二值化图像,255白色为目标物,0黑色为背景 要填充白色目标物中的黑色空洞 ''' def FillHole...
  • opencv 二值图像的孔洞填充

    万次阅读 2016-07-20 14:19:13
    有的时候,我们需要对图像进行孔洞填充,一般想到的方法都是,使用findcontours函数,查找最外层轮廓,然后画出找到的轮廓。 这确实是一种方法,但似乎不够高效。下面贴出一个函数,可以更好的实现这个功能。 话不...
  • 一(0,0)为种子点即可),即得到孔洞图(此时孔洞用为黑色),然后将此图二值反转,即得到用白色表示的孔洞图,然后将此空洞图与原二值图相加(使用cvAdd函数即可)即可将孔洞填充掉。
  • matlab imfill孔洞填充

    万次阅读 2018-08-14 20:19:45
    作用填充二值图像BW中的空洞   clear all; clc; close all; img = imread('test1.png'); if ndims(img)==3  img = rgb2gray(img); end img_bw = im2bw(img); img_fill = imfill(img_bw, 'holes'); ...
  • OPENCV二值化图像内孔洞填充/小区域去除 对于二值化图像,去除孔洞时采用的方法实际上与去除小区域相同,因此完全可以用同一个函数进行。 这两个功能可以采取区域生长法来实现。须注意,去除小区域时为保存有用信息...
  • 对于一些图片来说,经过处理后的图片可能会出现一些孔洞的现象,影响图像地美观性,或者检测一些裂纹,会出现裂纹不连续,甚至出现断裂地现象,影响图像的效果,该代码就是解决这些断裂现象,使得图像变得连续。
  • C++ Opencv imfill 孔洞填充函数的实现函数实现的中心思想二值图寻找连通域的关键种子点的确定连通域的寻找过程条件设定最后赋值话不多说 直接上函数代码主函数代码代码框截图实例图片运行结果 函数实现的中心思想 ...
  • 一、孔洞填充 基本思想: 基于形态学算法,膨胀后与上取反的原图 算法实现步骤: 1.首先找出所有孔洞的位置,只需知道洞中的一个点的坐标即可,下面直接以改点代替该洞 2.新建一张全零图,用0表示背景,1表示前景,...
  • 今天我们就用python语言基于OpenCV实现孔洞填充。 代码实现: import cv2; import numpy as np; def FillHole_RGB(imgPath,SavePath): # 读取图像为uint32,之所以选择uint32是因为下面转为0xbbggrr不溢出 im_in_...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 304
精华内容 121
关键字:

孔洞填充