bwareaopen not removing noise as expected

3 views (last 30 days)
Hi,
I have been using bwareaopen to remove noise from a binary image without having any problem. But after i changed my thresholding function, the noise reduction stopped working as expected.
The code that worked:
gray = rgb2gray(my_image);
bw = imbinarize(gray);
bw = bwareaopen(bw,100);
The code that did not work:
ballImg = my_image(:,:,1)/2 + my_image(:,:,2)/2 - my_image(:,:,3)/2;
greenThreshold = ballImg < 80;
ball=zeros(size(ballImg));
ball(greenThreshold)=1;
bw = bwareaopen(ball,100);
Original image:
After modified code (that did not work):
Can anybody see the problem here?
Thanks in advance!
  1 Comment
Mirac Chen
Mirac Chen on 4 Oct 2018
I found the solution myself: the image needs to be reversed for bwareaopen to work properly :)
Fix:
ball=ones(size(ballImg));
ball(greenThreshold)=0;
bw = bwareaopen(ball,100);

Sign in to comment.

Answers (1)

Fanos Christodoulou
Fanos Christodoulou on 1 Apr 2021
Just a comment on the above that could benefit others having a similar problem. My understanding is that the function bwareaopen deletes the white areas smaller than P pixels.
In your example above you need to reverse the black and white pixels first using the function imcomplement and then apply bwareaopen.
Best,
Fanos

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!