我有一个需要你帮助的难题。我有一个二进制图像,维护一些不需要的区域(小白点)和空洞区域(图1)。我的想法是,第一个我将通过计算区域这些区域删除不需要的区域,然后过滤小面积值。在第二步,我填写孔区域,使图像清晰。你认为最好的方法是填补孔区域。你有任何想法解决它。你能帮我用matlab实现吗?非常感谢。这是我删除不需要的区域的参考代码。但它需要门槛条款。您可以在here
下载图像测试function exImage=rmUnwantedRegion(Img,threshold)
lb = bwlabel(Img);
st = regionprops(lb, 'Area', 'PixelIdxList' );
toRemove = [st.Area] <threshold; % fix your threshold here
exImage = Img;
exImage( vertcat(st(toRemove).PixelIdxList ) ) = 0; % remove
end
答案 0 :(得分:4)
以下是基于我的评论的示例实现:
subplot(1,3,1), imshow(input);
title('Original Image');
计算图像的开口:
openInput=bwareaopen(input, 20);
subplot(1,3,2), imshow(bwareaopen(input, 20));
title('Opened Image');
随后结束:
ClosedInput = imclose(openInput,ones(10));
subplot(1,3,3), imshow(ClosedInput);
title('Closed Image');
结果:
答案 1 :(得分:1)
假设白色像素为1 黑是0 步骤1: 使用convultion矩阵(http://en.wikipedia.org/wiki/Kernel_%28image_processing%29)
带模糊过滤器
第2步: 使用某个静态值(例如0.5)对每个像素进行阈值
如果像素> 0.5像素= 1 else pixel = 0
答案 2 :(得分:1)
这看起来像二元dilation和erosion的工作。通常首先进行侵蚀以去除不需要的噪声,然后用相同的结构元素进行扩张以填充侵蚀留下的间隙。 Matlab使用strel为形态学操作创建结构元素。您还可以阅读有关形态学运算符here
的信息示例:
SE=strel('square',5);
im_eroded=imerode(im,SE);
im_dilated=imdilate(im_eroded,SE);
答案 3 :(得分:-3)
您需要进行侵蚀(Wikipedia或Matlab),然后进行扩张(Wikipedia或Matlab)。这是使用Matlab中的 imerode 和 imdilate 函数完成的。
这样做需要使用带有形状('square','disk','octagon'等)和大小的strel function来指定元素的大小以及扩展。
SE=strel('disk',5);
im_eroded=imerode(im,SE);
im_dilated=imdilate(im_eroded,SE);