example 1(use real image):
a=imread('class_f.png');
imshow(a) %a is unit8(0,255)
c=dct2(a); %進行余弦變換
figure;
b=log(abs(c));
imshow(b)
colormap(jet(64)); %顯示為64級灰度
colorbar; %顯示顏色條,顯示變換後的係數分布
c(abs(c)<10)=0; %將dct變換後的系數值小於10的元素設為0
%e=idct2(c);
d=idct2(c)./255; %對dct變換值歸一化,進行余弦反變換???
figure;
imshow(d) ;
% imshow(uint8(e)); is the same as d=idct2(c)./255
% imshow(e,); is the same as d=idct2(c)./255
ff=abs(c)<10; %compute the number of elements which are smaller than 10
sum(sum(ff)) %result:56632
gg=abs(c)>10; %compute the number of elements which are larger than 10
sum(sum(gg)) %result:16025
example 2(use artifical image):
constant image(low frequency image)
a=ones(5);
b=dct2(a)
a =1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
after dct transformation
5 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
c=idct2(b) %reconstruction according to b
random image(high frequency image)
a=randn(5)
b=dct2(a)
a =-0.4326 1.1909 -0.1867 0.1139 0.2944
-1.6656 1.1892 0.7258 1.0668 -1.3362
0.1253 -0.0376 -0.5883 0.0593 0.7143
0.2877 0.3273 2.1832 -0.0956 1.6236
-1.1465 0.1746 -0.1364 -0.8323 -0.6918
ans =
0.5853 -0.5033 -1.3505 -1.2524 -0.3519
0.2492 0.1007 -0.4273 0.1201 -1.5079
-0.8317 0.4357 -0.4183 -0.5794 -0.4022
1.7697 -0.3482 1.3882 -0.3871 1.4934
-1.0525 0.1744 1.7976 0.0521 -0.4997
b(abs(b)<0.1)=0; is threshold
c=idct2(b);//reconstruction
關於DCT變換的理解 0
首先,dct變換是jpeg用的壓縮方式,學習的時候以jpeg影象壓縮流程為展開來學,脈絡比較清晰。1.jpeg影象壓縮流程,dct演算法 和 編碼 是兩個難點。這篇文章介紹了每個步驟 2.dct部分 分塊 dct變換 量化 比較難理解的知識點 基函式 1個二維變換 2個一維變換 用矩陣表示二維變換 ...
DCT變換的一些知識
dct將運動補償誤差或原畫面資訊塊轉換成代表不同頻率分量的係數集,這有兩個優點 其一,訊號常將其能量的大部分集中於頻率域的1個小範圍內,這樣一來,描述不重要的分量只需要很少的位元數 其二,頻率域分解映 人類視覺系統的處理過程,並允許後繼的 量化過程滿足其靈敏度的要求。關於這一點在我手頭的教程中有詳盡...
幾個簡單的排序演算法
排序演算法 include using namespace std void insertsort int r,int n 直接插入 void shellsort int r,int n shell排序 void selectsort int r,int n 直接選擇排序 void bubbleso...