二維影象的DCT變換
阿新 • • 發佈:2018-12-30
二維影象的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變換為其直接對原圖用的dct2。後面的歸一化只是一個imresize.
可以提取的圖片的高頻抑或是低頻資訊。左上為最低頻,右下為最高頻。
該特徵對圖片的清晰度(高頻成分多少)有很好的判別作用,而對於字元識別則無益。