Dans ce TP, il faudra utiliser, pour reconstituer une image en couleur, 3 images ayant été prisent avec un filtre bleu, rouge et vert. Il ne suffira pas simplement de les superposer comme certains pourrait penser, il faudra aussi les aligner, car entre les poses avec les différents filtre il y aura eu un mouvement, du ghosting sera présent si aucun ajustement n'est fait.
Ici l'approche à une seule échelle sera utilisé sur de petite image. Une plage de déplacement de 15 sera utilisé, donc tous les déplacement de -15 à 15 seront testé en ligne et colonne (donc 31 à la 2 possibilités) pour l'image avec filtre rouge et vert versus l'image bleu. Le déplacement minimisant la somme des différences au carré pour chaque filtre (vert et rouge) sera appliqué et ensuite les images seront réunies en RGB.
Cette approche utilise la pyramide d'image: on obtient une pyramide en réduisant la taille de l'image et de la plage d'un facteur de 2 à chaque étape, ici la taille de départ sera 1/8 ensuite 1/4, 1/2 et 1. L'alignement de l'images se fait ici de manière séquentielle en partant de l'échelle la plus petite (1/8 dans notre cas) jusqu'à la plus grande (1) en mettant à jour l'estimation de translation au fur et à mesure. La plage de départ est -25 à 25. Aucune image n'a causée de réel problème, seulement 00087u avait un peu de flou, mais ce problème fut réglé avec l'opérateur de Sobel (crédit supplémentaire).
Voici quatre imaghes personnelles aligné (cliquez pour visionner en plus gros). Les deux première ont été prise en restant relativement stable, alors que les deux dernières fut prises en bougeant plus. Le résultat est en accord avec le mouvement les deux images du haut ayant moins d'artefactes que celles du bas. Pour reconstituer l'image couleur, il suffit de prendre trois photos l'une après l'autre, et d'extraire ensuite le canal «R» de la première, «G» de la deuxième, et «B» de la troisième, de faire rouler l'algorithme à échelles multiples sur cela et de sourire!
![]() |
![]() |
![]() |
![]() |
Pour détecter les bordures, un détecteur de discontinuités dans les ditrections verticales et horizontales fut programmé. La sommes des intensité des trois canaux de couleurs fut faites pour chaque colonne et chaque ligne. Ensuite on regarde quelle sont les colonnes et les lignes dans le premier 10% et le dernier 90% de l'image (donc sur les bordures) passent le test suivant (même principe pour les lignes): sum(col_i) < median(all_col)-1.5*sqrt(variance(al_col)). On choisi comme bordure dans les 10% la dernière colonne/ligne passant le test et dans les 90% la première colonne/ligne passant le test.
Avant crop | Après crop |
---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
L'opérateur de sobel est utilisé pour obtenir une image représentant les arêtes des images, donc la comparaison pour le calcul des SDC ne se basent pas directement sur la valeur de pixels en RGB, mais sur les pixels des arêtes, ainsi pour les images dont les couleurs (peu de bleu dans l'image par exemple) rendaient parfois le tout difficile pour l'approche conventionnelle, dans ces cas Sobel est fort meilleur, comme le prouve les deux première image (00153u et 00087u). Cependant dans la majorité des cas Sobel ne procure pas vraiment d'avantage, voir la troisième image.
Sobel (arête) | Pixel directement |
---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Amélioration de l'image avec égalisation de l'histogramme en utilisant la fonction skimage.exposure.equalize_adapthist et avec le principe du grey world vue en classe. Les résultats montrent l'amélioration assez importante des images avec ces deux techniques, la première augmentant drastiquement le contraste et par le fait même les détails des images sont améliorés, la deuxième technique permet d'obtenir des images plus neutre, moins chaude et donc possiblement plus près de la réalité.
Pour faire la coloration des images à partir d'une image grise, il faut convertir l'image RGB créé dans ce travail et ensuite la transformer en greysacle (avec la fonction color.rgb2gray(img_RGB)). L'algorithme de DL qui sera utilisé pour colorer ces images en noir et blanc est celui publié dans Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification en 2016 par Iizuka et al. Les résultats ne sont pas aussi bien qu'en utilisant les 3 filtres de couleur, cependant ils sont assez intéressant et démontre le potentiel de cette technique, la dame rousse a effectivement les cheveux brun-roux avec le DL, assez fou je trouves! D'autres algorithmes pouvant offrir des performances meilleures sont ceux utilisant les réseaux antagonistes génératifs (GAN en anglais).
Noir et blanc | Deep learning | Couleurs (avec filtres) |
---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |