检测边界清晰的白色区域

时间:2016-02-06 10:04:53

标签: algorithm matlab opencv image-processing computer-vision

在下面显示的灰度图像中,如何准确检测具有清晰边界的白色区域(标有红色)?

在这个特定的图像中,一个简单的阈值处理可能会起作用,但是,我有几个图像,其中图像的角落周围有类似的区域,我想忽略它们。

此外,可能存在多个感兴趣的区域,两者都具有不同的强度。一个可以像示例图像一样明亮,另一个可以是中等强度。

然而,感兴趣和不感兴趣的区域之间的唯一区别如下:

  1. 兴趣领域的边界清晰明确。

  2. 不感兴趣的区域没有明显的界限。他们倾向于逐渐融入社区。

  3. no-flash/flash ratio image

    没有标记用于测试的图片: image for test

2 个答案:

答案 0 :(得分:1)

当你说清晰的边界时,你必须考虑渐变。边界越清晰,渐变越大。因此,应用渐变,您将看到它将在您要分割的形状周围变得更强。

但在您的情况下,您还可以观察到您想要分割的区域也是最亮的区域。因此,我还尝试降噪(中值滤波器)加上卷积滤波器(简单平均值)以使不同区域均匀化,然后通过仅保持最亮/最右峰来进行阈值处理。

答案 1 :(得分:1)

im = imread('o2XfN.jpg');
figure
imshow(im)
smooth = imgaussfilt(im,.8); %"blur" the image to take out noisey pixels
big = double(smooth);   % some functions don't work with UINT8, I didn't check for these
maxiRow = quantile(big,.99);   % .99 qualtile... think quartile from stats
maxiCol = quantile(maxiRow,.98);  % again for the column
pixels = find(big>=maxiCol);  % which pixels have the highest values

logicMat = false(size(big));  %initalize a logic matrix of zeros
logicMat(pixels) = 1;  %set the pixels that passed to logic pass
figure
imshow(logicMat)

您对要找到的地区想要做什么并不是很清楚。此外,一些示例图像将有助于调试代码。我上面发布的内容可能适用于该图像,但它不太可能适用于您正在处理的每个图像。