1. 程式人生 > >影象的離散傅立葉變換

影象的離散傅立葉變換

close all, clear, clc
warning off all
img_w = 640; img_h = img_w;
xOfCenter = img_w / 2; yOfCenter = img_h / 2;
%% DFT of oblique rectangle
img_oblique_rect = zeros(img_h, img_w);
% create a oblique(45) rectangle in the matrix
x1 = int32(img_w / 5 * 2); x2 = int32(img_w / 5 * 3);
y1 = int32(img_h / 7);     y2 = int32(img_h / 7 * 6);
img_oblique_rect(y1:y2, x1:x2) = 1;
% Bilinear interpolation
img_oblique_rect = imrotate(img_oblique_rect, 45, 'bilinear','crop'); 
img_oblique_rect = imcomplement(img_oblique_rect);
% DFT using fft2 function
img_after_fft2   = fftshift(fft2(img_oblique_rect));
figure, imshow(img_oblique_rect)
figure, imshow(log(abs(img_after_fft2)), [-1 5])
%% DFT of circle
img_circle = ones(img_h, img_w);
% create a circle in the matrix
r = min(img_w / 6, img_h / 6);
x1 = int32(xOfCenter - r); x2 = int32(xOfCenter + r);
y1 = int32(yOfCenter - r); y2 = int32(yOfCenter + r);
for h = y1:y2
    for w = x1:x2
        if (h - yOfCenter).^2 + (w - xOfCenter).^2 <= r.^2
            img_circle(h, w) = 0;
        end
    end
end
% DFT using fft2 function
img_after_fft2 = fftshift(fft2(img_circle));
figure, imshow(img_circle)
figure, imshow(log(abs(img_after_fft2)), [-1 5])
%% DFT of cross
img_cross = zeros(img_h, img_w);
% create a cross in the matrix 
hemi_w = 2; hemi_l = min(img_w / 10, img_h / 10);
x11 = xOfCenter - hemi_l; x12 = xOfCenter + hemi_l;
y11 = yOfCenter - hemi_w; y12 = yOfCenter + hemi_w;
x21 = xOfCenter - hemi_w; x22 = xOfCenter + hemi_w;
y21 = yOfCenter - hemi_l; y22 = yOfCenter + hemi_l;
img_cross(y11:y12, x11:x12) = 1;
img_cross(y21:y22, x21:x22) = 1;
% Bilinear interpolation
img_cross = imrotate(img_cross, 45, 'bilinear','crop'); 
img_cross = imcomplement(img_cross);
% DFT using fft2 function
img_after_fft2 = fftshift(fft2(img_cross));
figure, imshow(img_cross)
figure, imshow(log(abs(img_after_fft2)), [-1 5])

下面的程式碼:

close all, clear, clc
warning off all
img_w = 640; img_h = img_w;
xOfCenter = img_w / 2; yOfCenter = img_h / 2;
%% DFT of oblique rectangle
img_oblique_rect = zeros(img_h, img_w);
% create a oblique(45) rectangle in the matrix
x1 = int32(img_w / 5 * 2); x2 = int32(img_w / 5 * 3);
y1 = int32(img_h / 7);     y2 = int32(img_h / 7 * 6);
img_oblique_rect(y1:y2, x1:x2) = 1;
% Bilinear interpolation
img_oblique_rect = imrotate(img_oblique_rect, 45, 'bilinear','crop'); 
img_oblique_rect = imcomplement(img_oblique_rect);
% DFT using fft2 function
img_after_fft2   = fftshift(fft2(img_oblique_rect));
figure, imshow(img_oblique_rect)
figure, imshow(log(abs(img_after_fft2)), [-1 5])
%% DFT of circle
img_circle = ones(img_h, img_w);
% create a circle in the matrix
[f1, f2] = freqspace(min(img_w, img_h), 'meshgrid');
r = sqrt(f1 .^ 2 + f2 .^ 2);
img_circle( r < -0.3 | r > 0.3) = 0;
img_circle = imcomplement(img_circle);
% DFT using fft2 function
img_after_fft2 = fftshift(fft2(img_circle));
figure, imshow(img_circle)
figure, imshow(log(abs(img_after_fft2)), [-1 5])
%% DFT of cross
img_cross = zeros(img_h, img_w);
% create a cross in the matrix 
hemi_w = 2; hemi_l = min(img_w / 10, img_h / 10);
x11 = xOfCenter - hemi_l; x12 = xOfCenter + hemi_l;
y11 = yOfCenter - hemi_w; y12 = yOfCenter + hemi_w;
x21 = xOfCenter - hemi_w; x22 = xOfCenter + hemi_w;
y21 = yOfCenter - hemi_l; y22 = yOfCenter + hemi_l;
img_cross(y11:y12, x11:x12) = 1;
img_cross(y21:y22, x21:x22) = 1;
% Bilinear interpolation
img_cross = imrotate(img_cross, 45, 'bilinear','crop'); 
img_cross = imcomplement(img_cross);
% DFT using fft2 function
img_after_fft2 = fftshift(fft2(img_cross));
figure, imshow(img_cross)
figure, imshow(log(abs(img_after_fft2)), [-1 5])


