【问题标题】:How can i subtract the background from an image in mahotas and opencv in python?如何从 python 中的 mahotas 和 opencv 中的图像中减去背景?
【发布时间】:2014-01-16 02:49:32
【问题描述】:

我有很多像thisthis 这样的图片,我使用这个代码:

fork = mh.imread(path)
bin = fork[:,:,0]
bin = mh.erode(bin)
bin = (bin < 80)

对于第二张图片,但我必须使用这个:

bin = (bin < 127)

第一个。

有一种方法可以自动获得没有背景的好图像,或者我必须选择一个中间值,希望对我的大多数图像都有好处?

【问题讨论】:

    标签: opencv image-processing mahotas


    【解决方案1】:

    有一个阈值叫做“Otsu Threshold”。 Here你有更多信息。

    您可以在 Mahotas 中使用 otsu 或在 scikit-image 中使用 threshold_otsu

    fork = mh.imread(path)
    bin = fork[:,:,0]
    thresh = mh.otsu(bin)
    binary =( bin< thresh)
    

    【讨论】:

    • 我不会将 Otsu 称为“最佳”,因为它并不总是合适的。或许,“有一种自动化方法……,当前景分离良好时效果很好。”
    • 嗯,我在第一张图片中使用了 mh.otsu,但它不起作用:图像的左侧几乎全是白色的!也许还有其他事情要做?
    • 按照@luispedro 的建议,我删除了“最佳”一词
    • @postgres 您的照明有问题。在使用 Otsu 之前,您需要执行一些直方图均衡。这里有更多信息:scikit-image.org/docs/0.9.x/auto_examples/plot_equalize.html
    • 哦,谢谢!它有效,但要将图像从 scikit 转换为 mahotas?我用了这个:binimg = np.array(img_adapteq, dtype=np.uint8) 我得到了一个全黑的图像!
    【解决方案2】:

    我了解到您想将白色背景与图像分开。 以下是执行此操作的步骤。我会用简单的英文写,因为我不熟悉python。

    1:计算图像的闭合(应用膨胀而不是腐蚀)。使用结构元素作为大小为 5x5 的正方形进行膨胀和腐蚀。

    C = mh.dilate(bin)
    C = mh.erode(C);
    

    这将为您提供背景

    2:从原始图像中减去背景:

    C = C-bin
    

    这将为您提供一张白色的星星图像,背景为黑色

    3:现在计算二值化的自动阈值。使用简单的 Otsu 技术来估计最佳阈值。在 openCV 中是这样的:

    double thresh = cv::threshold(im,im,0,255,CV_THRESH_BINARY | CV_THRESH_OTSU);
    cv::threshold(im,im,thresh,255,CV_THRESH_BINARY_INV);
    

    这将为您的图像提供完美的结果。 不要试图猜测阈值。您的图像不是 80 也不是 127。使用大津

    【讨论】:

      猜你喜欢
      • 2014-06-13
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多