Removing noise from binary iamge

13 Ansichten (letzte 30 Tage)
Adrian Lim
Adrian Lim am 8 Jul. 2018
Kommentiert: PBM am 29 Mai 2020
Hello, there are problems that I faced during extracting the background from the image below. Im using image>background to extract them and change it to a binary image. The binary image shows too much noise that I could not count the number of cars in the image. Is it possible to filter out the image and have only the cars left in the binary image? Could it be the method of extracting the backgrounds are wrong or filtering would work? Thanks in advance.
  7 Kommentare
jonas
jonas am 9 Jul. 2018
Bearbeitet: jonas am 9 Jul. 2018
I didn't have much luck with noise-removal. Best I could do for a single image was this.
I2=imread('Frame.jpg');
BW1 = im2bw(I2, 0.1);
BW2 = im2bw(I2, 0.5);
diff=BW1-BW2;
diff(diff<=0)=0;
imshow(~diff)
Which I got simply by playing with the threshold values.
If you use the reference (background) image, then moving the camera will affect the result quite a bit yes. You will probably get the best result if the camera remains steady, but you can also adjust the image for camera displacement quite easily. If you want to use this method, then I suggest you add some reference points (e.g. some bright markers) to your physical models.
Adrian Lim
Adrian Lim am 9 Jul. 2018
Thank you for the answers,guys! I'll try a little bit on my own to see the result! Hope I could get the results and count the cars.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt J
Matt J am 9 Jul. 2018
Bearbeitet: Matt J am 9 Jul. 2018
This might help. Basically, the idea is to quantize the background and develop a mask that gets rid of a lot of the extraneous detail around the cars.
C=im2double(imread('Cars.jpg'));
B=im2double(imread('Background.jpg'));
maxchan=max(B,[],3);
threshmax = multithresh(maxchan,4);
Qmax=imquantize(maxchan,threshmax);
bw=bwareafilt( Qmax==2,1);
bw=imclose(bw,strel('disk',10));
D=rgb2gray(bw.*(C-B));
thresh=multithresh(D,2);
result=bwareafilt( imquantize(D,thresh)>1, [10,inf]);
imshow(result)
  9 Kommentare
Matt J
Matt J am 23 Mai 2020
Hi PBM,
It's been a few years since I posted this solution, but as I recall, most of these parameter selections were trial and error. In a scenario where you need to be more general, most people nowadays would probably apply deep learning object recognition techniques.
The possibility of dropping the Perimeter search from the 12 largest to the 6 largest is something you could test by running the code. I dimly remember that the boundaries of the road, and maybe some other objects in the image had the largest perimeters, and so you needed a threshold larger than 6 so as not to exclude any of the cars. It's also possible that I was allowing for the case where more than 6 cars were present in the field of view.
PBM
PBM am 29 Mai 2020
Hi Matt,
Thanks for your response. I just did something similar and yes it was trial and error. I will attempt deep learning recognition techniques for a more general solution... thanks!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by