Essayez le traitement d'image avec Python lorsque vous êtes invité à vous divertir lors d'un mariage

motivation

Le traitement d'image est une technologie qui peut être utilisée dans divers endroits. Même si c'est un divertissement de mariage. Quand j'ai la fin de la vingtaine, mon entourage est marié, donc j'en suis conscient (sueur)

couple_afin.jpg

[Ensemble de table de mariage / mariage]( https://www.pakutaso.com/20130406108post-2650.html" Ensemble de table de mariage / mariage ")

Et quand il s'agit de mariages, de divertissements

Je veux améliorer la qualité même quand je n'ai pas le temps ... Il répondra à ces besoins. C'est juste pour le traitement d'image.

La portée de cet article est la «cartographie entre les images» (correspondant au Chapitre 3 de Practical Computer Vision). Si vous êtes un processeur d'image avancé, veuillez signaler toute erreur.

Traitement requis pour le mappage entre les images

Lorsque vous préparez une photo pour le divertissement, vous devez combiner les photos.

Si vous combinez simplement les photos, les photos auront un aspect étrange.

Le traitement requis ici est le suivant.

・ Déformation de l'image ・ Incorporez bien l'image dans l'image ·Alignement ・ Alignement pour le panorama

Technologie de traitement d'image requise pour chaque processus

Les éléments requis pour le traitement de conversion d'image sont grossièrement répartis comme suit.

Screen Shot 2016-02-04 at 18.14.31.png

EECS 442 – Computer vision Conversation hour

・ Mise à l'échelle de l'image ・ Mise à l'échelle de l'image (asymétrique) ·rotation ・ Veuillez voir la figure à l'extrême droite car elle ne peut pas être expliquée avec des mots.

Nous convertirons l'image en combinant ces processus.

Voici quelques formules importantes.


\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}

L'équation ci-dessus montre que lorsqu'un point est donné en tant que vecteur, il est mappé à un autre espace en le multipliant par une matrice qui transforme le point. Cela n'a pas de sens dans les mots, alors je vais mettre un chiffre ci-dessous.

Screen Shot 2016-02-04 at 18.45.46.png

Lecture 16: Planar Homographies

Il montre à quoi il ressemble sur la caméra Sténopé lorsque l'on regarde un objet à partir de la caméra Sténopé, et il montre qu'il est converti en multipliant la matrice H lors de son expression comme une image plate de la caméra Sténopé.

Matrix H couvre le traitement de conversion d'image de base décrit au début. En trouvant la matrice exhaustive H, vous pouvez représenter à quoi elle ressemble sur la caméra Sténopé lorsque vous regardez un objet depuis la caméra Sténopé, ou vous pouvez représenter l'image sur un plan à partir de la caméra Sténopé. Cette matrice H est appelée matrice d'homographie.

Je vais le résumer ici.

Un traitement de conversion d'image est nécessaire pour créer une photo composite. Le traitement de conversion d'image peut être effectué en utilisant une matrice d'homographie. En utilisant la matrice d'homographie, il est possible de reproduire une image qui est déplacée en diagonale d'un plan ou une image qui est en diagonale par rapport à un plan.

Matrice d'homographie

Voici comment trouver la matrice d'homographie.

Utilise l'algorithme de transfert linéaire direct.

Vérifions à nouveau la formule ci-dessus.


\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}

Puisqu'il s'agit d'une image, elle représente des coordonnées bidimensionnelles, mais elle utilise des coordonnées appelées système de coordonnées simultanées, et il existe des valeurs w en plus des valeurs x et y.

La valeur de w est généralement normalisée à 1, mais le fait d'avoir cette valeur est qu'elle peut également représenter un mouvement parallèle.

Dans la conversion d'image, non seulement les quatre mouvements ci-dessus, mais également les mouvements parallèles qui changent de position peuvent être exprimés. C'est un point important.

Voir ci-dessous pour une illustration facile à comprendre.

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

Ensuite, vérifions le modèle normalisé. Ce que nous voulons trouver à partir de cette formule est une matrice d'homographie qui transforme une image plate en image diagonale et une image diagonale en image plate.


\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}

Lorsque la relation entre les points de l'image d'origine et l'image mappée est exprimée par une formule mathématique

  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}}

Pour trouver la matrice H, vous devez trouver une valeur à 9 dimensions, mais ici nous ajoutons une contrainte. Contraignez la valeur de h33 à 1. Pourquoi est-il acceptable de mettre des restrictions ici?

  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}}\\
\\

Lorsque h33 est réglé sur 1

  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}

Même si la valeur multipliée par k est calculée, elle n'a pratiquement aucun sens car elle est divisée par le dénominateur et la molécule, donc h33 est utilisé à la fois dans x et y. Ici, il est prudent de supposer que k est une valeur qui définit h33 à 1. Par conséquent, nous avons pu passer du problème de trouver la valeur à 9 dimensions au problème de recherche de la valeur à 8 dimensions en limitant la valeur de h33 à 1.

Solution directe de la méthode de transformation linéaire directe à partir d'ici


  (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}

