當前位置:編程學習大全網 - 編程語言 - 利用MATLAB通過矩陣變化實現圖像的平移縮放和旋轉,要壹個程序兩者同時進行

利用MATLAB通過矩陣變化實現圖像的平移縮放和旋轉,要壹個程序兩者同時進行

根據矩陣計算:

平移旋轉以後,還需要插值,才能顯示完整的圖像

clear?all;?close?all;?clc;

img=imread('lena.bmp');

[h?w]=size(img);?

%平移旋轉參數

a?=?10;?b?=?20;

theta?=?30?/180*pi;?

%?旋轉矩陣

rot=[cos(theta)?-sin(theta)?0;

sin(theta)?cos(theta)?0;

0?01];

%?平移矩陣

move?=?[?1?0?a;

0?1?b;

0?0?1];

%平移加旋轉

rot?=?rot?*?move;

pix1=[a?b?1]*rot; %?左上點的坐標?

pix2=[a?w+b?1]*rot;?%?右上點的坐標?

pix3=[h+a?b?1]*rot; %?左下點的坐標?

pix4=[h+a?w+b?1]*rot; %?右下點的坐標?

height?=?round(max([abs(pix1(1)-pix4(1))?abs(pix2(1)-pix3(1))]));?%變換後圖像的高度?

width?=?round(?max([abs(pix1(2)-pix4(2))?abs(pix2(2)-pix3(2))]));?%變換後圖像的寬度?

imgn=zeros(height,width);?

delta_y?=?abs(min([pix1(1)?pix2(1)?pix3(1)?pix4(1)]));?

delta_x?=?abs(min([pix1(2)?pix2(2)?pix3(2)?pix4(2)]));?

for?i=1-delta_y:height

for?j=1-delta_x:width

pix=[i?j?1]/rot;?%用變換後圖像的點的坐標去尋找原圖像點的坐標,

float_Y=pix(1)-floor(pix(1));

float_X=pix(2)-floor(pix(2));

if?pix(1)>=1?&&?pix(2)>=1?&&?pix(1)?<=?h?&&?pix(2)?<=?w?

pix_up_left=[floor(pix(1))?floor(pix(2))];?%四個相鄰的點

pix_up_right=[floor(pix(1))?ceil(pix(2))];?

pix_down_left=[ceil(pix(1))?floor(pix(2))];

pix_down_right=[ceil(pix(1))?ceil(pix(2))];?

value_up_left=(1-float_X)*(1-float_Y);

value_up_right=float_X*(1-float_Y);?

value_down_left=(1-float_X)*float_Y;?

value_down_right=float_X*float_Y;?

imgn(i+delta_y,j+delta_x)?=?value_up_left*img(pix_up_left(1),pix_up_left(2))+...

value_up_right*img(pix_up_right(1),pix_up_right(2))+...

value_down_left*img(pix_down_left(1),pix_down_left(2))+...

value_down_right*img(pix_down_right(1),pix_down_right(2));?

end

end?

end?

imshow(uint8(imgn));title('平移旋轉並插值');

  • 上一篇:中班拍球教案
  • 下一篇:幼兒園小班音樂教案《蹺蹺板》
  • copyright 2024編程學習大全網