Cómo utilizar MATLAB para dominar los principios básicos y los métodos de implementación de traducción, rotación y escalado de imágenes.
%Traducción de imágenes (1)
F=imread('p2.bmp');
se = traducir(strel(1), [0 20 ]);
% parámetro [0 20] se puede modificar y la distancia de traducción cambiará en consecuencia después de la modificación
J = imdilate(F,se
<); p>figure;imshow(J,[]);title('Forma después de moverse hacia la derecha');
%Traducción de imágenes (2)
función outImage=immove( inImage,Tx,Ty)
[m, n] = tamaño(inImage);
Tx=fix(Tx);
Ty =fix(Ty );
%move x
if (Tx<0)
inImage=imcrop(inImage,[abs(Tx),1, m-abs( Tx),n]);
[m, n] = tamaño(enImagen);
Tx=0
fin; p>
%move y
if (Ty<0)
inImage=imcrop(inImage,[1,abs(Ty),m,n-abs(Ty) ]);
[m, n] = tamaño(inImage);
Ty=0
end
outImage = ceros; (m+Ty , n+Tx);
outImage(1+Ty:m+Ty,1+Tx:n+Tx) = inImage;
% rotación de imagen p>
%X,Y es el número de filas y columnas
Image=imread('02.jpg');
Image=rgb2gray(Image); p>
angle= 30;
% Un número aleatorio representa 30 grados
pai=3.14;
Angle=pai*angle/180; /p>
%Convierte el método de representación de ángulos.
[X,Y]=size(Imagen);
% Imagen original mostrada
subplot(2,1,1); p>imshow(Image);
title('Imagen original');
% Calcula las nuevas coordenadas de los cuatro puntos de las esquinas y determina el área de visualización rotada.
LeftTop(1,1)=-(Y-1)*sin(Angle);
LeftTop(1,2)=(Y-1)*cos(Angle);
Inferior izquierdo(1,1)=0;
Inferior izquierdo(1,2)=0;
Superior derecho(1,1)=(X-1)*cos( Ángulo)-(Y-1)*sin(Ángulo);
RightTop(1,2)=(X-1)*sin(Ángulo)+(Y-1)*cos(Ángulo);
InferiorDerecho(1,1)=(X-1)*cos(Ángulo);
InferiorDerecho(1,2)=(X-1)*sin(Ángulo);
% Calcula el número de filas y columnas en el área de visualización
Xnew=max([LeftTop(1,1),LeftBottom(1,1),RightTop(1,1 ),Parte inferior derecha(1,1)])-min([Parte superior izquierda(1,1),Parte inferior izquierda(1,1),Parte superior derecha(1,1),Parte inferior derecha(1,1)]); >Ynew=max( [Arriba izquierda(1,2),Abajo izquierda(1,2),Arriba derecha(1,2),Abajo derecha(1,2)])-min([Arriba izquierda(1,2),Abajo izquierda(1, 2),RightTop( 1,2),RightBottom(1,2)]);
% Asignar nueva matriz de área de visualización
ImageNew=zeros(round(Xnew),round( Ynew))+255 ;
% Calcula las nuevas coordenadas de cada píxel de la imagen original
para indexX=0:(X-1)
para indexY=0:(Y-1 )
ImagenNueva(round(indexX*cos(Angle)-indexY*sin(Angle))+round(abs(min([LeftTop(1,1),LeftBottom (1,1),DerechaArriba( 1,1),DerechaAbajo(1,1)])))+1,1+round(indexX*sin(Angle)+indexY*cos(Angle))+round(abs(min ([ArribaIzquierda(1,2) ,AbajoIzquierda(1,2),ArribaDerecha(1,2),ArribaDerecha(1,2)]))))=Imagen(indexX+1,indexY+1);
fin
fin
% visualización
subplot(2,1,2);
imshow((ImageNew)/ 255)
promp=['Imagen con ángulo de rotación: ' int2str(angle) ']
title(promp);
%Escalado de imagen
función y =redimensionar(a,mul,tipo)
%*************************** ********* *******************
%a: valor de escala de grises de la imagen de entrada
% mu
l: Factor de zoom
%tipo: 1 representa el método vecino más cercano, 2 representa el método de interpolación bipolar
% Dibuja la imagen escalada y devuelve su valor en escala de grises
%************************************************ ******
[m,n]=tamaño(a);
m1=m*mul;n1=n*mul; %*************************************************** ***** ***
si tipo==1
para i=1:m1
para j=1:n1
b (i,j)=a(round(i/mul),round(j/mul)
fin
fin
elseif tipo== 2
para i=1:m1-1
para j=1:n1-1
u0=i/mul; v0=j/mul ;
u=redondo(u0);v=redondo(v0
s=u0-u;t=v0-v;
b( i,j)=(a(u+1,v)-a(u,v))*s+(a(u,v+1)-a(u,v))*t+(a (u+1, v+1)+a(u,v)-a(u,v+1)-a(u+1,v))*s*t+a(u,v); >
fin
fin
fin
%********************* ********* ****************************
b=uint8(b);
imshow( b);
title('Imagen procesada');
y=b;