Removing noise from binary iamge
16 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
jonas
2018 年 7 月 9 日
編集済み: jonas
2018 年 7 月 9 日
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.
採用された回答
Matt J
2018 年 7 月 9 日
編集済み: Matt J
2018 年 7 月 9 日
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 件のコメント
Matt J
2020 年 5 月 23 日
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
2020 年 5 月 29 日
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!
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Computer Vision with Simulink についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!