J'écris un programme (widgets Qt / c ++) pour supprimer le bruit des images. Comme méthode de débruitage, j'ai choisi la méthode des moyennes non locales . Cette méthode a une qualité incroyable d'images restaurées (c'est pourquoi c'est la seule méthode de débruitage dans OpenCV), mais a un coût de calcul énorme , j'ai donc fait beaucoup de variantes modifiées de cette méthode (certaines avec multithreading, d'autres algorithmiques). Mais, j'ai un problème avec celui, impliquant la FFT
J'ai suivi toutes les étapes de cet article (une seule page, 1430) et tout fonctionne parfaitement, sauf pour la partie FFT, il n'y a que 2 lignes à ce sujet dans le document et je ne peux pas comprendre, COMMENT doit-on utiliser fft
Ce problème me dérange depuis des mois, toute aide ou compréhension serait grandement appréciée.
Version abrégée de la question: Comment puis-je obtenir rapidement la différence au carré de deux tableaux sur l'image (l'un en haut et l'autre au milieu, les valeurs sont des couleurs) rapidement? (O (n ^ 2) est un coût énorme, il y a beaucoup de ce genre d'opérations, le papier ci-dessus déclare, que cela peut être fait via FFT avec O (n * log n) (dit que ces 2 tableaux formant une convolution circulaire en quelque sorte) )
Réponses:
L'astuce à l'intérieur du papier est la suivante:
La transformée de Fourier est évidemment une transformée 2D puisque vous travaillez avec des données 2D. Ce que vous obtenez pour un patch donné est un tableau 2D de valeurs complexes.
Notes complémentaires
À mon avis, cet article n'est pas la meilleure stratégie d'accélération NL-means. Les expériences que j'ai faites en 2007/2008 montrent que la présélection des patchs est meilleure (en termes de vitesse et de qualité des résultats). J'ai commencé à bloguer à ce sujet ici , mais malheureusement je cherche du temps pour terminer les articles.
Les articles NL-means originaux mentionnent des implémentations par blocs qui peuvent être intéressantes. Il existe fondamentalement 2 façons de mettre en œuvre NL-moyens:
La première impolémentation est l'approche originale, car en 2005, la mémoire et les processeurs multicœurs étaient chers. J'ai par contre choisi le numéro 2 sur le matériel récent des 2 dernières années. Cela dépend de la taille typique de votre image et si vous voulez être en mesure de calculer des transformations de domaine comme DFT / DCT (comme dans le document proposé et dans BM3D).
la source