关于DCT变换

鱼都被海风吹走了. 鱼都被海风吹走了. 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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
...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部