Main Content

Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Buscar rotación y escala de imagen mediante la coincidencia automatizada de funciones

En este ejemplo se muestra cómo alinear automáticamente dos imágenes que difieren por una rotación y un cambio de escala. Es muy similar a otro ejemplo titulado .Buscar rotación y escala de imagen En lugar de usar un enfoque manual para registrar las dos imágenes, utiliza técnicas basadas en características que se encuentran en Computer Vision Toolbox™ para automatizar el proceso de registro.

En este ejemplo, utilizará la función y los objetos para recuperar el ángulo de rotación y el factor de escala de una imagen distorsionada.detectSURFFeaturesSURFPoints A continuación, transformará la imagen distorsionada para recuperar la imagen original.

Paso 1: Leer imagen

Traiga una imagen al área de trabajo.

original = imread('cameraman.tif'); imshow(original) text(size(original,2),size(original,1)+15, ...     'Image courtesy of Massachusetts Institute of Technology', ...     'FontSize',7,'HorizontalAlignment','right'); 

Paso 2: Cambiar el tamaño y girar la imagen

scale = 0.7; J = imresize(original,scale); % Try varying the scale factor.  theta = 30; distorted = imrotate(J,theta); % Try varying the angle, theta. figure imshow(distorted) 

Puede experimentar variando la escala y la rotación de la imagen de entrada. Sin embargo, tenga en cuenta que hay un límite en la cantidad que puede variar la escala antes de que el detector de características no encuentre suficientes características.

Paso 3: Buscar características coincidentes entre imágenes

Detectar entidades en ambas imágenes.

ptsOriginal = detectSURFFeatures(original); ptsDistorted = detectSURFFeatures(distorted); 

Extraer descriptores de entidades.

[featuresOriginal,validPtsOriginal] = extractFeatures(original,ptsOriginal); [featuresDistorted,validPtsDistorted] = extractFeatures(distorted,ptsDistorted); 

Coincide con las entidades mediante sus descriptores.

indexPairs = matchFeatures(featuresOriginal,featuresDistorted); 

Recuperar ubicaciones de los puntos correspondientes para cada imagen.

matchedOriginal = validPtsOriginal(indexPairs(:,1)); matchedDistorted = validPtsDistorted(indexPairs(:,2)); 

Mostrar coincidencias de puntos. Observe la presencia de valores atípicos.

figure showMatchedFeatures(original,distorted,matchedOriginal,matchedDistorted); title('Putatively Matched Points (Including Outliers)'); 

Paso 4: Estimar la transformación

Encuentre una transformación correspondiente a los pares de puntos coincidentes utilizando el algoritmo de consenso SAmple (MSAC) del estimador M estadísticamente robusto, que es una variante del algoritmo RANSAC. Elimina los valores atípicos mientras se calcula la matriz de transformación. Es posible que vea resultados variables del cálculo de la transformación debido al muestreo aleatorio empleado por el algoritmo MSAC.

[tform,inlierDistorted,inlierOriginal] = estimateGeometricTransform( ...     matchedDistorted,matchedOriginal,'similarity'); 

Mostrar pares de puntos coincidentes utilizados en el cálculo de la matriz de transformación.

figure showMatchedFeatures(original,distorted,inlierOriginal,inlierDistorted); title('Matching Points (Inliers Only)'); legend('ptsOriginal','ptsDistorted'); 

Paso 5: Resolver escala y ángulo

Utilice la transformación geométrica, TFORM, para recuperar la escala y el ángulo. Dado que calculó la transformación de la imagen distorsionada a la original, ahora calcule su inversa para recuperar la distorsión.

Let sc = scale*cos(theta) Let ss = scale*sin(theta)
Then, Tinv = [sc -ss  0;               ss  sc  0;               tx  ty  1]
where tx and ty are x and y translations, respectively.

Calcular la matriz de transformación inversa.

Tinv  = tform.invert.T;  ss = Tinv(2,1); sc = Tinv(1,1); scale_recovered = sqrt(ss*ss + sc*sc) theta_recovered = atan2(ss,sc)*180/pi 
 scale_recovered =    single      0.7010   theta_recovered =    single     30.2351  

Los valores recuperados deben coincidir con los valores de escala y ángulo seleccionados en .Paso 2: Cambiar el tamaño y girar la imagen

Paso 6: Recuperar la imagen original

Recupera la imagen original transformando la imagen distorsionada.

outputView = imref2d(size(original)); recovered = imwarp(distorted,tform,'OutputView',outputView); 

Compárelos mirándolos uno al lado del otro en un montaje.recoveredoriginal

figure montage({original,recovered}) 

La calidad de imagen (derecha) no coincide con la imagen (izquierda) debido al proceso de distorsión y recuperación.recoveredoriginal En particular, la reducción de la imagen provoca la pérdida de información. Los artefactos alrededor de los bordes se deben a la precisión limitada de la transformación. Si tuviera que detectar más puntos en , entonces la transformación sería más precisa.Paso 4: Encontrar características coincidentes entre imágenes Por ejemplo, podría haber utilizado un detector de esquinas, , para complementar el detector de características SURF que encuentra blobs.detectFASTFeatures El contenido de la imagen y el tamaño de la imagen también afectan al número de entidades detectadas.

Consulte también

| | | | (Computer Vision Toolbox) | (Computer Vision Toolbox) | (Computer Vision Toolbox) | (Computer Vision Toolbox) | (Computer Vision Toolbox)