代码之家  ›  专栏  ›  技术社区  ›  Muhammad Hassan

从边界框中获取皮肤的二值掩码

  •  0
  • Muhammad Hassan  · 技术社区  · 4 年前

    我已经训练了一个物体检测模型来检测手的指尖。我已经从边界框坐标中提取了指尖。以下是我得到的:

    enter image description here enter image description here enter image description here

    现在我想从这些图像中获得二进制掩码,其中只包括指尖区域。我尝试过这些方法,但没有得到令人满意的结果。

    • 使用精明的边缘检测器方法。
    • 使用Grabcut方法。
    • 对图像进行归一化处理,然后从HSV中提取h通道,找到最大的轮廓。

    我想从这些边界框中提取指尖区域,我目前迷路了,会感激任何正确方向的线索。

    编辑 红色背景的图像:

    enter image description here enter image description here

    0 回复  |  直到 4 年前
        1
  •  3
  •   Jeru Luke    4 年前

    您可以选择 LAB color space

    A通道的一个极端表示红色。因此,在这个极端上应用大津阈值可以很好地隔离它。

    代码:

    img = cv2.imread('finger_1.png')
    
    # convert to LAB color space
    lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
    
    # apply Otsu threshold on A-channel
    th = cv2.threshold(lab[:,:,1], 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
    

    结果:

    enter image description here enter image description here enter image description here

    作为进一步的选择,您可以尝试对同一个a通道进行标准化,然后继续进行。

    也可以看看 this post on how to segment green color