Versuchen Sie die Bildverarbeitung mit Python, wenn Sie bei einer Hochzeit um Unterhaltung gebeten werden

Motivation

Die Bildverarbeitung ist eine Technologie, die an verschiedenen Orten eingesetzt werden kann. Auch wenn es eine Hochzeitsunterhaltung ist. Wenn ich Ende zwanzig bin, sind die Leute um mich herum verheiratet, also bin ich mir dessen bewusst (Schweiß)

couple_afin.jpg

[Hochzeit / Hochzeitstischset]( https://www.pakutaso.com/20130406108post-2650.html" Hochzeit / Hochzeitstisch gesetzt ")

Und wenn es um Hochzeiten geht, Unterhaltung

Ich möchte die Qualität verbessern, auch wenn ich keine Zeit habe ... Es wird solche Bedürfnisse erfüllen. Das ist richtig für die Bildverarbeitung.

Der Umfang dieses Artikels ist "Zuordnung zwischen Bildern" (entsprechend Kapitel 3 von Practical Computer Vision). Wenn Sie ein fortgeschrittener Bildprozessor sind, weisen Sie bitte auf Fehler hin.

Verarbeitung für die Zuordnung zwischen Bildern erforderlich

Wenn Sie ein Foto für die Unterhaltung vorbereiten, müssen Sie die Fotos kombinieren.

Wenn Sie die Fotos einfach kombinieren, sehen die Fotos seltsam aus.

Die dort erforderliche Verarbeitung ist wie folgt.

・ Bildverformung ・ Betten Sie das Bild gut in das Bild ein ·Ausrichtung ・ Ausrichtung für Panorama

Bildverarbeitungstechnologie für jeden Prozess erforderlich

Die für die Bildkonvertierungsverarbeitung erforderlichen Elemente sind grob wie folgt unterteilt.

Screen Shot 2016-02-04 at 18.14.31.png

EECS 442 – Computer vision Conversation hour

・ Bildskalierung ・ Bildskalierung (asymmetrisch) ·Drehung ・ Bitte sehen Sie die Abbildung ganz rechts, da sie nicht mit Worten erklärt werden kann.

Wir werden das Bild konvertieren, indem wir diese Prozesse kombinieren.

Hier sind einige wichtige Formeln.


\begin{pmatrix}
x'  \\
y'  \\
w'
\end{pmatrix}

=

\begin{pmatrix}
h_{11} & h_{21} & h_{31}\\
h_{12} & h_{22} & h_{32}\\
h_{13} & h_{23} & h_{33}
\end{pmatrix}


\begin{pmatrix}
x  \\
y  \\
w
\end{pmatrix}
\begin{matrix}
\boldsymbol{x'} = \boldsymbol{H}\cdot{\boldsymbol{x}}
\end{matrix}

Die obige Gleichung zeigt, dass ein Punkt, der als Vektor angegeben wird, einem anderen Raum zugeordnet wird, indem er mit einer Matrix multipliziert wird, die diesen Punkt transformiert. In Worten macht es keinen Sinn, also werde ich unten eine Zahl einfügen.

Screen Shot 2016-02-04 at 18.45.46.png

Lecture 16: Planar Homographies

Es zeigt, wie es auf der Lochkamera aussieht, wenn Sie ein Objekt von der Lochkamera aus betrachten, und es zeigt, dass es konvertiert wird, indem die Matrix H multipliziert wird, wenn es als flaches Bild von der Lochkamera ausgedrückt wird.

Matrix H behandelt die zu Beginn beschriebene grundlegende Bildkonvertierungsverarbeitung. Indem Sie die vollständige Matrix H finden, können Sie darstellen, wie sie auf der Lochkamera aussieht, wenn Sie in ein Objekt von der Lochkamera schauen, oder Sie können das Bild in einer Ebene von der Lochkamera darstellen. Diese Matrix H wird als Homographiematrix bezeichnet.

Ich werde es hier zusammenfassen.

Die Bildkonvertierungsverarbeitung ist erforderlich, um ein zusammengesetztes Foto zu erstellen. Die Bildkonvertierungsverarbeitung kann unter Verwendung einer Homographiematrix durchgeführt werden. Unter Verwendung der Homographiematrix ist es möglich, ein Bild zu reproduzieren, das diagonal von einer Ebene bewegt wird, oder ein Bild, das diagonal zu einer Ebene ist.

Homographiematrix

Hier erfahren Sie, wie Sie die Homografiematrix finden.

Verwendet den Direct Linear Transfer-Algorithmus.

Lassen Sie uns nun die Formel noch einmal überprüfen.


\begin{pmatrix}
x'  \\
y'  \\
w'
\end{pmatrix}

=

\begin{pmatrix}
h_{11} & h_{21} & h_{31}\\
h_{12} & h_{22} & h_{32}\\
h_{13} & h_{23} & h_{33}
\end{pmatrix}


\begin{pmatrix}
x  \\
y  \\
w
\end{pmatrix}

Da dies ein Bild ist, stellt es zweidimensionale Koordinaten dar, verwendet jedoch Koordinaten, die als simultanes Koordinatensystem bezeichnet werden, und es gibt zusätzlich zu den x- und y-Werten w-Werte.

Der Wert von w wird normalerweise auf 1 normiert, aber der Effekt dieses Wertes besteht darin, dass er auch eine parallele Bewegung darstellen kann.

Bei der Bildkonvertierung können nicht nur die obigen vier, sondern auch parallele Bewegungen, die Positionen ändern, ausgedrückt werden. Dies ist ein wichtiger Punkt.

Unten finden Sie eine leicht verständliche Abbildung.

http://d.hatena.ne.jp/Zellij/20120523/p1

Als nächstes überprüfen wir das normalisierte Muster. Was wir aus dieser Formel herausfinden wollen, ist eine Homographiematrix, die ein flaches Bild in ein diagonales Bild und ein diagonales Bild in ein flaches Bild verwandelt.


\begin{pmatrix}
x'  \\
y'  \\
1'
\end{pmatrix}

=

\begin{pmatrix}
h_{11} & h_{21} & h_{31}\\
h_{12} & h_{22} & h_{32}\\
h_{13} & h_{23} & h_{33}
\end{pmatrix}


\begin{pmatrix}
x  \\
y  \\
1
\end{pmatrix}

Wenn die Beziehung zwischen den Punkten des Originalbilds und dem abgebildeten Bild durch eine mathematische Formel ausgedrückt wird

  x' = \frac{h_{11}x + h_{21}y + h_{31}}{h_{13}x + h_{23}y + h_{33}}\\

  y' = \frac{h_{12}x + h_{22}y + h_{32}}{h_{13}x + h_{23}y + h_{33}}

Um die Matrix H zu finden, müssen Sie einen 9-dimensionalen Wert finden, aber hier fügen wir eine Einschränkung hinzu. Beschränken Sie den Wert von h33 auf 1. Warum ist es in Ordnung, hier Einschränkungen zu setzen?

  x' = \frac{kh_{11}x + kh_{21}y + kh_{31}}{kh_{13}x + kh_{23}y + kh_{33}}\\

  y' = \frac{kh_{12}x + kh_{22}y + kh_{32}}{kh_{13}x + kh_{23}y + kh_{33}}\\
\\

Wenn h33 auf 1 gesetzt ist

  x' = \frac{h_{11}x + h_{21}y + h_{31}}{h_{13}x + h_{23}y + 1}\\

  y' = \frac{h_{12}x + h_{22}y + h_{32}}{h_{13}x + h_{23}y + 1}

Selbst wenn der mit k multiplizierte Wert berechnet wird, ist er praktisch bedeutungslos, da er durch den Nenner und das Molekül geteilt wird, sodass h33 sowohl in x als auch in y verwendet wird. Hier kann man davon ausgehen, dass k ein Wert ist, der h33 auf 1 setzt. Daher konnten wir vom Problem des Findens des 9-dimensionalen Werts zum Problem des Findens des 8-dimensionalen Wertes wechseln, indem wir den Wert von h33 auf 1 begrenzten.

Direkte Lösung der direkten linearen Transformationsmethode von hier


  (h_{13}x + h_{23}y + 1)x' = h_{11}x + h_{21}y + h_{31}\\

  ({h_{13}x + h_{23}y + 1})y' = h_{12}x + h_{22}y + h_{32}

Gefragt x ', y'


  x' = h_{11}x + h_{21}y + h_{31} - h_{13}xx' - h_{23}yx'  \\

  y' = h_{12}x + h_{22}y + h_{32} - h_{13}xy' - h_{23}yy' 

Es stellte sich heraus, dass aus den abgebildeten Einpunktdaten zwei Formeln erhalten werden können. Mit anderen Worten wurde gefunden, dass, wenn vier Punkte mathematisch erhalten werden, die simultanen Gleichungen erhalten werden können, die erforderlich sind, um acht Werte zu erhalten. Hier werde ich die Formel ausdrücken, wenn 4 Punkte erhalten werden.


\begin{pmatrix}
x'_{1}  \\
y'_{1}  \\
x'_{2}  \\
y'_{2}  \\
x'_{3}  \\
y'_{3}  \\
x'_{4}  \\
y'_{4}  
\end{pmatrix}

=

\begin{pmatrix}
x_{1} & y_{1} & 1 & 0 & 0 & 0 & -x_{1}x'_{1} & -y_{1}x'_{1}\\
0 & 0 & 0 & x_{1} & y_{1} & 1 & -x_{1}y'_{1} & -y_{1}y'_{1}\\
x_{2} & y_{2} & 1 & 0 & 0 & 0 & -x_{2}x'_{2} & -y_{2}x'_{2}\\
0 & 0 & 0 & x_{2} & y_{2} & 1 & -x_{2}y'_{2} & -y_{2}y'_{2}\\
x_{3} & y_{3} & 1 & 0 & 0 & 0 & -x_{3}x'_{3} & -y_{3}x'_{3}\\
0 & 0 & 0 & x_{3} & y_{3} & 1 & -x_{3}y'_{3} & -y_{3}y'_{3}\\
x_{4} & y_{4} & 1 & 0 & 0 & 0 & -x_{4}x'_{4} & -y_{4}x'_{4}\\
0 & 0 & 0 & x_{4} & y_{4} & 1 & -x_{4}y'_{4} & -y_{4}y'_{4}\\
\end{pmatrix}


\begin{pmatrix}
h_{11}  \\
h_{12}  \\
h_{13}  \\
h_{21}  \\
h_{22}  \\
h_{23}  \\
h_{31}  \\
h_{32}
 \end{pmatrix}

Es ist auch möglich, die obigen simultanen Gleichungen analytisch zu finden. Normalerweise ist es offensichtlich, dass die Reproduzierbarkeit höher ist, wenn Sie mit 4 oder mehr Punkten reproduzieren.

Es ist eine Lösung, wenn die Anzahl der Punkte zunimmt, aber es ist eine Lösung nach der Minimum-Square-Methode unter Verwendung von SVD. Die letzte Zeile der Matrix V der durch SVD erhaltenen Lösung ist diesmal die Lösung nach der Minimum-Square-Methode. (Für die Punktgruppe werden die Werte verwendet, die aus dem durch den Mittelwert 0 und die Varianz 1 normalisierten Raum beobachtet wurden.)

Wenn Sie sehen möchten, warum dies der Fall ist, lesen Sie bitte unten.

Singularwertzerlegung

Um es hier zusammenzufassen

・ Die Homographiematrix ist eine Matrix, die ein Bild diagonal von einer Ebene und von einer schrägen zu einer Ebene bewegt. ・ Die Matrix kann mit 4 Punkten berechnet werden ・ Verwenden Sie SVD, wenn Sie mit 4 oder mehr Punkten rechnen.

Affin-Konvertierung

Anstatt die Probleme zu begrenzen, die durch Vereinfachung der Homographiematrix gelöst werden können, werden wir von hier aus die affine Transformation einführen, die die drei erforderlichen Punkte nutzen kann.


\begin{pmatrix}
x'  \\
y'  \\
1
\end{pmatrix}

=

\begin{pmatrix}
a_{1} & a_{2} & t_{1}\\
a_{3} & a_{4} & t_{2}\\
0 & 0 & 1
\end{pmatrix}


\begin{pmatrix}
x  \\
y  \\
1
\end{pmatrix}

Die obige Formel bedeutet Skalierung 1. Mit anderen Worten wird der Umwandlungsbetrag unterdrückt.

Sie können vom Viereck zum parallelen Viereck konvertieren, vergrößern, verkleinern und parallel bewegen, aber Sie können nicht vom Viereck zum Trapez konvertieren.

  x' = \frac{h_{11}x + h_{21}y + h_{31}}{h_{13}x + h_{23}y + 1}\\

  y' = \frac{h_{12}x + h_{22}y + h_{32}}{h_{13}x + h_{23}y + 1}

Wenn Sie die obige Formel überprüfen, können Sie die gemeinsamen Werte von x'und y'in entsprechend den Werten von x und y konvertieren. Mit anderen Worten, es war möglich, die Größe des gesamten Werts abhängig von der Position der Koordinaten zu ändern, aber da es sich wie folgt änderte, kann es nur einfache Konvertierung und parallele Bewegung verarbeiten. Stattdessen benötigen Sie nur 3 Punkte. Dies hat den Vorteil, dass Split Affine Warping verwendet werden kann.

  x' = h_{11}x + h_{21}y + h_{31}\\

  y' = h_{12}x + h_{22}y + h_{32}

Betten Sie ein Bild in ein anderes Bild ein

Verwenden Sie Split Affine Warping, um ein Bild in ein anderes Bild einzubetten.

Wenn Sie zwei Bilder wie unten gezeigt abgleichen möchten, nehmen Sie normalerweise eine Gruppe von Punkten und probieren die Punkte in der Homografiematrix aus, um sie zu berechnen. Aufgrund von Berechnungsfehlern usw. ist es jedoch schwierig, sie an den oberen Bildrand anzupassen. Werden.

Mit der Affin-Transformation unter Verwendung der Dronay-Dreieck-Teilungsmethode ist es jedoch möglich, die Eckpunkte des Bildes anzupassen.

Screen Shot 2016-02-04 at 21.39.02.png

Dann werde ich erklären, warum es möglich ist, die Eckpunkte des Bildes mithilfe der Affin-Transformation unter Verwendung der Dronay-Dreieck-Teilungsmethode abzugleichen.

Bei der affinen Umwandlung sind nur 3 Punkte wichtig.

Und die Dronay-Dreiecksteilungsmethode ist eine Methode zum Verbinden einer bestimmten Punktgruppe mit einem Dreieck, das den maximalen Mindestwinkel aufweist, wenn eine bestimmte Punktgruppe erhalten wird. Im Folgenden erfahren Sie, wie Sie den maximalen Winkel des Dreiecks auswählen.

Delaunay Triangular Division

Ein Beispiel ist unten gezeigt.

Screen Shot 2016-02-04 at 21.44.21.png

Programming Computer Vision with Python

Mit anderen Worten, da die affine Transformation auf alle Punkte angewendet wird, ist es möglich, eine Transformation durchzuführen, die mit den Eckpunkten übereinstimmt. Die Berechnungsmethode ist die DLT-Methode, und die affine Umwandlung wird auf die gleiche Weise berechnet.

Zusammenfassung

・ Die Affin-Konvertierung weist weniger Variationen auf, die konvertiert werden können als die Homographie-Konvertierung. ・ Stattdessen kann es mit nur 3 Punkten konvertiert werden ・ Wenn 3 Punkte ausreichen, kann die Dronay-Dreiecksteilungsmethode verwendet werden, sodass eine Konvertierung möglich ist, die den Eckpunkten entspricht.

Bildausrichtung

Bei der Bildausrichtung wird die Ähnlichkeitskonvertierung verwendet, da das Bild selbst ein ähnliches Bild verwendet.


\begin{pmatrix}
x'  \\
y'  \\
1
\end{pmatrix}

=

\begin{pmatrix}
s\ cos(\theta) & -s\ sin(\theta) & t_{x}\\
s\ sin(\theta) & s\ cos(\theta) & t_{y}\\
0 & 0 & 1
\end{pmatrix}


\begin{pmatrix}
x  \\
y  \\
1
\end{pmatrix}

s ist die Vergrößerung und θ ist der Umsatz. Da es in Bezug auf die gesamten Koordinaten vergrößert, verkleinert und gedreht werden kann, ist es die beste Konvertierung für die Ausrichtung. Vergleichen wir das Bild unten mit dem einfach gemittelten und dem ausgerichteten und gemittelten. Es kann bestätigt werden, dass das Bild durch Ausrichten genauer wiedergegeben werden kann.

Screen Shot 2016-02-04 at 22.15.25.png

Programming Computer Vision with Python

Screen Shot 2016-02-04 at 22.13.58.png

Programming Computer Vision with Python

RANSAC

Es wird nur das DLT-Verfahren eingeführt. Da das DLT-Verfahren jedoch nicht robust gegenüber Rauschen ist, wurde ein anderes Verfahren vorgeschlagen. Diese Technik ist ein zeitaufwändiger Algorithmus, anstatt robust gegen Rauschen zu sein.

Informationen zu bestimmten Methoden finden Sie in den folgenden Materialien.

Preemptive RANSAC by David Nister.

Bilder nähen

Es gibt ein Bild, das vom selben Ort aufgenommen wurde. Wenn Sie die Bilder wie in der zweiten Abbildung gezeigt zusammenfügen möchten

Screen Shot 2016-02-04 at 22.36.12.png

Programming Computer Vision with Python

Screen Shot 2016-02-04 at 22.34.33.png

Programming Computer Vision with Python

1: Erfassen Sie die Merkmalspunkte des Bildes mit UMSCHALT (Einzelheiten siehe unten). Goldnadel für den Fall, dass es ein Stein wird, wenn man sich die Formel der Bildverarbeitung ansieht 2: Berechnen Sie die Homografiematrix zwischen Bildern mit RANSAC 3: Wählen Sie das mittlere Bild aus 4: Fügen Sie links und rechts vom mittleren Bild 0 hinzu, um die deformierten Bilder zu verbinden. 5: Es wird festgelegt, ob die parallele Komponente eine Verbindung nach links oder rechts herstellen soll.

Da der Unterschied zwischen Bildern spürbar ist, verfügt handelsübliche Software über einen Prozess zum Normalisieren und Glätten der Helligkeit.

ipython notebook

Nur affine Konvertierung, aber es ist in Code geschrieben.

https://github.com/SnowMasaya/Image_Processing_for_Wedding

Referenz

Praktische Computer Vision Entwurf dieses Artikels

Informatik der Pennsylvania State University Ein Vortrag über die Bildkonvertierung aus drei Dimensionen wird beschrieben und ist leicht zu verstehen, da er nicht wie in diesem Artikel auf zwei Dimensionen beschränkt ist.

Michigan University

Zusammenfassung der Michigan University

Da es sich um ein Material aus dem Grundteil der Bildkonvertierung handelt, kann der Grundteil unterdrückt werden.

Preemptive RANSAC by David Nister.

Eine ausgezeichnete Folie, die den RANSAC-Algorithmus sofort zeigt

Nach dem Erwachsenwerden neu lernen: Affin-Konvertierung

Leicht verständliche Erklärung der affinen Bekehrung

Recommended Posts

Versuchen Sie die Bildverarbeitung mit Python, wenn Sie bei einer Hochzeit um Unterhaltung gebeten werden
Bildverarbeitung mit Python Environment Setup für Windows
Bildverarbeitung mit Python
Bildverarbeitung mit Python (Teil 2)
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
[Python] Bildverarbeitung mit Scicit-Image
Probieren Sie die ähnliche Suche von Image Search mit Python SDK [Search] aus.
Persönliche Notizen für die Python-Bildverarbeitung
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
Ein Memo für die Installation von pip3 mit python2.7 aus irgendeinem Grund
Goldnadel für den Fall, dass sie zu einem Stein wird, wenn man sich die Formel der Bildverarbeitung ansieht
Grundlagen der binärisierten Bildverarbeitung durch Python
Erstellen Sie mit Python + PIL ein Dummy-Image.
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildverarbeitung mit Python 100 Knock # 12 Bewegungsfilter
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Versuchen Sie, eine Karte mit Python + Cartopy 0.18.0 zu zeichnen
Leichte Bildverarbeitung mit Python x OpenCV
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
Versuchen Sie, mit Talking Head Anime aus einem einzigen Bild zu verschönern [Python-Vorbereitung]
Drehen Sie in Python mehrere Listen mit for-Anweisung gleichzeitig
Fehler beim Installieren eines Moduls mit Python pip
Holen Sie sich ein Ticket für einen Themenpark mit Python
Bildverarbeitung von Grund auf mit Python (5) Fourier-Transformation
Erstellen Sie mit Minette für Python einen LINE BOT
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Vorgehensweise zum Erstellen eines mit Python erstellten LineBot
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Bildverarbeitung von Grund auf mit Python (4) Konturextraktion
Bildverarbeitung? Die Geschichte, Python für zu starten
Ein Memo beim Erstellen einer Python-Umgebung mit Miniconda
Befehle zum Erstellen einer Python3-Umgebung mit virtualenv
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Python-Bildverarbeitung
Bildverarbeitung mit Python (ich habe versucht, es in 0 und 1 Mosaikkunst zu binarisieren)
Ich habe Python mit einem schönen Mädchen in Paiza # 02 gelernt
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Ich habe Python mit einem schönen Mädchen in Paiza # 01 gelernt
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
Erstellen Sie mit pyenv-virtualenv eine Python-Umgebung für jedes Verzeichnis
Versuchen Sie, in Python nach einem Profil mit einer Million Zeichen zu suchen
Versuchen Sie, Python mit pybind11 in ein C ++ - Programm einzubetten
Probleme beim Erstellen eines CSV-JSON-Konvertierungstools mit Python
Erstellen einer Umgebung für die Verarbeitung natürlicher Sprache mit Python
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Versuchen Sie es mit Python.
Bildverarbeitung mit MyHDL
Erste Python-Bildverarbeitung
Bildverarbeitung mit PIL
Berücksichtigen Sie bei der Verarbeitung von DynamoDB Stream mit Lambda (Python) die allgemeine Vorverarbeitung.
Versuchen Sie, Python in der mit pipenv erstellten Django-Umgebung auszuführen