如何使用不需要的区域和孔区域过滤二进制图像

时间:2014-04-29 12:55:22

标签: algorithm matlab image-processing

我有一个需要你帮助的难题。我有一个二进制图像,维护一些不需要的区域(小白点)和空洞区域(图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

enter image description here

4 个答案:

答案 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');

结果:

Morph filtered image

答案 1 :(得分:1)

假设白色像素为1 黑是0 步骤1: 使用convul​​tion矩阵(http://en.wikipedia.org/wiki/Kernel_%28image_processing%29

带模糊过滤器

第2步: 使用某个静态值(例如0.5)对每个像素进行阈值

如果像素> 0.5像素= 1   else pixel = 0

答案 2 :(得分:1)

这看起来像二元dilationerosion的工作。通常首先进行侵蚀以去除不需要的噪声,然后用相同的结构元素进行扩张以填充侵蚀留下的间隙。 Matlab使用strel为形态学操作创建结构元素。您还可以阅读有关形态学运算符here

的信息

示例:

SE=strel('square',5);
im_eroded=imerode(im,SE);
im_dilated=imdilate(im_eroded,SE);

答案 3 :(得分:-3)

您需要进行侵蚀(WikipediaMatlab),然后进行扩张(WikipediaMatlab)。这是使用Matlab中的 imerode imdilate 函数完成的。

这样做需要使用带有形状('square','disk','octagon'等)和大小的strel function来指定元素的大小以及扩展。

SE=strel('disk',5);
im_eroded=imerode(im,SE);
im_dilated=imdilate(im_eroded,SE);