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


轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/282954.html
標籤:圖形處理/算法
下一篇:skinsharp動態換膚問題 SkinH_AttachEx SkinH_AttachResEx 均不成功,求大神指點
