1. 程式人生 > >影象傅立葉變換與逆變換OpenCV實現

影象傅立葉變換與逆變換OpenCV實現

程式碼步驟:
讀入影象->傅立葉變換->傅立葉逆變換->讀取影象

int main()
{    
    cv::Mat img = cv::imread("lena.jpg");
    DFTtransform(img);
    cv::imshow("DFT img", img);
    cv::waitKey();
    system("pause");
    return 0;
}
//DFTtransform實現
void DFTtransform(cv::Mat& image)
{
    image.convertTo(image, CV_32F);
    std::vector
<cv::Mat> channels; split(image, channels); //分離RGB通道 cv::Mat image_B = channels[0]; //expand input image to optimal size int m1 = cv::getOptimalDFTSize(image_B.rows); //選取最適合做fft的寬和高 int n1 = cv::getOptimalDFTSize(image_B.cols); cv::Mat padded; //填充0 cv::copyMakeBorder(image_B, padded, 0
, m1 - image_B.rows, 0, n1 - image_B.cols, cv::BORDER_CONSTANT, cv::Scalar::all(0)); cv::Mat planes[] = { cv::Mat_<float>(padded), cv::Mat::zeros(padded.size(), CV_32F) }; cv::Mat complexI; cv::merge(planes, 2, complexI); //planes[0], planes[1]是實部和虛部 cv::dft(complexI, complexI, cv::DFT_SCALE | cv::DFT_COMPLEX_OUTPUT); cv::split(complexI, planes); //定義幅度譜和相位譜
cv::Mat ph, mag, idft; cv::phase(planes[0], planes[1], ph); cv::magnitude(planes[0], planes[1], mag); //由實部planes[0]和虛部planes[1]得到幅度譜mag和相位譜ph /* 如果需要對實部planes[0]和虛部planes[1],或者幅度譜mag和相位譜ph進行操作,在這裡進行更改 */ cv::polarToCart(mag, ph, planes[0], planes[1]); //由幅度譜mag和相位譜ph恢復實部planes[0]和虛部planes[1] cv::merge(planes, 2, idft); cv::dft(idft, idft, cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT); image_B = idft(cv::Rect(0, 0, image.cols & -2, image.rows & -2)); image_B.copyTo(channels[0]); merge(channels, image); image.convertTo(image, CV_8U); }

相關推薦

影象變換變換OpenCV實現

