I?=?imread('lena.bmp');
figure;?imshow(I);title('原圖像');
[m,n]=size(I);
%%%?縮小?臨近法
M?=?0.5;%放大倍數
%新的圖像大小
m1=m*M;n1=n*M;
%****************************************************
for?i=1:m1
for?j=1:n1;
J(i,j)=I(round(i/M),round(j/M));
end
end
%*****************************************************
figure;?imshow(J);title('縮小圖像');
%%%?放大?雙線性插值法
I2?=?double(I);
N?=?1.5;%放大倍數
%新的圖像大小
m2=m*N;n2=n*N;
J2=zeros(m2,n2);
for?i=1:m2
for?j=1:n2x=i/N;
y=j/N;
u=floor(x);
v=floor(y);
a=x-u;
b=y-v;
if?u+2<=m?&?v+2<=n
J2(i,j)=I2(u+1,v+1)*(1-a)*(1-b)+I2(u+2,v+1)*a*(1-b)+I2(u+1,v+2)*(1-a)*b+I2(u+2,v+2)*a*b;
end
endend
J2?=?uint8(J2);
figure;imshow(J2);title('放大圖像');
%%%%%?旋轉?
R?=?45*pi/180;%旋轉角度
I?=?double(I);
%新圖像大小
m2?=?ceil(m*cos(R)+n*sin(R));
n2?=?ceil(m*sin(R)+n*cos(R));
u0=?m*sin(R);%平移量
%變換矩陣
T=[cos(R),sin(R);-sin(R),cos(R)];
L?=?zeros(m2,n2);
for?u=1:n2
for?v=1:m2%新圖像坐標變換到原圖像坐標x和y中
temp?=?T*([u;v]-[u0;0]);
x=?temp(1);
y=?temp(2);
if?x>=1?&?x<=m?&?y>=1?&?y<=n%若變換出的x和y在原圖像範圍內
x_low=floor(x);
x_up=ceil(x);
y_low=floor(y);
y_up=ceil(y);
%雙線性插值,p1到p4是(x,y)周圍的四個點?
p1=I(x_low,y_low);
p2=I(x_up,y_low);
p3=I(x_low,y_low);
p4=I(x_up,y_up);
s=x-x_low;
t=y-y_low;
L(u,v)=(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;
end
endend
L=uint8(L);
figure;imshow(L);