Rechteckerkennung im Bild

9

Ich würde gerne eine Erkennung eines rechteckigen Blatt Papiers programmieren, das nicht absolut perfekt auf jeder Seite sein muss, da ich ein Bild davon "in der Luft" machen kann, was die einzelnen Seiten des Papiers bedeutet Papier könnte ein wenig verzerrt werden.

Die App (iOS und Android) CamScanner macht das sehr sehr gut und ich frage mich, wie dies umgesetzt werden könnte. Zuerst dachte ich daran:

  • Glättung / Rauschreduzierung
  • Kantenerkennung (canny usw.) oder Schwellenwertbildung (global / adaptiv)
  • Hough-Transformation
  • Linien erkennen (nur vertikal / horizontal erlaubt)
  • Berechnen Sie den Schnittpunkt von 4 gefundenen Linien

Aber das gibt mir viele Probleme mit verschiedenen Arten von Bildern. Und ich frage mich, ob es vielleicht einen besseren Ansatz gibt, eine rechteckige Form in einem Bild direkt zu erkennen, und wenn ja, wenn es vielleicht auch von camscanner so implementiert wird!?

Hier sind einige Bilder, die in CamScanner aufgenommen wurden. Diese werden ziemlich gut erkannt, obwohl in a) die Seite verzerrt ist (aber die Ecke wird immer noch in der Überlagerung angezeigt, passt aber nicht wirklich in die Ecke des weißen Papiers) und in b) ist der Hintergrund ziemlich nah am eigentlichen Papier es wird immer noch korrekt erkannt:

Es bringt sogar die gedrehten Bilder richtig:

Und wenn ich einige Testfehler einfüge, schlägt es fehl, aber erkennt zumindest einen Teil der Kontur, aber versuche immer, es als Rechteck zu erkennen:

Und hier scheitert es komplett:

Ich nehme an, in den letzten drei Beispielen hätte es, wenn es eine Transformation durchführen würde, mindestens zwei der vier Seiten des Rechtecks ​​erkannt.

Irgendwelche Ideen und Tipps? Vielen Dank im Voraus

    
tim 22.03.2014, 20:39
quelle

1 Antwort

3

OpenCV Framework kann Ihrem Problem helfen. Sie können auch nach diesem Dokument für die Plattform Android suchen.

Der vollständige Quellcode ist auf Github verfügbar.

    
Abdullah ELEN 13.03.2016, 05:23
quelle