关于DCT变换
matlab里这段程序,dct逆变换重构图像,为啥会有横条纹出现呢?拜托各位大佬了!
程序清单:
filename = 'D:/Program Files/MATLAB/R2016b/bin/tuxiangshiyan/lena.img';
data = img_display(filename);
parameters(data);
cal_PSNR(data);
function [data]=img_display(filename) %显示图片程序
fid = fopen(filename,'r');
data = (fread(fid,[256,256],'uint8'))';
imagesc(data,[0 255]);
colormap(gray);
axis image
end
function parameters(data) %计算相关参数
[M,N] = size(data) %图像的大小
data = uint8(data);
ave = mean(mean(data)) %灰度平均值
g = imnoise(data,'salt & pepper',0.05);
imagesc(g,[0 255]);
colormap(gray);
axis image
ave2 = mean(mean(g));
I = (data-ave).*(g-ave2);
I2 = (data-ave).*(data-ave);
Cfg = mean(mean(I)) %协方差值
Cff = mean(mean(I2)) %图像的方差
SD = sqrt(Cff) %灰度标准差
Cgg = mean(mean((g-ave2).*(g-ave2)));
rfg = Cfg/sqrt(Cff*Cgg) %相关系数
end
function cal_PSNR(data)
[M,N] = size(data);
T = dctmtx(4);
data1 = im2double(data);
B = blkproc (data1,[4 4],'P1*x*P2',T,T');
mask = [1 1 1 1
1 1 1 0
1 0 0 0
0 0 0 0];
B2 = blkproc(B, [4 4], 'P1.*x',mask);
data2= blkproc(B2,[4 4],'P1.*x*P2',T',T);
figure(2);
%imshow(data2);
imagesc(data2);
colormap(gray);
axis image
PSNR = 10*log10((M*N*(255^2))/sum(sum(data2-data1)))
end





...全文
相关推荐
基于DCT变换的数字水印算法
本文主要探讨的是利用离散余弦变换(DCT)实现的一种数字水印算法,同时涉及到了水印的Arnold变换处理以及对不同类型的水印攻击的应对策略。首先,让我们了解离散余弦变换(DCT)。
DCT变换的算法实现,对8*8的数组进行DCT变换
离散余弦变换(Discrete Cosine Transform, DCT)是一种在数字信号处理领域广泛应用的数学变换技术,特别是在图像压缩领域如JPEG格式中起到至关重要的作用。
利用MATLAB对图像进行DCT变换的代码
在实际应用中,DCT变换和降噪处理常常用于图像压缩,如JPEG编码。通过对图像进行DCT变换、量化和熵编码,可以显著减小图像文件的大小,便于存储和传输。
DCT一维变换原理及实现,二维dct变换,matlab
DCT(离散余弦变换,Discrete Cosine Transform)是一种广泛应用在图像处理、音频编码和数据压缩中的数学工具。
对图像进行DCT变换_对图像进行DCT变换_
### DCT基本概念DCT是傅里叶变换的一种形式,它使用余弦函数作为基底,对图像进行线性变换。


图形处理/算法
