Bonjour,
J'ai codé une intercorrelation en java en utilisant JAI.
Mon objectif est de rechercher une image dans une autre.
Le comportement obtenu est "presque" celui attendu.
Mon algo ressemble à celui-là :
Voici le résultat sur un cas simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 - agrandissement et centrage de l'image cherchée - transformée de fourier de l'image cherchée - suppression des modules (je ne garde que les phases) - transformée de fourier de l'image dans laquelle je cherche - suppression des modules (je ne garde que les phases) - produit des deux TF - transformée inverse du produit - localisation du maximum
(pardon pour la mauvaise qualité du jpeg, mais pour être bien clair : il n'y a que 2 couleurs dans chaque fichier)
Tout se passe bien donc !
Sauf que quand je complexifie mon image de départ, mon maximum trouvé diminue :
(observez la valeur du maximum !)
Ceci est fort génant, pour trois raisons :
- Cela ne correspond pas à ce que j'obtiendrais en faisant une intercorrelation "directe" sans passer par une FT
- Si j'ai deux images de départ, je ne peux plus savoir dans laquelle des deux l'intercorrelation a le mieux marché
- Surtout ! Si je complexifie assez l'image de départ, je n'ai plus aucun résultat
Pour illustrer le troisième point : voici un exemple (attention la différence est subtile et se situe au niveau du disque tronqué) :
Je n'arrive pas à savoir si ce comportement est normal étant donné la méthode utilisée, ou bien s'il provient de mon implémentation (ou par exemple du ma DFT ou de mon IDFT).
Voici les DFT() et IDFT(DFT()) de deux des images de départ ci-dessus :
Ces images montrent sans doute à quel moment mon implémentation foire, mais je ne comprends réellement pas pourquoi.
Merci à tous ceux qui ont lu,
Merci à ceux qui pourront m'aider
Partager