bwareaopen creates a noisy result rather than cleanly removing small objects

3 次查看(过去 30 天)
Hi. I want to remove the diacritics from some arabic text. I read that the best option would be to use morphological opening. And hence the function
bwareaopen
Now in the example in the link here: http://www.mathworks.co.uk/help/images/ref/bwareaopen.html it has cleanly removed small objects. But in my case it tends to produce a noisy result
This is with the pixel value of 50, but produces the same result even if I use 5 or 500?
Why is it not working as it is shown in the tutorial?
Thank you

采纳的回答

Bruno Pop-Stefanov
Bruno Pop-Stefanov 2014-1-20
Make sure that you call bwareaopen on a binary image. I executed the following code on the attached JPEG image and it worked:
% Read original image
I = imread('inputimg.jpg');
figure(1);
imshow(I)
% Convert to binary image
BW = im2bw(I, 0.5);
figure(2);
imshow(BW)
% Do morphological opening to remove small connected components
BW2 = bwareaopen(BW, 50);
figure(3);
imshow(BW2)
  2 个评论
Faraz
Faraz 2014-1-20
Thank you. I read this on the help page and mistook for it being able to accept any image class:
BW can be a logical or numeric array of any dimension, and it must be nonsparse. The return value BW2 is of class logical.

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2014-1-20
It looks like you somehow ran it on the uint8 jpeg image instead of a binary image. I can see jpeg block artifacts.
When it says "numeric array" it probably means that if you give it a double array of 0's and 1's it will interpret that automatically as a binary image of trues and falses. I don't think it means it can take a gray scale image.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by