检测边界清晰的白色区域

detect white areas with sharp boundary

在下图的灰度图中,如何准确检测出边界清晰的白色区域(红色标记)?

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

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

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

  1. 感兴趣的区域有清晰明确的边界。

  2. 不感兴趣的区域没有明确的边界。它们往往会逐渐与邻里区域融合。

无标记图片供测试:

当你说到尖锐的边界时,你必须想到渐变。边界越尖锐,梯度越大。因此应用渐变,你会发现它会围绕你想要分割的形状变得更强。

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

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)

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