2016-05-26 12 views
2

Ich muss ein rechteckiges Objekt aus einem Graustufenbild extrahieren. Ich bin mit Thresholding rechteckiger Maske zu extrahieren, wie untenKorrektur der rechteckigen Maske für jede Neigung mit opencv

enter image description here

Manchmal ist das rechteckige Objekt gezeigt Verkippungen kann wie oben gezeigt. Im nächsten Schritt, ich habe die Form eines rechteckigen Objekts korrigieren folgende Ausgabe (grob)

enter image description here

Im Moment zu bekommen, ich bin mit verwandeln Hough Linie die Linie am nächsten zum Bildrand finden (dh links die meiste Linie vertikale Linie). Ich erhalte den Winkel der Linie und benutze diesen Winkel, um die Rotationsmatrix zu erhalten und warpAffine für das gesamte Bild auszuführen (mit opencv-Funktionen).

Vertikale Linienerfassung in der Nähe von Bildrand enter image description here

Affine korrigierte Bild enter image description here

I den folgenden Code verwenden in Python

# get the rotation matrix 
 
myRotMatrix = cv2.getRotationMatrix2D((inBinaryImage.shape[1]/2,inBinaryImage.shape[0]/2),-myAngle,1)    
 
    
 
# perform warpAffine to avoid issues    
 
myBinaryImageTemp = cv2.warpAffine(inBinaryImage,myRotMatrix,(myNewWidth,myNewHeight))

Wie Sie können sehen, dass das affine korrigierte Objekt oben und unten noch etwas geneigt ist. Gibt es eine einfache Möglichkeit, auch die Neigung von oben/unten zu entfernen ??

Dank

+0

Ihr Problem ist, dass das Rechteck selbst nicht ein Rechteck ist, es ist ein Parrellogramm. Seine Seiten sind zwar parallel, besitzen aber keinen rechten Winkel. Der Code funktioniert in diesen Fällen richtig, wenn er den richtigen Betrag rotiert, aber die Ecken der "Form", die mit dieser Linie verbunden sind, sind ungefähr 108 Grad und 80 Grad für die untere und obere Ecke. (Dies ist, was zu Ihrer Neigung führt.) –

+0

gibt es eine Möglichkeit, es kann behoben werden ?? – user1388142

Antwort

1

Sie sollten etwas mit getPerspectiveTransform der Lage zu tun, habe ich es in a grid finder, meine Nutzung als Ihr nicht wirklich genau das gleiche ist, aber man kann durch das Lesen es sicherlich genug lernen. Ich bin kein OpenCV-Experte, erwarte keinen Code auf dem neuesten Stand der Technik.

Außerdem ist es wahrscheinlich fast unmöglich, das Verhältnis des gekippten Objekts zu kennen, ohne dass man schicke Gedanken wie das überwachte Lernen verwendet, um die Ausrichtung des Objekts zu verstehen. Es gibt eine Diskussion darüber hier: https://math.stackexchange.com/questions/1339924/compute-ratio-of-a-rectangle-seen-from-an-unknown-perspective