当前位置:首页 » 操作系统 » 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 浏览:612
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