关于DCT变换

鱼都被海风吹走了. 2021-05-05 10:00:34
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
...全文
1662 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