最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Opencv實(shí)現(xiàn)傅里葉變換

 更新時(shí)間:2021年10月11日 10:26:04   作者:Ethan_Lei_Pro  
這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)傅里葉變換的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

傅里葉變換將圖像分解成其正弦和余弦分量,它將圖像由空域轉(zhuǎn)換為時(shí)域。任何函數(shù)都可以近似的表示為無數(shù)正弦和余弦函數(shù)的和,傅里葉變換就是實(shí)現(xiàn)這一步的,數(shù)學(xué)上一個(gè)二維圖像的傅里葉變換為:

公式中,f是圖像在空域的值,F(xiàn)是頻域的值。轉(zhuǎn)換的結(jié)果是復(fù)數(shù),但是不可能通過一個(gè)真實(shí)圖像和一個(gè)復(fù)雜的圖像或通過大小和相位圖像去顯示這樣的一個(gè)圖像。然而,在整個(gè)圖像處理算法只對(duì)大小圖像是感興趣的,因?yàn)檫@包含了所有我們需要的圖像幾何結(jié)構(gòu)的信息。

可通過以下幾步顯示一副傅里葉變換后的圖像

1、將圖像擴(kuò)展到它的最佳尺寸,DFT(直接傅里葉變換)的性能依賴于圖片的尺寸,當(dāng)圖像是2,3,5的倍數(shù)時(shí)往往是最快的。因此,為了達(dá)到最優(yōu)性能通常采用墊邊界值的方法,得到一個(gè)最佳的尺寸。

2、為傅立葉變換結(jié)果的實(shí)部和虛部分配存儲(chǔ)空間。傅里葉變換的結(jié)果是一個(gè)復(fù)數(shù),這意味著每幅圖的結(jié)果都有一個(gè)實(shí)部和虛部,此外,頻域范圍遠(yuǎn)遠(yuǎn)大于它對(duì)應(yīng)的空間范圍。因此,我們這些通常至少以一個(gè)浮點(diǎn)數(shù)格式存儲(chǔ)這些數(shù)值。因此,我們會(huì)將我們的輸入圖像轉(zhuǎn)換為這種類型并且擴(kuò)展它與另一通道存放復(fù)數(shù)值

3、進(jìn)行傅里葉變換。

4、將復(fù)數(shù)轉(zhuǎn)換為幅值,DFT的幅值由以下公式得出:

5、切換到對(duì)數(shù)刻度。對(duì)圖像進(jìn)行對(duì)數(shù)尺度的縮放,結(jié)果證明,傅立葉系數(shù)矩陣的動(dòng)態(tài)范圍太大,無法顯示在屏幕上,我們無法通過這樣去觀察一些小的和高的變化值。因此那些高的數(shù)值將轉(zhuǎn)化成白點(diǎn)而小的數(shù)值會(huì)變成黑點(diǎn),使用灰度值進(jìn)行可視化,我們可以將線性刻度轉(zhuǎn)換為對(duì)數(shù)刻度,以便于觀察。

6、剪切和重分布幅度圖象,第一步我們擴(kuò)展了圖像,這里我們?nèi)サ魯U(kuò)展的那部分值,基于可視化的目的,我們還可以重新排列結(jié)果的象限,使原點(diǎn)(0,0)對(duì)應(yīng)于與圖像中心

7、歸一化。目前得到的幅值圖像仍然太大,超出了顯示的范圍,歸一化這范圍內(nèi)的值,可以進(jìn)一步達(dá)到可視化的目的

實(shí)現(xiàn)程序

void _DFT(){
 //1以灰度模式讀取原圖像并顯示
 Mat srcImage = imread("miFan.jpg",0);
 if (!srcImage.data){ cout << "Error\n"; }
 imshow("原圖像", srcImage);

 //2將輸入圖像擴(kuò)展到最佳尺寸,邊界用0補(bǔ)充
 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));

 //3為傅里葉變換的結(jié)果(實(shí)部和虛部)分配存儲(chǔ)空間
 //將數(shù)組組合合并為一個(gè)多通道數(shù)組
 Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) };
 Mat complexI;
 merge(planes, 2, complexI);

 //4進(jìn)行傅里葉變換
 dft(complexI, complexI);

 //5將復(fù)數(shù)轉(zhuǎn)換為幅值,即=> log(1 + sqrt(Re(DFT(I))^2 + Im(DFT(I))^2))
 //將多通道數(shù)組分離為幾個(gè)單通道數(shù)組
 split(complexI, planes);//planes[0] = Re(DFT(I), planes[1] = Im(DFT(I))
 magnitude(planes[0], planes[1], planes[0]);
 Mat magImage = planes[0];

 //6進(jìn)行對(duì)數(shù)尺度縮放
 magImage += Scalar::all(1);
 log(magImage, magImage);//求自然對(duì)數(shù)

 //7剪切和重分布幅度圖象限
 //若有奇數(shù)行或奇數(shù)列,進(jìn)行頻譜剪裁
 magImage = magImage(Rect(0, 0, magImage.cols&-2, magImage.rows&-2));
 //重新排列傅立葉圖像中的象限,使得原點(diǎn)位于圖像中心 
 int cx = magImage.cols / 2;
 int cy = magImage.rows / 2;
 Mat q0(magImage, Rect(0, 0, cx, cy));
 Mat q1(magImage, Rect(cx, 0, cx, cy));
 Mat q2(magImage, Rect(0,cy,cx,cy));
 Mat q3(magImage, Rect(cx,cy,cx,cy));
 //交換象限(左上與右下進(jìn)行交換)
 Mat tmp;
 q0.copyTo(tmp);
 q3.copyTo(q0);
 tmp.copyTo(q3);
 //交換象限(右上與左下進(jìn)行交換)
 q1.copyTo(tmp);
 q2.copyTo(q1);
 tmp.copyTo(q2);

 //8歸一化,用0到1的浮點(diǎn)值將矩陣變換為可視的圖像格式
 normalize(magImage, magImage, 0, 1, CV_MINMAX);

 //9顯示
 imshow("頻譜增幅", magImage);

 waitKey();
}

