dct算法matlab
① 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]