主题:图像放大?
x=imread('Sunset.jpg');
[m,n,tt]=size(x);
z=[];
for t=1:tt
for i=1:m-1
for j=1:n-1
z(2*i-1,2*j-1,t)=x(i,j,t);
z(2*i-1,j*2,t)=x(i,j,t)/2+x(i,j+1,t)/2;
end
z(2*i-1,2*n-1,t)=x(i,n,t);
for j=1:n-1
z(i*2,2*j-1,t)=x(i,j,t)/2+x(i+1,j,t)/2;
z(i*2,j*2,t)=x(i,j,t)/4+x(i+1,j,t)/4+x(i,j+1,t)/4+x(i+1,j+1,t)/4;
end
z(i*2,n*2-1,t)=x(i,n,t)/2+x(i+1,n,t)/2;
end
for k=1:n
z(2*m-1,k,t)=x(m,k,t);
end
end
imshow(x);
figure(2);
imshow(z/256);
%程序中没有注释,不太好看,见谅!
通过以上代码想让图像放大到原来的两倍(近似),可是为什么输出的两个图像大小相同呢?
大体的算法是:在任意相邻的两个像素点之间再插入一个像素点,其值为与之相邻的若干个像素RGB值的算术平均数。
a11 a12 a13 ..... a1n
a21 a22 a23 ..... a2n
...
变换到
b11 b12 b13 b14 b15 ...... b1 2n-1
b21 b22 b23 b24 b25 ...... b2 2n-1
b31 b32 b33 b34 b35 ...... b3 2n-1
.....
其中:
b11=a11,b12=a11/2+a12/2,b13=a12;
b21=a11/2+a21/2,b22=a11/4+a12/4+a21/4+a22/4,b23=a12/2+a22/2;
...
但是为什么显示出来的图像大小没有变呢?而z的大小也确实是两倍啊!
[m,n,tt]=size(x);
z=[];
for t=1:tt
for i=1:m-1
for j=1:n-1
z(2*i-1,2*j-1,t)=x(i,j,t);
z(2*i-1,j*2,t)=x(i,j,t)/2+x(i,j+1,t)/2;
end
z(2*i-1,2*n-1,t)=x(i,n,t);
for j=1:n-1
z(i*2,2*j-1,t)=x(i,j,t)/2+x(i+1,j,t)/2;
z(i*2,j*2,t)=x(i,j,t)/4+x(i+1,j,t)/4+x(i,j+1,t)/4+x(i+1,j+1,t)/4;
end
z(i*2,n*2-1,t)=x(i,n,t)/2+x(i+1,n,t)/2;
end
for k=1:n
z(2*m-1,k,t)=x(m,k,t);
end
end
imshow(x);
figure(2);
imshow(z/256);
%程序中没有注释,不太好看,见谅!
通过以上代码想让图像放大到原来的两倍(近似),可是为什么输出的两个图像大小相同呢?
大体的算法是:在任意相邻的两个像素点之间再插入一个像素点,其值为与之相邻的若干个像素RGB值的算术平均数。
a11 a12 a13 ..... a1n
a21 a22 a23 ..... a2n
...
变换到
b11 b12 b13 b14 b15 ...... b1 2n-1
b21 b22 b23 b24 b25 ...... b2 2n-1
b31 b32 b33 b34 b35 ...... b3 2n-1
.....
其中:
b11=a11,b12=a11/2+a12/2,b13=a12;
b21=a11/2+a21/2,b22=a11/4+a12/4+a21/4+a22/4,b23=a12/2+a22/2;
...
但是为什么显示出来的图像大小没有变呢?而z的大小也确实是两倍啊!