Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Encuentre rotación de imagen y escala utilizando la función de coincidencia automatizada

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

En este ejemplo, utilizará y objeto de sistema para recuperar el ángulo de rotación y el factor de escala de una imagen distorsionada.detectSURFFeaturesvision.GeometricTransformEstimator A continuación, transformará la imagen distorsionada para recuperar la imagen original.

Paso 1: Leer imagen

Traiga una imagen al espacio 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 rotar 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 pueda encontrar suficientes características.

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

Detecte características en ambas imágenes.

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

Extraer descriptores de características.

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

Haga coincidir las entidades utilizando sus descriptores.

indexPairs = matchFeatures(featuresOriginal, featuresDistorted); 

Recupere las 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 de muestras M-estimmator (MSAC) estadísticamente robusto, que es una variante del algoritmo RANSAC. Elimina los valores atípicos mientras se computan 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 para escala y ángulo

Utilice la transformación geométrica, TFORM, para recuperar la escala y el ángulo. Como calculamos la transformación de la imagen distorsionada a la original, necesitamos calcular 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.

Calcule 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 rotar la imagen

Paso 6: Recupere la imagen original

Recupere la imagen original transformando la imagen distorsionada.

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

Compare con mirándolos lado a lado en un montaje.recoveredoriginal

figure, imshowpair(original,recovered,'montage') 

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, la transformación sería más precisa.Step 4: Find Matching Features Between Images Por ejemplo, podríamos haber utilizado un detector de esquinas, para complementar el detector de características de SURF que encuentra BLOBs.detectFASTFeatures El contenido de la imagen y el tamaño de la imagen también influyen en el número de entidades detectadas.

Consulte también

| | | | | | | |