【问题标题】:Background subtraction when background brightness is unknown背景亮度未知时的背景减法
【发布时间】:2017-11-16 12:20:58
【问题描述】:

我目前正在从事一个计算机视觉项目,并且我的大部分算法都能正常工作。但是,我目前正在对每张图像手动进行背景减法。这是因为我能找到的最常见的背景减除算法都使用了阈值,我的项目应该处理比我要提取的对象更亮和更暗的背景。

这是我目前减去背景的方式(使用 python 和 scikit 堆栈):

val = filters.threshold_otsu(image)
return image > val

当然,这只适用于比主体更暗的背景。 我的想法是找出背景是否明亮,然后根据它改变不等式的符号,但找不到方法。

是否有能够同时处理亮背景和暗背景的背景减法算法,或者是否有其他方法可以解决这个问题?

【问题讨论】:

    标签: python computer-vision scikit-image


    【解决方案1】:

    通常没有固定的方法来解决您的问题。前景和背景可以根据情况进行不同的定义。

    话虽如此,使用一些启发式方法使算法在您的数据集上运行并非不可能。如果您能分享一些图片,让我们更好地了解您对前景和背景的定义,将会很有帮助。

    以下是一些可能有帮助的启发式方法:

    1. 同时使用 THRESH_BINARY 和 THRESH_BINARY_INV 运行 Ostu 阈值。然后假设您的前景始终居中,选择中心区域大部分为白色的结果。
    2. 如果前景总是大于背景,反之亦然,则计算白色区域的面积。

    【讨论】:

    • 好的,谢谢!我认为第二种方法通常适用于我的情况,我会尝试回复您。我的数据集由通常具有简单背景的手的图像组成。我会试试这个!
    • 我已经实现了第二种方法,它适用于我当前的数据集!标记为答案
    【解决方案2】:

    有几种自动阈值技术可用。其中之一就是大津。

    http://www.labbookpages.co.uk/software/imgProc/otsuThreshold.html

    在opencv中实现(https://docs.opencv.org/trunk/d7/d4d/tutorial_py_thresholding.html)

    import cv2
    img = cv2.imread('noisy2.png',0)
    ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    

    【讨论】:

    • 是的,但是带有 cv2.THRESH_BINARY 的 otsu 假设背景比前景更暗,而 cv2.THRESH_BINARY_INV 则相反。我正在寻找一种阈值方法,但不知道背景是否比前景更暗或更亮。
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多