1. 程式人生 > >二維影象的DCT變換

二維影象的DCT變換

二維影象的DCT變換

2015年10月13日 18:37:21 及時澍雨Timely 閱讀數:12415 標籤: 影象處理 DCT 二維 餘弦變換 頻率域 更多

個人分類: Image Processing

原文為http://blog.csdn.net/lvhao92/article/details/49099129

DCT變換公式

假設影象為f(i,j)

,則其DCT變換F(u,v)

為:

F(u,v)=c(u)c(v)∑N−1i=0∑N−1j=0f(i,j)cos[(i+0.5)πNu]cos[(j+0.5)πNv]


其中,

c(u)=⎧⎩⎨⎪⎪⎪⎪1N‾‾‾√,u=02N‾‾‾√,u≠0

 


DCT變換的矩陣形式

F=AfAT


其中,
A(i,j)=c(i)cos[(j+0.5)πNi]

 

二維DCT變換就是將二維影象從空間域轉換到頻率域。形象的說,就是計算出影象由哪些二維餘弦波構成,計算出的結果為c(u ,v), 其中u為二維波的水平方向頻率,v為二維波的垂直方向頻率; 最終會計算出很多的c(u,v) ; 每一個c稱為一個DCT係數,代表的是頻率為(u,v)的二維波的振幅(或者能量),所有這些二維波的疊加就是那個原始的圖片。


DCT變換的MATLAB程式碼

matlab中用的是 dct2

這個函式

下面的函式是描述上文的二維DCT變換

clear;
clc;
X=round(rand(4)*100);%隨機生成的資料
A=zeros(4);%變換矩陣
for i=0:3
    for j=0:3
        if i==0
            a=sqrt(1/4);
        else
            a=sqrt(2/4);
        end
    A(i+1,j+1)=a*cos(pi*(j+0.5)*i/4);
    end
end
Y=A*X*A';%DCT變換
YY=dct2(X);%用matlab中的函式進行DCT變換
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

比如輸入一張圖片:
輸入是車牌影象的DCT變換

DCT變換為其直接對原圖用的dct2。後面的歸一化只是一個imresize.

可以提取的圖片的高頻抑或是低頻資訊。左上為最低頻,右下為最高頻。

該特徵對圖片的清晰度(高頻成分多少)有很好的判別作用,而對於字元識別則無益。