相關推薦

opencv學習實現簡單的影象離散變換

離散傅立葉變換就是將影象從空間域轉換到頻域,這一轉換基本原理為: 任一函式都可以表示成無數個正弦和餘弦函式的和的形式,二維影象的傅立葉變換可用公式表示為: 其中,f是空間域,F是頻域,轉換之後的頻域值是複數,因此顯示傅立葉變換之後的結果需要使用實物影象加虛數影象或者幅度影

c語言數字影象處理(六):二維離散變換

基礎知識 複數表示 C = R + jI 極座標:C = |C|(cosθ + jsinθ) 尤拉公式:C = |C|ejθ 有關更多的時域與複頻域的知識可以學習複變函式與積分變換,本篇文章只給出DFT公式,性質,以及實現方法 二維離散傅立葉變換(DFT) 其中f(x,y)為原影象,F(u,

離散變換影象處理中的應用_學習

1、為什麼要進行傅立葉變換,其物理意義是什麼? 傅立葉原理表明:任何連續測量的時序或訊號,都可以表示為不同頻率的正弦波訊號的無限疊加。而根據該原理創立的傅立葉變換演算法利用直接測量到的原始訊號,以累加方式來計算該訊號中不同正弦波訊號的頻率、振幅和相位。 和傅立葉

OpenCV中對影象進行二維離散變換

#include<opencv2/opencv.hpp> #include <highgui.h> #include <iostream> #include <cv.h> #include <opencv2/core/c

數字影象處理筆記——二維離散變換(2D Discrete Fourier Transform)

二維傅立葉變換 我們先來看看一維情況的傅立葉變換。在訊號系統中講過連續時間的傅立葉變換和離散時間的傅立葉變換,連續時間傅立葉變換在頻譜上時非週期的,離散時間傅立葉變換(DTFT)在頻譜上是週期的。在DSP中講了離散傅立葉變換,它的思想是將時域週期化,反映在頻域上就是對連續的週期頻譜進行抽樣

影象變換(二維離散變換

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

影象處理-離散變換-數字影象處理第三版第四章內容

  影象傅立葉變換方法有很多,可以通過空間光調製器輸入影象後在通過平行光照明經過傅立葉變換透鏡進行傅立葉變換,另一個方法就是利用計算機進行傅立葉變換,其中傅立葉變換有兩種演算法一種是DFT還有一種是FFT(快速傅立葉變換)。   首先我介紹一下影象的定義,影象是怎麼去得到的

數字影象處理-離散變換(opencv3+C++顯示)

參考: http://daily.zhihu.com/story/3935067 http://blog.csdn.net/keith_bb/article/details/53389819 在學習訊號與系統或通訊原理等課程裡面可能對傅立葉變換有了一定的瞭解。我們知道傅立葉變換是把一個訊號從時域變換

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

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

影象離散變換

close all, clear, clc warning off all img_w = 640; img_h = img_w; xOfCenter = img_w / 2; yOfCenter = img_h / 2; %% DFT of oblique rectang

Python 實現影象快速變換離散餘弦變換

影象的正交變換在數字影象的處理與分析中起著很重要的作用,被廣泛應用於影象增強、去噪、壓縮編碼等眾多領域。本文手工實現了**二維離散傅立葉變換**和**二維離散餘弦變換**演算法,並在多個影象樣本上進行測試,以探究二者的變換效果。 ## 1. 傅立葉變換 ### 實驗原理 對一幅影象進行**離散傅立葉變換

離散變換(DFT)和快速變換(FFT)原理與實現

目錄 1、影象變換 2、離散傅立葉變換(Discrete Fourier Transform) 3、DFT性質 4、DFT與數字影象處理 5、FFT-快速傅立葉變換 6、DFT與FFT的演算法實現 1. 影象變換 — —數學領域中有很多種變換,如傅立葉變換、拉普拉斯變

拉普拉斯變換變換;Z變換離散時間變換(DTFT);離散變換(DFT)之間的關係及理解

頻域與時域之間的關係是: 時域離散——頻域週期; 時域週期——頻域離散; 對於連續時間訊號 1.拉普拉斯變換: X (

Python中使用numpy對序列進行離散變換DFT

看了大佬對DFT的介紹後感覺離散傅立葉變換對序列訊號的處理還是很有用的, 總結下來就是DFT可以增加有限長序列的長度來提高物理解析度。 自己用python中的numpy庫實現了一下: 其中繪相簿的使用請參考:Python繪圖 將有效長度為4的單位序列,變換為長度16的DFT譜線。

補零與離散變換的解析度

     離散傅立葉變換(DFT)的輸入是一組離散的值,輸出同樣是一組離散的值。在輸入訊號而言,相鄰兩個取樣點的間隔為取樣時間Ts。在輸出訊號而言,相鄰兩個取樣點的間隔為頻率解析度fs/N,其中fs為取樣頻率,其大小等於1/Ts,N為輸入訊號的取樣點數。這也就是說,DF

( 五 )影象變換

一,實驗原理 影象既能在空間域處理,也能在頻率域處理。把影象資訊從空域變換到頻域,可以更好地分析、加工和處理 二維離散傅立葉正變換的表示式為 逆變換為: 維離散傅立葉變換具有若干性質,如:線性性、平移性、可分離性、週期性、共軛對稱性、旋轉不變性等。 可利用離

二維離散變換以及濾波應用

一、二維離散傅立葉變換 二維離散傅立葉變換的公式:F(u,v)=1MN[∑m=0M−1∑n=0N−1f(m,n)WMumWNvn]∙RMN(u,v) F(u,v) = \frac{1}{MN}[\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f

《OpenCV3程式設計入門》——5.5.8 離散變換綜合示例程式(附程式碼)

綜合《OpenCV3程式設計入門》——5.5 離散傅立葉變換原理和 《OpenCV3程式設計入門》——5.5.2 離散傅立葉變換相關函式詳解兩篇文章對離傅立葉變換的詳細介紹,本篇將展示實現離散傅立葉變化的示例程式(本篇所涉及的所有知識均在上述兩篇博文裡有詳細解釋,請參考): //--------

《OpenCV3程式設計入門》——5.5.2 離散變換相關函式詳解

目錄 1、dft()函式 2、返回DFT最優尺寸大小:getOptimalDFTSize()函式 3、擴充影象邊界:copyMakeBorder()函式 4、計算二維向量的幅值:magnitude()函式 6、矩陣歸一化:normalize()函式 1、dft()函式

《OpenCV3程式設計入門》——5.5 離散變換原理

離散傅立葉變換(Discrete Fourier Transform,縮寫為DFT)指傅立葉變換在時域和頻域上都呈現離散的形式,將時域訊號的取樣變換為在離散時間傅立葉變換(DTFT)頻域的取樣。 形式上,變換兩端(時域和頻域)的序列是有限長的,而實際上這兩組序列都應該被認為是離散週期訊號的主值序