傅里葉變換后的圖片

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++實(shí)現(xiàn)utf8字符串和gbk字符串互轉(zhuǎn)

    C++實(shí)現(xiàn)utf8字符串和gbk字符串互轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)utf8字符串和gbk字符串轉(zhuǎn)換的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • C++中virtual繼承的深入理解

    C++中virtual繼承的深入理解

    本篇文章是對(duì)C++中的virtual繼承進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 基于Matlab實(shí)現(xiàn)野狗優(yōu)化算法的示例代碼

    基于Matlab實(shí)現(xiàn)野狗優(yōu)化算法的示例代碼

    野狗優(yōu)化算法(Dingo?Optimization?Algorithm,?DOA)模仿澳大利亞野狗的社交行為。DOA算法的靈感來源于野狗的狩獵策略,即迫害攻擊、分組策略和食腐行為。本文將通過Matlab實(shí)現(xiàn)這一算法,感興趣的可以了解一下
    2022-04-04
  • C語言一看就懂的指針與結(jié)構(gòu)體介紹

    C語言一看就懂的指針與結(jié)構(gòu)體介紹

    指針提供了對(duì)地址操作的一種方法,因此,使用指針可使得C語言能夠更高效地實(shí)現(xiàn)對(duì)計(jì)算機(jī)底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。C數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是C編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng)
    2022-04-04
  • 詳解C語言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù)

    詳解C語言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù)

    這篇文章主要介紹了詳解C語言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù),注意這三個(gè)函數(shù)雖然看起來相似但實(shí)際功能卻大相徑庭!需要的朋友可以參考下
    2015-08-08
  • Cocos2d-x學(xué)習(xí)入門之HelloWorld程序

    Cocos2d-x學(xué)習(xí)入門之HelloWorld程序

    這篇文章主要介紹了Cocos2d-x學(xué)習(xí)入門之HelloWorld程序,是學(xué)習(xí)Cocos2d-x的入門程序,其重要性不言而喻,需要的朋友可以參考下
    2014-08-08
  • C++設(shè)計(jì)模式之代理模式(Proxy)

    C++設(shè)計(jì)模式之代理模式(Proxy)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之代理模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C語言循環(huán)隊(duì)列與用隊(duì)列實(shí)現(xiàn)棧問題解析

    C語言循環(huán)隊(duì)列與用隊(duì)列實(shí)現(xiàn)棧問題解析

    循環(huán)隊(duì)列又叫環(huán)形隊(duì)列,是一種特殊的隊(duì)列。循環(huán)隊(duì)列解決了隊(duì)列出隊(duì)時(shí)需要將所有數(shù)據(jù)前移一位的問題,本篇帶你一起看看循環(huán)隊(duì)列的問題和怎樣用隊(duì)列實(shí)現(xiàn)棧
    2022-04-04
  • C語言數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)分配實(shí)現(xiàn)串

    C語言數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)分配實(shí)現(xiàn)串

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)分配實(shí)現(xiàn)串的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)中動(dòng)態(tài)分配實(shí)現(xiàn)串的實(shí)例,需要的朋友可以參考下
    2017-10-10
  • C語言異常處理機(jī)制案例講解

    C語言異常處理機(jī)制案例講解

    這篇文章主要介紹了C語言異常處理機(jī)制案例講解,本文講解了異常處理機(jī)制所用的函數(shù)和具體的代碼實(shí)現(xiàn)等,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

会宁县| 米林县| 手游| 鄂托克前旗| 广元市| 襄垣县| 霍林郭勒市| 赤峰市| 缙云县| 富阳市| 饶河县| 绥中县| 大兴区| 白沙| 油尖旺区| 兰坪| 龙陵县| 威信县| 江西省| 烟台市| 随州市| 齐河县| 河间市| 宜君县| 十堰市| 榆社县| 南华县| 吉水县| 甘孜| 丹棱县| 洛宁县| 天气| 义马市| 出国| 河南省| 徐水县| 会同县| 山东| 宁安市| 巴青县| 扎兰屯市|