Python 背景亮度未知时的背景减法

Python 背景亮度未知时的背景减法,python,computer-vision,scikit-image,Python,Computer Vision,Scikit Image,我目前正在做一个计算机视觉项目,我的大部分算法都在工作。然而,我目前正在对每幅图像进行手动背景减法。这是因为我能找到的最常见的背景减法算法使用阈值,我的项目应该处理比我要提取的对象更亮和更暗的背景 这是我当前减去背景的方式(使用python和scikit堆栈): 当然,这只适用于比主体颜色更深的背景。 我有一个想法,就是找出背景是否明亮,然后根据这一点改变不平等的迹象,但找不到一种方法来做到这一点 是否有一种背景减法算法能够处理明亮和黑暗的背景,或者有其他方法来解决这个问题 有几种自动阈值技术可

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

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

当然,这只适用于比主体颜色更深的背景。 我有一个想法,就是找出背景是否明亮,然后根据这一点改变不平等的迹象,但找不到一种方法来做到这一点


是否有一种背景减法算法能够处理明亮和黑暗的背景,或者有其他方法来解决这个问题

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

它是在opencv()中实现的


一般来说,没有固定的方法来解决你的问题。前景和背景可以根据不同的情况进行不同的定义

也就是说,使用一些启发式方法使算法在数据集上工作并非不可能。如果你能分享一些图片,让我们更好地理解你对前景和背景的定义,这将是非常有帮助的

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

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

  • 是的,但是使用cv2.THRESH_BINARY的otsu假设背景比前景暗,而cv2.THRESH_BINARY_INV则相反。我正在寻找一种方法来设置阈值,而不知道背景是比前景暗还是比前景亮。好的,谢谢!我想第二种方法在我的情况下可能会起作用,我会试着给你回复。我的数据集由通常具有简单背景的手的图像组成。我要试试这个!我已经实现了第二种方法,它对我当前的数据集非常有效!标记为答案
    val = filters.threshold_otsu(image)
    return image > val
    
    import cv2
    img = cv2.imread('noisy2.png',0)
    ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)