【问题标题】:Scipy Binary Closing - Edge Pixels lose valueScipy Binary Closing - 边缘像素失去价值
【发布时间】:2013-01-01 09:30:05
【问题描述】:

我正在尝试填补二进制图像中的漏洞。图片比较大,所以我把它分成块进行处理。

当我使用scipy.ndimage.morphology.binary_fill_holes 函数时,它会填充图像中较大的孔。所以我尝试使用scipy.ndimage.morphology.binary_closing,它给出了填充图像中小孔的预期结果。但是,当我将块重新组合在一起以创建整个图像时,我最终会得到接缝线,因为binary_closing 函数会从每个块的边框像素中删除任何值。

有什么办法可以避免这种影响吗?

【问题讨论】:

  • 首先,如果您可以添加图像或一些代码来解释您的问题,那就太好了。其次,您无法避免通过以这种方式切片来引入人工制品,您必须按结构元素的大小填充/扩展切片,以便结果正确
  • 正确的做法是以闭合图像为标记使用形态重建。

标签: python image image-processing numpy scipy


【解决方案1】:

涉及来自相邻像素的信息的操作,例如closing,总是会在边缘出现问题。在您的情况下,这很容易解决:只需处理比您的平铺略大的子图像,并在拼接时保留好的部分。

【讨论】:

  • 所以我只是尝试了一些新的东西,我认为听起来与您的建议相似。我拿走了我的块,并使用 vstack 在数组的顶部和底部添加了一行零。我使用hstack对左右做了同样的事情。然后我处理了二进制关闭。最后,我删除了外部行和列,以将图像恢复为原始大小。据我所知,当我并排绘制图像时。看起来是正确的。
  • 这可能有效,但我认为它不如使用图像中的实际数据准确。我的意思是,如果您的图像是 1Mx1M,并且您想在 100 个 100Kx100K 子图像中执行此操作,请处理以 100K 平铺间隔但为 100,200 x 100,200 的子图像(即,具有 100 像素的真实和图像中的准确数据),当您重新组装时,只需使用 100,000 x 100,000 的良好中心部件。
【解决方案2】:

是的。

  1. 使用ndimage.label 标记您的图像(首先反转图像,孔=黑色)。
  2. 使用ndimage.find_objects 查找孔对象切片
  3. 根据您的大小标准过滤对象切片列表
  4. 反转图像并对符合条件的切片执行binary_fill_holes

应该这样做,而不需要切碎图像。例如:

输入图片:

输出图像(中等大小的孔消失了):

这里是代码(设置不等式以去除中间大小的斑点):

import scipy
from scipy import ndimage
import numpy as np

im = scipy.misc.imread('cheese.png',flatten=1)
invert_im = np.where(im == 0, 1, 0)
label_im, num = ndimage.label(invert_im)
holes = ndimage.find_objects(label_im)
small_holes = [hole for hole in holes if 500 < im[hole].size < 1000]
for hole in small_holes:
    a,b,c,d =  (max(hole[0].start-1,0),
                min(hole[0].stop+1,im.shape[0]-1),
                max(hole[1].start-1,0),
                min(hole[1].stop+1,im.shape[1]-1))
    im[a:b,c:d] = scipy.ndimage.morphology.binary_fill_holes(im[a:b,c:d]).astype(int)*255

另外请注意,我必须增加切片的大小,以便孔周围有边框。

【讨论】:

  • 我无法发现您发布的两张图片之间的差异。
  • @Jaime - 仔细看;)第二张图片中没有中等大小的孔。
  • 我的错!我一直在寻找很小的洞,消失的比我预期的要大得多,
  • @Jaime - 我确实想到这些图像可能令人困惑,但我想说明,这种方法比 OP 要求的更强大......嗯!
猜你喜欢
  • 2019-02-02
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2018-07-17
  • 2021-02-21
  • 2013-07-30
相关资源
最近更新 更多