灰度图像上的点分割

use*_*219 2 image-processing grayscale image-segmentation

我是图像处理新手,有以下问题:如何检测下面图像上的黑点和区域?

在此输入图像描述

在此输入图像描述

我面临的问题是黑色区域没有清晰明确的边缘,并且到目前为止我所查找的图像分割算法都假设边缘平滑。

编辑:下面是我想看的图像,这也是对 Ian Chu 提出的阈值方法的回应,我使用用户的答案来澄清我的问题 在此输入图像描述

棕色区域是 Ian Chu 使用阈值处理获得的。我还想在这些区域周围标记小黑点。我用橙色标记了它们(对于草率的绘图表示抱歉)。我希望我的问题现在更清楚了。

Ian*_*Chu 5

您可以使用 Otsu 自动选择阈值,但您失去了专门选择要屏蔽的内容的能力。

在此输入图像描述

在此输入图像描述

import cv2
import numpy as np

# mark holes
def mark(img):
    # crop margins
    margin = 5;
    img = img[margin:-margin,margin:-margin];
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY);

    # threshold
    gray = cv2.GaussianBlur(gray, (5,5), 0);
    _, mask = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU);
    mask = cv2.bitwise_not(mask);

    # redraw
    img[mask == 255] = (0,0,100);
    return img;

# load image
image1 = cv2.imread("spots1.png");
image2 = cv2.imread("spots2.png");

# mark image
image1 = mark(image1);
image2 = mark(image2);

# show
cv2.imshow("one", image1);
cv2.imshow("two", image2);
cv2.waitKey(0);
Run Code Online (Sandbox Code Playgroud)