bwareaopen not removing noise as expected

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

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)

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

Asked:

on 4 Oct 2018

Community Treasure Hunt

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

Start Hunting!