Utilice MATLAB para realizar la traducción, escalado y rotación de imágenes a través de cambios de matriz. Requiere un programa para realizar ambas al mismo tiempo.
Basado en el cálculo matricial:
Después de la traslación y la rotación, se necesita interpolación para mostrar la imagen completa clear?all;?close?all;?clc;
img=imread('lena.bmp');
[h?w]=size(img);?
Parámetros de traducción y rotación
a ?= ?10;?b?=?20;
theta?=?30?/180*pi;?
?Matriz de rotación
rot= [cos (theta)?-sin(theta)?0; sin(theta)?cos(theta)?0; 0?01];
?Matriz de traducción
move? =? [?1?0?a; 0?1?b; 0?0?1];
Traslación más rotación
rot?=?rot?*?move;
Traslación más rotación
rot?=?rot?*?move
p>
pix1=[a?b?1]*rot; ; ?Coordenadas del punto superior izquierdo?
pix2=[a?w b?1]*rot;??Coordenadas del punto superior derecho?
pix3=[h a?b ?1]*rot; ?¿Las coordenadas del punto inferior izquierdo?
pix4=[h a?w b?1]*rot; ?Las coordenadas del punto inferior derecho
height?=?round(max([abs(pix1(1)-pix4(1))?abs(pix2(1)-pix3(1))]));?La imagen transformada ¿Altura?
width?=?round(?max([abs(pix1(2)-pix4(2))?abs(pix2(2)-pix3(2))]));?Transform ¿El ancho de la imagen final?
imgn=zeros(alto,ancho);?
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;?después de la transformación Utilice las coordenadas de los puntos de la imagen para encontrar las coordenadas de los puntos de la imagen original,
float_Y=pix(1)-floor(pix(1));
float_X=pix(2)-floor (pix( 2));
if?pix(1)gt;=1?amp;amp;?pix(2)gt;=1?amp;amp;?pix(1)?lt ;=? h?amp;amp;?pix(2)?lt;=?w?
pix_up_left=[floor(pix(1))?floor(pix(2))];?cuatro puntos adyacentes
pix_up_right=[suelo(pix(1))?ceil(pix(2))];?
pix_down_left=[techo(pix(1)) ?suelo(pix(2) ))];
pix_down_right=[ceil(pix(1))?ceil(pix(2))];?
value_up_left=(1- float_X)*(1- float_Y);
value_up_right=flotante
_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('Traducción, rotación e interpolación');
p>