2014-06-23 14 views
7

i Problem mit Lichtreflexion haben, hier ist das Bild mit standart Kamera aufgenommenOpenCV Lichtreflexion Reduktion

Original Image taken with camera

und Verfahren, die ich tun

1. blur the image 
    Imgproc.GaussianBlur(blurred, blurred, new Size(17, 17), 
    Imgproc.BORDER_ISOLATED); 
2. create second empty image that using hsv 
    Imgproc.cvtColor(gray0, gray0, Imgproc.COLOR_BGR2HSV); 
3. mix the image color chanel (fromto {0,0}) 
    Core.mixChannels(blurredlist, graylist, fromto); 
4. Threshold, Canny, and delate 
Imgproc.threshold(gray0, gray0, 126, 255, Imgproc.THRESH_TRUNC); 
Imgproc.Canny(gray0, gray0, 50, 70); 
Imgproc.dilate(gray0, gray0, Mat.ones(new Size(3, 3), 0)); 
5. finding the contour 
    Imgproc.findContours(gray0, contours, new Mat(), Imgproc.RETR_EXTERNAL, 
     Imgproc.CHAIN_APPROX_SIMPLE); 
6. magicall filter for biggest contour and stuff 

und hier ist das Ergebnis After Thresholding Wie kann ich die Hintergrundbeleuchtung entfernen oder die gestrichelte Linie von der erkannten Kontur anschließen?

Antwort

1

Das Problem hier ist, dass die Reflexion die Pixel übersteuert. Hier gibt es zwei mögliche Wege;

Passen Sie die Bedingung

den Zustand einzustellen, ist der einfachste Weg. Durch einfaches Steuern der Bedingungen, unter denen das Bild aufgenommen wird, können Sie die meisten (wenn nicht alle) schwierigen Situationen (wie diese) entfernen. Denken Sie polarisierte Filter verwendet werden, besser (zB; diffuse) Beleuchtung, bessere Belichtungseinstellungen usw.

das Bild justieren

Die andere Option (zB, die Highlights zu entfernen danach) viel schwieriger ist. Dies liegt hauptsächlich daran, dass die Übersättigung viele Daten zerstört. Die am häufigsten verwendete Methode hierfür ist die Verwendung von HDR-Bildern, die dazu neigen, viel mehr Daten zu erhalten, da die Bilder bei unterschiedlichen Belichtungen aufgenommen werden. In einigen Fällen kann das Problem aufgrund der RAW-Konvertierung auftreten. aber das zu verbessern, ist im Allgemeinen ziemlich mühsam.

+0

Nun, ich bin neu in Android und noch lernen opencv, inspiriert von einer App erschossen docs https://play.google.com/store/apps/details?id=com.jp.shotdocs, die das Papier erkennen können mit der gleichen Umgebung. frage mich nur, welche Methode sie benutzt haben ... –

+1

Wie es aussieht; Sie nehmen an, dass das, was Sie zu erkennen versuchen, quadratisch ist. Z.B; Sie versuchen, mehrere Zeilen an die Datenpunkte mit der besten Übereinstimmung anzupassen. Wie in diesem Fall können drei der Linien ziemlich einfach angepasst werden (da Sie viele Punkte haben). Die Kante links ist härter, aber immer noch möglich, da nur die "Mitte" unsichtbar ist. – Nallath

+0

Yep, quadratische Erkennung ist es ... wenn der Hintergrund klar und keine Reflexion von Licht, die Genauigkeit ziemlich gut, aber eine Reflexion in der Nähe des Papiers machen es scheitern, das Quadrat zu erkennen. –

Verwandte Themen