當前位置:編程學習大全網 - 編程語言 - 數字圖像處理 圖像縮放以及旋轉的算法代碼

數字圖像處理 圖像縮放以及旋轉的算法代碼

clear?all;

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:n2

x=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

end

end

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

end

end

L=uint8(L);

figure;imshow(L);

  • 上一篇:交通燈用cmP怎麽編程(歐姆龍)
  • 下一篇:華為鴻蒙系統應該如何建立生態系統?
  • copyright 2024編程學習大全網