Êý×ÖͼÏñ´¦ÀíÂÛÎÄ
ѧÉúÐÕÃû£º
ѧ ºÅ£º
ѧ Ôº£º ÐÅϢѧ²¿ ר Òµ£º ¼ÆËã»ú¼¼Êõ
2016Äê11ÔÂ
Ç°ÑÔ
±¾ÂÛÎĵıàдΧÈÆËĸöÏîÄ¿£ºÍ¼Ïñ¿ÕÓò/ʱÓò±ä»»¡¢Í¼ÏñÔöÇ¿¡¢È¾É«Ìå¼ÆÊýÓëÌáÈ¡MnistÁ´Âë×é³É¡£ÏîÄ¿µÄ±àд»ùÓÚWindows 7 ²Ù×÷ϵͳ£¬Ê¹ÓÃVS2013×÷Ϊ¿ª·¢»·¾³£¬ÒÔOpenCV×÷ΪÄÚ²¿ºËÐÄ´¦ÀíËã·¨¿â¡£ÏîÄ¿µÄ×îÖÕ×é³É½á¹¹Îª£º
ÔÚ´Ë£¬ÎÒÃDz»ÔÙ˵Ã÷OpenCVµÄÅäÖû·¾³µÄ´î½¨£¬¶øÊÇÖ±½ÓչʾÏîÄ¿µÄºËÐÄ´úÂëÒÔ¼°ËùʹÓõ½µÄ֪ʶ¡£
ÌâÄ¿Ò»
1) ½«¿íΪ2nµÄÕý·½ÐÎͼÏñ£¬ÓÃFFTËã·¨´Ó¿ÕÓò±ä»»µ½ÆµÓò£¬²¢ÓÃƵÓòͼÏñµÄÄ£À´½øÐÐÏÔ
ʾ¡£
2) ʹͼÏñÄÜÁ¿ÖÐÐÄ£¬¶ÔÓ¦µ½¼¸ºÎÖÐÐÄ£¬²¢ÓÃƵÓòͼÏñµÄÄ£À´½øÐÐÏÔʾ¡£ 3) ½«ÆµÓòͼÏó£¬Í¨¹ýFFTÄæ±ä»»µ½¿ÕÓò£¬²¢ÏÔʾ¡£ ½â¾ö·½°¸£º
ÎÒÃÇÔÚÒ»¸öÏîÄ¿ÖÐÍê³ÉÒÔÉÏÈý¸ö²½Öè¡£
#include
//ÒÔ»Ò¶Èģʽ¶ÁÈ¡ÔʼͼÏñ²¢ÏÔʾ
Mat srcImage = imread(\,0); if(srcImage.empty()) {
cout <<\´ò¿ªÍ¼Ïñʧ°Ü£¡\<< endl; return-1; }
imshow(\ÔʼͼÏñ\, srcImage);
//½«ÊäÈëͼÏñÑÓÀ©µ½×î¼ÑµÄ³ß´ç£¬±ß½çÓÃ0²¹³ä
int m = getOptimalDFTSize(srcImage.rows); int n = getOptimalDFTSize(srcImage.cols); //½«Ìí¼ÓµÄÏñËسõʼ»¯Îª0. Mat padded;
copyMakeBorder(srcImage, padded,0, m - srcImage.rows,0, n - srcImage.cols, BORDER_CONSTANT, Scalar::all(0)); //Ϊ¸µÁ¢Ò¶±ä»»µÄ½á¹û(ʵ²¿ºÍÐ鲿)·ÖÅä´æ´¢¿Õ¼ä¡£
//½«planesÊý×é×éºÏºÏ²¢³ÉÒ»¸ö¶àͨµÀµÄÊý×écomplexI
Mat planes[]={ Mat_
CV_32F)};
Mat complexI;
merge(planes,2, complexI); //½øÐо͵ØÀëÉ¢¸µÀïÒ¶±ä»»
dft(complexI, complexI);
//½«¸´Êýת»»Îª·ùÖµ£¬¼´=> log(1 + sqrt(Re(DFT(I))^2 + Im(DFT(I))^2)) split(complexI, planes);// ½«¶àͨµÀÊý×écomplexI·ÖÀë³É¼¸¸öµ¥Í¨µÀÊý×飬