Red de conocimiento informático - Conocimiento del nombre de dominio - 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.

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

%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

%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;