灰度图像上的点分割
Spot segmentation on grayscale images
我是图像处理新手,有以下问题:如何检测下图中的黑点和区域?
我面临的问题是,黑色区域没有清晰明确的边缘,而且我目前查到的图像分割算法假设边缘平滑。
编辑:下面是我想看的图片,它也是对建议阈值方法的 Ian Chu 的回应,我使用用户的回答来澄清我的问题
棕色区域是 Ian Chu 使用阈值法获得的。我还想在这些区域周围标记小黑点。我用橙色标记了它们(抱歉草率的图纸)。我希望我的问题现在更清楚了。
您可以使用 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);
我是图像处理新手,有以下问题:如何检测下图中的黑点和区域?
我面临的问题是,黑色区域没有清晰明确的边缘,而且我目前查到的图像分割算法假设边缘平滑。
编辑:下面是我想看的图片,它也是对建议阈值方法的 Ian Chu 的回应,我使用用户的回答来澄清我的问题
棕色区域是 Ian Chu 使用阈值法获得的。我还想在这些区域周围标记小黑点。我用橙色标记了它们(抱歉草率的图纸)。我希望我的问题现在更清楚了。
您可以使用 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);