Demandé 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' 

Il s'est avéré que deux formules peuvent être obtenues à partir des données en un point mappées. En d'autres termes, on a trouvé que si quatre points sont obtenus mathématiquement, les équations simultanées nécessaires pour obtenir huit valeurs peuvent être obtenues. Ici, j'exprimerai la formule lorsque 4 points seront obtenus.


\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}

Il est également possible de trouver analytiquement les équations simultanées ci-dessus. Normalement, il est évident que la reproductibilité sera plus élevée si vous reproduisez en prenant 4 points ou plus.

C'est une solution lorsque le nombre de points augmente, mais c'est une solution par la méthode du carré minimum utilisant SVD. La dernière ligne de la matrice V de la solution obtenue par SVD est la solution par la méthode du carré minimum cette fois. (Pour le groupe de points, les valeurs observées à partir de l'espace normalisé par la moyenne 0 et la variance 1 sont utilisées.)

Si vous souhaitez savoir pourquoi c'est le cas, veuillez voir ci-dessous.

Décomposition en valeurs singulières

Pour résumer ici

・ La matrice d'homographie est une matrice qui déplace une image en diagonale d'un plan et d'une oblique à un plan. ・ La matrice peut être calculée en prenant 4 points ・ Utilisez SVD lors du calcul avec 4 points ou plus.

Conversion d'affine

A partir de là, au lieu de limiter les problèmes qui peuvent être résolus en simplifiant la matrice d'homographie, nous allons introduire la transformation affine qui peut profiter des trois points requis.


\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}

La formule ci-dessus signifie la mise à l'échelle 1. En d'autres termes, le montant de la conversion est supprimé.

Vous pouvez convertir un quadrilatère en quadrilatère parallèle, agrandir, réduire et vous déplacer en parallèle, mais vous ne pouvez pas convertir un quadrilatère en trapèze.

  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}

Si vous vérifiez la formule ci-dessus, vous pouvez convertir les valeurs de x'et y'in communes en fonction des valeurs de x et y. En d'autres termes, il était possible de changer la taille de la valeur entière en fonction de la position des coordonnées, mais comme elle a changé comme suit, il ne peut gérer que la conversion simple et le mouvement parallèle. Au lieu de cela, vous n'avez besoin que de 3 points. L'avantage de ceci est que la déformation affine divisée peut être utilisée.

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

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

Incorporer une image dans une autre image

Utilisez la déformation affine fractionnée pour incorporer une image dans une autre image.

Lorsque vous souhaitez faire correspondre deux images comme indiqué ci-dessous, vous prenez généralement un groupe de points et échantillonnez les points de la matrice d'homographie à calculer, mais il est difficile de faire correspondre les points de l'image en raison d'une erreur de calcul, etc. Devenir.

Cependant, avec la transformation Affin utilisant la méthode de division triangulaire de Dronay, il est possible de faire correspondre les sommets de l'image.

Screen Shot 2016-02-04 at 21.39.02.png

Ensuite, j'expliquerai pourquoi il est possible de faire correspondre les sommets de l'image en utilisant la transformation Affin en utilisant la méthode de division triangulaire de Dronay.

Seuls 3 points sont importants dans la conversion affine.

Et la méthode de division du triangle de Dronay est une méthode de connexion d'un certain groupe de points avec un triangle qui a l'angle minimum maximum lorsqu'un certain groupe de points est obtenu. Voir ci-dessous pour savoir comment choisir l'angle maximal du triangle.

Division triangulaire de Delaunay

Un exemple est présenté ci-dessous.

Screen Shot 2016-02-04 at 21.44.21.png

Programming Computer Vision with Python

En d'autres termes, puisque la transformation affine est appliquée à tous les points, il est possible d'effectuer une transformation avec les sommets mis en correspondance. La méthode de calcul est la méthode DLT et la conversion affine est calculée de la même manière.

Résumé

・ La conversion Affin comporte moins de variations pouvant être converties que la conversion d'homographie. ・ Au lieu de cela, il peut être converti avec seulement 3 points ・ Si 3 points sont suffisants, la méthode de division du triangle de Dronay peut être utilisée, donc une conversion qui correspond aux sommets est possible.

Alignement d'image

Dans le cas de l'alignement d'image, la transformation de similarité est utilisée car l'image elle-même utilise une image similaire.


\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 est le grossissement et θ est le chiffre d'affaires. Puisqu'il peut être agrandi, réduit et tourné par rapport à l'ensemble des coordonnées, c'est la meilleure conversion pour l'alignement. Comparons l'image ci-dessous avec celle qui est simplement moyennée et celle qui est alignée et moyennée. Il peut être confirmé que l'image peut être reproduite plus précisément en alignant.

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

Seule la méthode DLT est introduite, mais comme la méthode DLT n'est pas robuste au bruit, une autre méthode a été proposée. Cette technique est un algorithme chronophage au lieu d'être robuste contre le bruit.

Veuillez vous référer aux documents suivants pour les méthodes spécifiques.

