Puisqu'il y a peu d'articles japonais sur l'alignement des images (au 22 janvier 2020), j'ai pensé que c'était très facile à comprendre Enregistrement d'image: du SIFT au Deep Learning -07-16-image-registration-deep-learning) a été traduit ou résumé. Certaines parties ont été omises ou ajoutées, donc si vous souhaitez vous référer au texte original, veuillez lire l'article original.
L'alignement de l'image est le processus de correction du désalignement de deux images. L'alignement d'image est utilisé lors de la comparaison de plusieurs images dans la même scène. Par exemple, il apparaît souvent dans les domaines de l'analyse d'images satellitaires, du flux optique et des images médicales. Regardons un exemple concret. L'image ci-dessus est un alignement de l'image du bonbon de Muscat que j'ai mangé à Shin-Okubo. C'était très délicieux, mais je ne le recommanderais à personne qui n'aime pas les sucreries. Dans cet exemple, vous pouvez voir que la position du deuxième bonbon Muscat à partir de la gauche est alignée avec la position du bonbon Muscat le plus à gauche tout en conservant la luminosité, etc. Dans ce qui suit, l'image référencée sans conversion, telle que l'extrémité gauche, est appelée image de référence et l'image qui est convertie, telle que la seconde à partir de la gauche, est appelée image flottante. Cet article décrit certaines techniques d'alignement entre les images flottantes et de référence. Notez que la méthode basée sur l'itération / la force du signal n'est pas très courante et ne sera pas mentionnée dans cet article.
Depuis le début des années 2000, des approches basées sur les caractéristiques sont utilisées pour l'alignement des images. Cette approche comprend trois étapes: la détection des points clés et la description des fonctionnalités, la correspondance des fonctionnalités et la transformation d'image. En termes simples, sélectionnez les points d'intérêt dans les deux images, associez chaque point d'intérêt de l'image de référence au point correspondant dans l'image flottante et transformez l'image flottante pour que les deux images soient alignées.
Les points clés définissent les éléments importants et caractéristiques de l'image (tels que les coins et les bords). Chaque point clé est représenté par un descripteur. Un descripteur est un vecteur de caractéristiques qui contient les caractéristiques essentielles d'un point clé. Le descripteur doit être robuste aux transformations d'image (localisation, échelle, luminosité, etc.). Il existe de nombreux algorithmes pour détecter les points clés et décrire les fonctionnalités.
Ces algorithmes sont faciles à utiliser avec OpenCV. Dans l'exemple ci-dessous, nous avons utilisé l'implémentation OpenCV d'AKAZE. Vous pouvez utiliser d'autres algorithmes simplement en renommant l'algorithme.
import cv2 as cv
#Importez des images en niveaux de gris pour rendre les points clés plus faciles à voir
img = cv.imread('img/float.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#Détection des points clés et description des fonctionnalités
akaze = cv.AKAZE_create()
kp, descriptor = akaze.detectAndCompute(gray, None)
keypoints_img = cv.drawKeypoints(gray, kp, img)
cv.imwrite('keypoints.jpg', keypoints_img)
Pour plus d'informations sur la détection et les descripteurs de fonctionnalités, consultez le didacticiel OpenCV (https://docs.opencv.org/3.4/d7/d66/tutorial_feature_detection.html).
Après avoir trouvé les points clés dans les deux images, les points clés correspondants doivent être associés ou «mis en correspondance». Une des méthodes pour cela est BFMatcher.knnMatch ()
. Il mesure la distance entre chaque paire de descripteurs de point-clé et fait correspondre k points-clés du plus proche de chaque point-clé.
Ensuite, appliquez un filtre de ratio pour ne conserver que les correspondances correctes. Pour une correspondance fiable, les points clés correspondants doivent être significativement plus proches que la fausse correspondance la plus proche.
import cv2 as cv
float_img = cv.imread('img/float.jpg', cv.IMREAD_GRAYSCALE)
ref_img = cv.imread('img/ref.jpg', cv.IMREAD_GRAYSCALE)
akaze = cv.AKAZE_create()
float_kp, float_des = akaze.detectAndCompute(float_img, None)
ref_kp, ref_des = akaze.detectAndCompute(ref_img, None)
#Correspondance des fonctionnalités
bf = cv.BFMatcher()
matches = bf.knnMatch(float_des, ref_des, k=2)
#Ne garder que la correspondance correcte
good_matches = []
for m, n in matches:
if m.distance < 0.75 * n.distance:
good_matches.append([m])
matches_img = cv.drawMatchesKnn(
float_img,
float_kp,
ref_img,
ref_kp,
good_matches,
None,
flags=cv.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
cv.imwrite('matches.jpg', matches_img)
Consultez la documentation (https://docs.opencv.org/trunk/dc/dc3/tutorial_py_matcher.html) pour d'autres méthodes de correspondance de fonctionnalités implémentées dans OpenCV.
Après avoir mis en correspondance au moins 4 ensembles de points clés, convertissez une image par rapport à l'autre. Cela s'appelle déformation d'image. Deux images sur le même plan dans l'espace sont associées par Homographie (https://docs.opencv.org/3.4.1/d9/dab/tutorial_homography.html). L'homographie est une transformation géométrique qui a huit paramètres libres et est représentée par une matrice 3x3. Ils représentent la distorsion appliquée à l'image entière (par opposition aux transformations locales). Par conséquent, pour obtenir l'image flottante transformée, calculez la matrice d'homographie et appliquez-la à l'image flottante. Pour assurer une conversion optimale, l'algorithme RANSAC est utilisé pour détecter les valeurs aberrantes et les supprimer afin de déterminer l'homographie finale. Je vais. Il est directement intégré à la méthode OpenCV findHomography (https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html?highlight=findhomography#findhomography). Comme alternative à RANSAC LMEDS: Il existe également une méthode d'estimation robuste telle que la méthode de la médiane minimale.
import numpy as np
import cv2 as cv
float_img = cv.imread('img/float.jpg', cv.IMREAD_GRAYSCALE)
ref_img = cv.imread('img/ref.jpg', cv.IMREAD_GRAYSCALE)
akaze = cv.AKAZE_create()
float_kp, float_des = akaze.detectAndCompute(float_img, None)
ref_kp, ref_des = akaze.detectAndCompute(ref_img, None)
bf = cv.BFMatcher()
matches = bf.knnMatch(float_des, ref_des, k=2)
good_matches = []
for m, n in matches:
if m.distance < 0.75 * n.distance:
good_matches.append([m])
#Choisissez le bon point clé
ref_matched_kpts = np.float32(
[float_kp[m[0].queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
sensed_matched_kpts = np.float32(
[ref_kp[m[0].trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)
#Calculer l'homographie
H, status = cv.findHomography(
ref_matched_kpts, sensed_matched_kpts, cv.RANSAC, 5.0)
#Convertir l'image
warped_image = cv.warpPerspective(
float_img, H, (float_img.shape[1], float_img.shape[0]))
cv.imwrite('warped.jpg', warped_image)
Si vous êtes intéressé par les détails de ces trois étapes, OpenCV a rassemblé une série de tutoriels utiles (https://docs.opencv.org/3.1.0/db/d27/tutorial_py_table_of_contents_feature2d.html).
Les études d'alignement d'images les plus récentes ont porté sur l'utilisation de l'apprentissage en profondeur. Au cours des dernières années, l'apprentissage en profondeur a permis des performances de pointe dans les tâches de vision par ordinateur telles que la classification, la détection et la segmentation. L'alignement des images ne fait pas exception.
L'apprentissage en profondeur a d'abord été utilisé pour l'alignement d'images pour l'extraction de caractéristiques. Une couche continue de réseaux de neurones convolutifs (CNN) capture des fonctionnalités d'image de plus en plus complexes et apprend des fonctionnalités spécifiques aux tâches. Depuis 2014, les chercheurs ont appliqué ces réseaux à des étapes d'extraction de caractéristiques plutôt qu'à des algorithmes SIFT ou similaires.
--En 2014, Dosovitskiy et al.ont proposé de former CNN en utilisant uniquement des données non supervisées. La polyvalence de ces fonctionnalités les rend robustes aux conversions. Ces caractéristiques ou descripteurs étaient supérieurs aux descripteurs SIFT. --En 2018, Yang et al. Ont développé une méthode d'alignement non rigide basée sur la même idée. Ils ont utilisé une couche de réseaux VGG pré-entraînés pour générer des descripteurs de caractéristiques qui contiennent à la fois des informations de convolution et des caractéristiques de localisation. Ces descripteurs semblent être supérieurs aux détecteurs comme SIFT, surtout si SIFT contient de nombreuses valeurs aberrantes ou ne peut pas correspondre à un nombre suffisant de points caractéristiques. Le code de ce dernier article peut être trouvé ici. Vous pouvez essayer cette méthode d'alignement sur votre image dans les 15 minutes, mais elle est environ 70 fois plus lente que la méthode de type SIFT implémentée dans la première moitié.
Les chercheurs ont cherché à atteindre l'alignement en apprenant directement les transformations géométriques à l'aide de réseaux de neurones, plutôt que de limiter l'utilisation de l'apprentissage en profondeur à l'extraction de caractéristiques.
En 2016, DeTone et al. Ont expliqué un réseau d'homographie de régression, un modèle de style VGG qui apprend l'homographie associée à deux images [Deep Image Homography Estimate](https://arxiv.org/pdf/1606.03798. pdf) a été publié. Cet algorithme a l'avantage d'apprendre l'homographie et les paramètres du modèle CNN de bout en bout en même temps. Aucun processus d'extraction de caractéristiques et de correspondance n'est requis.
Le réseau produit huit nombres réels en sortie. L'apprentissage supervisé se fait par la perte entre la sortie et l'homographie de la vérité terrain.
Comme les autres approches d'apprentissage supervisé, cette méthode d'estimation par homographie nécessite une paire de données supervisées. Cependant, il n'est pas facile d'obtenir une grande homographie de vérité avec des données réelles.
Nguyen et al.ont présenté une approche d'apprentissage non supervisé pour l'estimation de l'homographie d'image profonde. Ils ont utilisé le même CNN, mais ont dû utiliser une fonction de perte adaptée à l'approche non supervisée. Nous avons donc choisi la perte photométrique, qui ne nécessite pas une grande étiquette de vérité. Calcule la similitude entre l'image de référence et l'image flottante convertie.
Leur approche introduit deux nouvelles structures de réseau, la transformation linéaire directe de Tensor et la couche de transformation spatiale.
Les auteurs soutiennent que cette méthode non supervisée a des vitesses d'inférence plus rapides, une précision comparable ou meilleure et une robustesse aux fluctuations d'éclairage par rapport aux méthodes traditionnelles basées sur les caractéristiques. De plus, elle est plus adaptable et performante que la méthode supervisée.
L'apprentissage par renforcement profond attire l'attention en tant que méthode d'alignement des applications médicales. Contrairement aux algorithmes d'optimisation prédéfinis, cette approche utilise des agents formés pour effectuer l'alignement.
La recherche actuelle dans une proportion significative d'alignement d'image est pertinente dans le domaine de l'imagerie médicale. Dans de nombreux cas, la transformation entre deux images médicales ne peut être simplement décrite par une matrice d'homographie en raison des transformations locales du sujet (comme la respiration et les changements anatomiques). Nous avons besoin de modèles de transformation plus complexes, tels que des mappages différentiels en phase qui peuvent être représentés par des champs de vecteurs de déplacement.
Les chercheurs ont tenté d'estimer ces grands modèles de transformation avec de nombreux paramètres à l'aide de réseaux de neurones.
--Quicksilver Alignment (https://www.researchgate.net/publication/315748621_Quicksilver_Fast_Predictive_Image_Registration_-_a_Deep_Learning_Approach) résout un problème similaire. Quicksilver utilise un réseau de codage / décodage approfondi pour prédire directement les conversions patch par patch dans l'apparence des images.
J'ai introduit quelques techniques d'alignement d'image. Il a été constaté que la méthode utilisant les points caractéristiques évolue vers la méthode de conversion directe des images par apprentissage en profondeur.
Recommended Posts