2012-10-10 18 views
5

Mam projekt wykrywania samochodu w OpenCV2.3.1 i Visual C++.Jak usunąć szum oświetleniowy?

W segmentacji pierwszego planu widoczne są refleksy świetlne. I to (odbicia) stają się częścią pierwszego planu po usunięciu tła . enter image description here

Potrzebuję sugestii lub pomysłów, jak usunąć ten hałas. Ponieważ powoduje to, że niektóre obiekty pierwszego planu mogą być połączone jako jeden obiekt, tak jak widać przy korzystaniu z funkcji findContours i drawContours. Zobacz fragmenty obrazu zaznaczone na czerwono na załączonym obrazie . Myślę, że to uprości etap wykrywania plam.

* Uwaga - nie wolno mi korzystać z wbudowanych w cvBlobLib w OpenCV

Odpowiedz

2

może próbować konwertować obraz do HSV następnie filtrować wysoką V wynosi

IplImage imgHSV = cvCreateImage(cvGetSize(imgInput), 8, 3); 
IplImage imgThreshold = cvCreateImage(cvGetSize(imgHSV), 8, 1); 
cvInRangeS(imgHSV, cvScalar(0, 0, 90, 0), cvScalar(0, 0, 100, 0), imgThreshold); 

..adjust skalary, ile potrzeba, aby usuń odblaski

+2

Identyfikacja blasku to nic wielkiego, ale jak wypełnić tę część, to naprawdę dobre pytanie. –

4

Problem polega na tym, że część olśnienia może być tłem lub odpowiednim samochodem.

Oto co bym zrobił.

Wierzę, że nie będzie miał duży problem z identifying glare parts by binarizing and thresholding or in a similar way.

Po zidentyfikowaniu wszystkich pikseli spojrzeń, chciałbym wymienić każdego z otokiem pikseli z najbliższego non-glare piksela w tym samym rzędzie obrazu. W ten sposób blask zostanie wypełniony samochodem i tłem. Dzięki tej metodzie będziesz w stanie wykryć samochody bez większego problemu.

+2

Podejrzewam, że to, co opisujesz, jest aplikacją algorytmu wyrzucania. Wydaje mi się, że algorytm Inpaiting nadal nie jest dostępny dla wydanej wersji OpenCV, ale wiem, że nad nim pracują. –

+0

Myślę, że algorytm nie jest jednak trudny do wdrożenia. –