在下面显示的灰度图像中,如何准确检测具有清晰边界的白色区域(标有红色)?
在这个特定的图像中,一个简单的阈值处理可能会起作用,但是,我有几个图像,其中图像的角落周围有类似的区域,我想忽略它们。
此外,可能存在多个感兴趣的区域,两者都具有不同的强度。一个可以像示例图像一样明亮,另一个可以是中等强度。
然而,感兴趣和不感兴趣的区域之间的唯一区别如下:
答案 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)
您对要找到的地区想要做什么并不是很清楚。此外,一些示例图像将有助于调试代码。我上面发布的内容可能适用于该图像,但它不太可能适用于您正在处理的每个图像。