程式碼步驟: 讀入影象->傅立葉變換->傅立葉逆變換->讀取影象 int main() { cv::Mat img = cv::imread("lena.jpg"); DFTtransform(img);

影象變換

1傅立葉變換物理意義 影象的頻率是表徵影象中灰度變化劇烈程度的指標,是灰度在平面空間上的梯度。如:大面積的沙漠在影象中是一片灰度變化緩慢的區域,對應的頻率值很低;而對於地表屬性變換劇烈的邊緣區域在影象中是一片灰度變化劇烈的區域,對應的頻率值較高。傅立葉變換在實際中有非常明顯的物理意義,設f是

影象變換的物理意義(轉)

最近看了opencv中的傅立葉變換,對測試結果很是懵逼,不知道變換結果到底有什麼意義,今天看到這篇文章,稍微有點明白了,在這裡轉來記錄一下(如果侵犯了原作者版權,請及時告知) 影象的頻率是表徵影象中灰度變化劇烈程度的指標,是灰度在平面空間上的梯 度。如:

影象變換(二維離散變換

影象傅立葉變換 二維離散傅立葉變換是將影象從空間域轉至頻域,在影象增強、影象去噪、影象邊緣檢測、影象特徵提取、影象壓縮等等應用中都起著極其重要的作用。理論基礎是任意函式都可以表示成正弦函式的線性組合的形式。公式如下 逆變換公式如下 令 R(u,v) 和 I(u,c) 分別表示 F

影象處理複習2——影象變換和頻域濾波

影象處理複習 CH4 基本影象變換 4.1 DFT (1)一維DFT 一維DFT: F(u)=1N∑N−1x=0f(x)e−j2πuxN,x=0,1,…,N−1 其逆變換: f(x)=∑N−1u=0F(u)ej2πuxN,u=0,1

opencv學習(十五)之影象變換dft

在學習訊號與系統或通訊原理等課程裡面可能對傅立葉變換有了一定的瞭解。我們知道傅立葉變換是把一個訊號從時域變換到其對應的頻域進行分析。如果有小夥伴還對傅立葉變換處於很迷糊的狀態,請戳這裡,非常通俗易懂。而在影象處理中也有傅立葉分析的概念,我這裡給出在其官方指導檔案

如何理解 影象變換的頻譜圖 如何理解 影象變換的頻譜圖

原 如何理解 影象傅立葉變換的頻譜圖 2018年09月18日 16:43:00 Ring__Rain 閱讀數:965

案例解釋影象變換的幅度譜和相位譜的以及反變換

目的:讀取影象 A(lena.tiff)和B(rice.tif),顯示這兩幅影象,對影象作傅立葉變換,顯示影象的傅立葉幅度譜和相位譜。做傅立葉逆變換,顯示重建影象。 影象的頻率是表徵影象中灰度變

如何理解 影象變換的頻譜圖

很多人都不瞭解影象(二維)頻譜中的每一點究竟代表了什麼,有什麼意義? 一句話:二維頻譜中的每一個點都是一個與之一一對應的二維正弦/餘弦波。 常言道,百聞不如一見,人腦對於影象的理解能力是非常發達的。換句話說,一副影象(不論是灰度的影象還是彩色影象)所提供的資訊是顯

【高等數學】淺談級數變換的理解(二)

目錄 有助理解傅立葉變換的幾個圖: 三角函式的疊加,如何得到方波:                   (時域上觀察) 時域特徵轉換到頻域特徵: 雜亂的週期波形訊號(如語音)可以轉換為規則的三角波型號的疊加: 1.傅立葉級數

matlab練習程式(影象變換,幅度譜,相位譜)

cl;img=imread('15.bmp');%img=double(img);f=fft2(img); %傅立葉變換f=fftshift(f); %使影象對稱r=real(f); %影象頻域實部i=imag(f); %影象頻域虛部margi

CUDFF 影象變換

cudff 快速傅立葉變換 利用cuda進行fft變換時,會有一些引數設定的規則,一下舉例進行說明: float *h_Data; //"h_": host,表示CPU記憶體 float *d_Data; //"d_":device,表示GPU記憶體 fComplex

變換影象處理

本文主要介紹的是傅立葉變換在影象處理當中的應用。本文參考:http://blog.csdn.net/masibuaa/article/details/6316319 第一部分介紹傅立葉變換。傅立葉變換

Python下opencv使用筆記(十)(影象頻域濾波變換

前面曾經介紹過空間域濾波,空間域濾波就是用各種模板直接與影象進行卷積運算,實現對影象的處理,這種方法直接對影象空間操作,操作簡單,所以也是空間域濾波。 頻域濾波說到底最終可能是和空間域濾波實現相同的功能,比如實現影象的輪廓提取,在空間域濾波中我們使用一個拉普拉

二維陣列、影象變換(附加反變換濾波演算法)

FFT演算法原理就不解釋了,可以搜尋一下百度即可。 在二維變換中,需要對矩陣進行一行一行,一列一列的FFT變換,具體公式為: F(u,v)=sum(i=0->M-1)sum(j=0->N-1)f(i, j) * exp(-j2πui/M-j*2π

數字影象處理成長之路4: C語言離散變換(DFT)

這幾天一直學習傅立葉變換,看了很多國內外資料,網上講原理的很多,到了程式實現這塊大多是Matlab,opencv等,這些軟體的api對於我們理解DFT在計算機中的實現並沒有多大幫助。於是想用C/C++實現DFT,經過不斷的閱讀與程式設計實驗,最終程式有了還算滿意

OpenCV下利用變換變換實現影象卷積演算法,並附自己對於卷積核/模板核算子的理解!

學過訊號與系統的人都知道,卷積運算一般是轉化成頻率乘積再求逆來計算,因為這樣可以減少計算量,提高程式碼的效率。 影象卷積操作廣泛應用在影象濾波技術中。 影象卷積運算中一個重要概念是卷積核算子,它是模板核算子的一種,模板核算子實際上就是一個視窗矩陣,用這個視窗按畫素點滑動去

Python下opencv使用筆記(影象頻域濾波變換

本文轉載自  https://blog.csdn.net/on2way/article/details/46981825首先謝謝原創博主了,這篇文章對我幫助很大,記錄下方便再次閱讀。前面曾經介紹過空間域濾波,空間域濾波就是用各種模板直接與影象進行卷積運算,實現對影象的處理,這

影象頻域濾波變換

1、頻率濾波 影象的空間域濾波:用各種模板直接與影象進行卷積運算,實現對影象的處理,這種方法直接對影象空間操作,操作簡單。影象處理不僅可以在空間域進行還可以在頻率域進行,把空間域的影象開窗卷積形式,變換得到頻率域的矩陣點乘形式得到比較好的效果。影象頻域濾波,先把影象轉換到頻域空間,然後對不同的頻率點進行濾波,

3. OpenCV-Python——影象梯度演算法、邊緣檢測、影象金字塔輪廓檢測、直方圖變換

一、影象梯度演算法 1、影象梯度-Sobel運算元    dst = cv2.Sobel(src, ddepth, dx, dy, ksize) ddepth:影象的深度 dx和dy分別表示水平和豎直方向 ksize是Sobel運算元的大小 1 # ****************