Preemptive RANSAC by David Nister.

Images de couture

Il y a une image prise du même endroit. Si vous souhaitez joindre les images ensemble comme indiqué sur la deuxième figure

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: Acquérir les points caractéristiques de l'image par SHIFT (voir ci-dessous pour plus de détails) Aiguille d'or pour quand elle devient une pierre en regardant la formule du traitement d'image 2: Calculer la matrice d'homographie entre les images à l'aide de RANSAC 3: Sélectionnez l'image centrale 4: Ajoutez 0 à gauche et à droite de l'image centrale pour joindre les images déformées. 5: Il est déterminé s'il faut se connecter à gauche ou à droite par le composant parallèle.

Étant donné que la différence entre les images est perceptible, les logiciels disponibles dans le commerce ont un processus pour normaliser et lisser la luminosité.

ipython notebook

Seulement une conversion affine, mais elle est écrite en code.

https://github.com/SnowMasaya/Image_Processing_for_Wedding

référence

Vision par ordinateur pratique Ébauche de cet article

Informatique de l'Université d'État de Pennsylvanie Une conférence sur la conversion d'image à partir de 3 dimensions est décrite, et elle est facile à comprendre car elle n'est pas limitée à 2 dimensions comme dans cet article.

Université du Michigan

Résumé de l'Université du Michigan

Puisqu'il s'agit d'un matériau de la partie de base de la conversion d'image, la partie de base peut être supprimée.

Preemptive RANSAC by David Nister.

Une excellente diapositive qui montre immédiatement l'algorithme de RANSAC

Réapprentissage après être devenu adulte: conversion Affin

Explication facile à comprendre de la conversion affine

Recommended Posts

Essayez le traitement d'image avec Python lorsque vous êtes invité à vous divertir lors d'un mariage
Traitement d'image avec la configuration de l'environnement Python pour Windows
Traitement d'image avec Python
Traitement d'image avec Python (partie 2)
Traitement d'image avec Python (partie 1)
Traitement d'image avec Python (3)
[Python] Traitement d'image avec scicit-image
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Notes personnelles pour le traitement d'images python
Traitement d'image avec la binarisation Python 100 knocks # 3
100 traitement d'image par Python Knock # 2 Échelle de gris
Essayez d'extraire une chaîne de caractères d'une image avec Python3
Un mémo pour quand pip3 est installé avec python2.7 pour une raison quelconque
Aiguille en or pour quand elle devient une pierre en regardant la formule du traitement d'image
Bases du traitement d'images binarisées par Python
Créez une image factice avec Python + PIL.
100 traitement d'image avec Python Knock # 8 Max Pooling
Traitement d'image avec Python et OpenCV [Tone Curve]
Traitement d'image par Python 100 knock # 12 motion filter
Essayez le scraping HTML avec la bibliothèque Python
Dessin avec Matrix-Reinventor of Python Image Processing-
Traitez facilement des images en Python avec Pillow
Traitement d'image avec Python 100 knocks # 7 pooling moyen
Essayez de dessiner une carte avec python + cartopy 0.18.0
Traitement d'image léger avec Python x OpenCV
[Pour les débutants] Essayez le web scraping avec Python
Traitement d'image par Python 100 knock # 9 Filtre Gaussien
Essayez d'embellir avec Talking Head Anime à partir d'une seule image [préparation python]
Transformez plusieurs listes avec l'instruction for en même temps en Python
Erreur lors de l'installation d'un module avec Python pip
Obtenez un billet pour un parc à thème avec python
Traitement d'image à partir de zéro avec python (5) Transformation de Fourier
Créer un LINE BOT avec Minette pour Python
Essayez de dessiner une courbe de vie avec python
Procédure de création d'un LineBot réalisé avec Python
Essayez de créer un code de "décryptage" en Python
Traitement d'image à partir de zéro avec python (4) Extraction de contour
Traitement d'image? L'histoire du démarrage de Python pour
Un mémo lors de la création d'un environnement python avec miniconda
Commandes pour créer un environnement python3 avec virtualenv
Essayez de créer un groupe de dièdre avec Python
traitement d'image python
Traitement d'image avec Python (j'ai essayé de le binariser en art mosaïque 0 et 1)
J'ai appris Python avec une belle fille à Paiza # 02
Faisons un outil de veille de commande avec python
J'ai appris Python avec une belle fille à Paiza # 01
Remarques sur le traitement d'images HDR et RAW avec Python
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Essayez de rechercher un profil d'un million de caractères en Python
Essayez d'incorporer Python dans un programme C ++ avec pybind11
Problèmes lors de la création d'un outil de conversion csv-json avec python
Créer un environnement pour le traitement du langage naturel avec Python
Créer une couche pour AWS Lambda Python dans Docker
Essayez de gratter avec Python.
Traitement d'image avec MyHDL
Premier traitement d'image Python
Traitement d'image avec PIL
Tenez compte du prétraitement courant lors du traitement du flux DynamoDB avec Lambda (Python)
Essayez d'exécuter python dans l'environnement Django créé avec pipenv