當前位置:首頁 » 操作系統 » dct演算法matlab

dct演算法matlab

發布時間: 2024-08-15 13:41:33

① dct2是什麼,在matlab里

函數dct2:是MATLAB圖像處理工具箱實現離散餘弦變的一種方法,用一個基於FFT的演算法來提高當輸入較大的方陣時的計算速度。

語法
B=dct2(A)
B=dct2(A,m,n)
B=dct2(A,[m,n])
描述
B=dct2(A)返回A的二維離散餘弦變換。矩陣B和A的大小一樣,並包含離散餘弦變換系數
B=dct2(A,m,n)是在變換以前用0對矩陣A進行填充,填充到m*n的大小。如果m或者n比A相應的小,dct2會將A縮短。
B=dct2(A,[m,n])同上面一樣。
支持多類
A既可以是數字型的,也可以是邏輯型的,返回的矩陣B是雙精度的。

② matlab 計算 DCT

Matlab自帶這個函數,使用方法:

y = dct(x)
y = dct(x,n)

舉例:

x = (1:100) + 50*cos((1:100)*2*pi/40);
X = dct(x);
[XX,ind] = sort(abs(X)); ind = fliplr(ind);
i = 1;
while (norm([X(ind(1:i)) zeros(1,100-i)])/norm(X)<.99)
i = i + 1;
end
i =
3

③ MATLAB「錯誤使用dct2 輸入參數太多」怎麼解決

MATLAB「錯誤使用dct2 輸入參數太多」,應該這樣處理:

由於dct2(I),要求I為(m×n)二維矩陣,而題主得到的I為(m×n×k)三維矩陣,所以使用dct2()函數前,必須將圖像轉換為灰度圖像,即

I = rgb2gray(RGB);

因此,題主的代碼應這樣來改:

RGB = imread('p1.jpg');

I = rgb2gray(RGB);

D = dct2(I); %DCT變換

D1 = idct2(D); %逆變換

subplot(1,2,1);imshow(I);

subplot(1,2,2);imshow(uint8(D1));

④ MATLAB編寫基於離散正弦變換(DCT)的圖像壓縮程序

I=imread('cameraman.tif')
I=im2double(I) %轉換圖像矩陣為雙精度型。
T=dctmtx(8) %產生二維DCT變換矩陣
%計算二維DCT,矩陣T及其轉置是DCT函數P1*X*P2的參數
B=blkproc(I,[8,8],'P1*x*P2',T,T') %二值掩模,用來壓縮DCT系數,只留下DCT系數中左上角的10個
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 ]
B2=blkproc(B,[8 8],'P1.*x',mask) %只保留DCT變換的10個系數
I2=blkproc(B2,[8 8],'P1*x*P2',T',T) %重構圖像
subplot(1,2,1)
imshow(I)
title('原始圖像');
subplot(1,2,2)
imshow(I2);
title('壓縮圖像');
我這個程序也是改了後的,不過我運行過了,圖片壓縮效果都能出來,就是壓縮比沒有變小,我也不知道為什麼,如果有人給決絕了麻煩通知一下,我郵箱[email protected]

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:613
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:945
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372