该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
DATA=imread('wm.jpg');
DATA=rgb2gray(DATA);
tic
DATA=double(DATA);
size1=size(DATA);
% 分块;
tu=DATA(1:size1(1),1:size1(2),1);
xx=size1(2);
yy=size1(1);
nrx=xx/8;
nry=yy/8;
ndx=xx/16;
ndy=yy/16;
DD=zeros(ndy,ndx,8,64);
cund1=zeros(16,16);
cund2=zeros(8,8);
cund3=zeros(1,64);
cund33=zeros(1,64);
cund4=zeros(8,8);
RRR=zeros(nry,nrx,6);
cunr=zeros(1,64);
for i=1:ndy
for j=1:ndx
cund1=tu(1+16*(i-1):16+16*(i-1),1+16*(j-1):16+16*(j-1));
for l=1:8
for m=1:8
cund2(l,m)=(cund1(1+2*(l-1),1+2*(m-1))+cund1(2+2*(l-1),2+2*(m-1))+cund1(2+2*(l-1),1+2*(m-1))+cund1(1+2*(l-1),2+2*(m-1)))/4;
end;
end;
DD(i,j,1,1:64)=reshape(cund2,[1,64]);
cund4=fliplr(cund2);
DD(i,j,2,1:64)=reshape(cund4,[1,64]);
cund4=flipud(cund2);
DD(i,j,3,1:64)=reshape(cund4,[1,64]);
cund4=flipud(fliplr(cund2));
DD(i,j,4,1:64)=reshape(cund4,[1,64]);
cund4=rot90(flipud(cund2));
DD(i,j,5,1:64)=reshape(cund4,[1,64]);
cund4=rot90(cund2);
DD(i,j,6,1:64)=reshape(cund4,[1,64]);
cund4=rot90(rot90(rot90(cund2)));
DD(i,j,7,1:64)=reshape(cund4,[1,64]);
cund4=cund2';
DD(i,j,8,1:64)=reshape(cund4,[1,64]);
end;
end;
% 匹配
for i=1:nry
for j=1:nrx
cunr=reshape(tu(1+8*(i-1):8+8*(i-1),1+8*(j-1):8+8*(j-1)),[1,64]);
sumalpha=sum(cunr);
sumalpha2=norm(cunr)^2;
dx=1;
dy=1;
ut=1;
minH=10^20;
minot=0;
minst=0;
for k=1:ndy
for l=1:ndx
for m=1:8
cund3(1:64)=DD(k,l,m,1:64);
sumbeta=sum(cund3);
sumbeta2=norm(cund3)^2;
alphabeta=cunr*cund3';
if (64*sumbeta2-sumbeta^2)~=0
st=(64*alphabeta-sumalpha*sumbeta)/(64*sumbeta2-sumbeta^2);
elseif (64*alphabeta-sumalpha*sumbeta)==0||st > 1 || st < -1
st=0;
else
st=10^20;
end;
ot=(sumalpha-st*sumbeta)/64;
H=(sumalpha2+st*(st*sumbeta2-2*alphabeta+2*ot*sumbeta)+ot*(64*ot-2*sumalpha))/64;
if H
dx=l;
dy=k;
ut=m;
minot=ot;
minst=st;
minH=H;
cund33=cund3;
end;
end;
end;
end;
RRR(i,j,1)=minst;
RRR(i,j,2)=minot;
RRR(i,j,3)=dy;
RRR(i,j,4)=dx;
RRR(i,j,5)=ut;
RRR(i,j,6)=minH;
end;
end;
% 编码
huifu=ones(yy,xx);
for iter=1:10
for i=1:nry
for j=1:nrx
st=RRR(i,j,1);
ot=RRR(i,j,2);
dy=RRR(i,j,3);
dx=RRR(i,j,4);
ut=RRR(i,j,5);
cund1=huifu(1+16*(dy-1):16+16*(dy-1),1+16*(dx-1):16+16*(dx-1));
for l=1:8
for m=1:8
cund2(l,m)=(cund1(1+2*(l-1),1+2*(m-1))+cund1(2+2*(l-1),2+2*(m-1))+cund1(2+2*(l-1),1+2*(m-1))+cund1(1+2*(l-1),2+2*(m-1)))/4;
end;
end;
switch ut
case 1
cund4=cund2;
case 2
cund4=fliplr(cund2);
case 3
cund4=flipud(cund2);
case 4
cund4=flipud(fliplr(cund2));
case 5
cund4=rot90(flipud(cund2));
case 6
cund4=rot90(cund2);
case 7
cund4=rot90(rot90(rot90(cund2)));
case 8
cund4=cund2';
end;
huifu(1+8*(i-1):8+8*(i-1),1+8*(j-1):8+8*(j-1))=st*cund4+ot;
end;
end;
end;
toc
% 计算mse
mse=0;
for i=1:nrx
for j=1:nry
a=(DATA(i,j)-huifu(i,j))^2;
mse=mse+a;
end
end
mse=mse/(256*256);
psnr=10*log10((255*255)/mse);
Igray = mat2gray(DATA);
huifu = mat2gray(huifu);
subplot(1,2,1),imshow(Igray);
subplot(1,2,2),imshow(huifu);
因为算法中的分块 我把图像尺寸改成了480×480 结果就出来俩对比图 没出MSE和PSNR结果 就没法对图像进行客观分析了 有没有图像压缩的大腿 个解释下啊 谢谢