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 Kommentar

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);

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Fanos Christodoulou
Fanos Christodoulou am 1 Apr. 2021

0 Stimmen

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

Produkte

Version

R2017b

Gefragt:

am 4 Okt. 2018

Community Treasure Hunt

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

Start Hunting!

Translated by