Python 使用openCV从乳房X光片中删除标签

Python 使用openCV从乳房X光片中删除标签,python,opencv,image-preprocessing,Python,Opencv,Image Preprocessing,我正在处理MIAS数据集,为了进行预处理,我尝试删除一些图像上出现的标签。我的方法对某些图像有效,而对其他图像无效,我不知道为什么。。。我使用二进制阈值,然后使用创建的遮罩保持最大轮廓: x = 4 y = 4 for i in range(1, 5): fig = plt.figure(figsize = (25, 15)) img = cv2.imread(img_add[i], 0) #img_add is an array of image addresses

我正在处理MIAS数据集,为了进行预处理,我尝试删除一些图像上出现的标签。我的方法对某些图像有效,而对其他图像无效,我不知道为什么。。。我使用二进制阈值,然后使用创建的遮罩保持最大轮廓:

x = 4
y = 4
for i in range(1, 5):
    fig = plt.figure(figsize = (25, 15))
    
    img = cv2.imread(img_add[i], 0) #img_add is an array of image addresses
    
    ax = plt.subplot(x, y, (i - 1) * 4 + 1)
    plt.title("orig")
    plt.imshow(img, cmap="gray")
    
    ret, thresh1 = cv2.threshold(img, 8, 255, cv2.THRESH_BINARY)
    
    ax = plt.subplot(x, y, (i - 1) * 4 + 2)
    plt.title("thresh")
    plt.imshow(thresh1, cmap="gray")
    
    im, contours, hierarchy = cv2.findContours(thresh1,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE )
    maxContour = 0
    for contour in contours:
        contourSize = cv2.contourArea(contour)
        if contourSize > maxContour:
            maxContour = contourSize
            maxContourData = contour
    mask = np.zeros_like(thresh1)
    cv2.fillPoly(mask,[maxContourData],1)
    
    ax = plt.subplot(x, y, (i - 1) * 4 + 3)
    plt.title("mask")
    plt.imshow(mask, cmap="gray")
    
    img = cv2.bitwise_and(img, img, mask = mask)
    
    ax = plt.subplot(x, y, (i - 1) * 4 + 4)
    plt.title("final")
    plt.imshow(img, cmap="gray")

有人能告诉我,我能做些什么,使这更好,并对所有的图像工作的预期?
看到二值化的图像,我觉得轮廓应该可以正常工作,但我想它无法将标签和乳房识别为某些图像上的单独轮廓,即使它们没有连接。

很可能是阈值设置正在创建前景(白色)边界位于顶部,因此标签合并到最大轮廓。我建议您使用adaptiveThreshold代替简单阈值,使用drawContours代替fillPoly。当然,后者不会更改您的结果,因为您的掩码已经不正确地生成了。如果你可以发布缩小的原始图像(比如500x500),那么对那些试图帮助你的人来说会更容易。一般来说,在设置阈值之前通过运行高斯滤波器使图像模糊一点是一个好主意,以消除我在上一篇评论中怀疑的任何此类噪声。始终查看阈值图像以了解它在做什么。我怀疑你的阈值水平对两幅图像有效,但对另外两幅图像无效。我同意
@Knight Forked
。您的标签和乳房可能在图像顶部连接。我建议仔细检查图像边界处的阈值图像,以确保边缘没有白色区域。如果允许的话,请删除1像素的边框或任何需要的边框,并在阈值设置之前替换为黑色。@KnightForked非常感谢您!我从每个图像的顶部裁剪了1个像素,现在它可以正常工作了!