Inverse de la transformée de fourier de OpenCV
Je suis nouveau dans OpenCV et des algorithmes de traitement d'image. J'ai besoin de faire de la transformation de fourier inverse discrete dans OpenCV en C++, mais je ne sais pas comment. J'ai cherché sur internet et je ne trouve pas de réponse. Je suis en train de faire la transformation de fourier dans mon programme avec ce code de cette page: http://opencv.itseez.com/doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.html. J'ai essayé de faire inverse de ce code, mais je ne sais pas où j'ai fais de mal. Mon code est ici (je pense que tout le code est erroné):
void doFourierInverse(const Mat &src, Mat &dst) {
normalize(src, dst, 0, -1, CV_MINMAX);
int cx = dst.cols/2;
int cy = dst.rows/2;
Mat q0(dst, Rect(0, 0, cx, cy));
Mat q1(dst, Rect(cx, 0, cx, cy));
Mat q2(dst, Rect(0, cy, cx, cy));
Mat q3(dst, Rect(cx, cy, cx, cy));
Mat tmp;
q0.copyTo(tmp);
q3.copyTo(q0);
tmp.copyTo(q3);
q1.copyTo(tmp);
q2.copyTo(q1);
tmp.copyTo(q2);
dst = dst(Rect(0, 0, dst.cols & -2, dst.rows & -2));
exp(dst, dst);
dst -= Scalar::all(1);
Mat planes[2];
polarToCart(dst, Mat::zeros(dst.rows, dst.cols, dst.type()), planes[0], planes[1]);
merge(planes, 2, dst);
idft(dst, dst, DFT_INVERSE | DFT_SCALE);
split(dst, planes);
dst = planes[0];
}
Que pensez-vous est "mauvais" exactement avec votre code et/ou les résultats qu'il produit ?
Je pense que la fonction polarToCart n'est pas bon inverse de la fonction de l'ampleur.
Je pense que la fonction polarToCart n'est pas bon inverse de la fonction de l'ampleur.
OriginalL'auteur rwrx_ | 2012-04-22
Vous devez vous connecter pour publier un commentaire.
En fait, vous n'avez pas à permuter les différents quadrants, il est nécessaire seulement si vous êtes un homme et que vous voulez un plus naturelle à la recherche de visualisation de la FFT résultat (c'est à dire avec le 0 fréquence dans le milieu, des fréquences négatives à gauche/en bas et positive des fréquences jusqu'/droite).
Pour inverser la FFT, vous avez besoin de passer le résultat de la transformation "comme il est" (ou après la fréquence de filtrage que vous voulez) à la même dft() de la fonction, n'ajoutant le drapeau DFT_INVERSE. Si vous vous souvenez de vos calculs sur la FFT, en avant et en arrière se transforme très strictes kinks dans la formulation...
--- EDIT ---
Exactement ce qui ne fonctionne pas ?
Le code suivant effectue vers l'avant puis vers l'arrière de la FFT, et tout fonctionne bien comme prévu.
Merci, cela m'a aidé.
comment pouvons-nous appliquer le passe-bas ou passe-haut filtre que si nous voulons supprimer les basses fréquences, nous avons supprimer les fréquences qui sont dans le milieu naturel à la recherche de visualisation de la FFT
cv::DFT_SCALE
drapeau doit être déplacé à l'inverse de la DFT d'appel (deuxième appel)OriginalL'auteur sansuiso