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.

Realizar una transformación de traducción 2D simple

En este ejemplo se muestra cómo realizar una transformación afín simple denominada traducción. En una traducción, se desplaza una imagen en el espacio de coordenadas añadiendo un valor especificado a las coordenadas x e y. (También puede utilizar la función para realizar la traducción.)imtranslate

Lea la imagen que desea transformar. En este ejemplo se crea una imagen de tablero de ajedrez mediante la función.checkerboard

cb = checkerboard; imshow(cb)

Obtenga información de referencia espacial sobre la imagen. Esta información es útil cuando desea mostrar el resultado de la transformación.

cb_ref = imref2d(size(cb))
cb_ref =    imref2d with properties:             XWorldLimits: [0.5000 80.5000]            YWorldLimits: [0.5000 80.5000]               ImageSize: [80 80]     PixelExtentInWorldX: 1     PixelExtentInWorldY: 1     ImageExtentInWorldX: 80     ImageExtentInWorldY: 80        XIntrinsicLimits: [0.5000 80.5000]        YIntrinsicLimits: [0.5000 80.5000]  

Cree una matriz de transformación 3 por 3, a la que se llama en este ejemplo, que define la transformación.T En esta matriz, especifica el número de píxeles para desplazar la imagen en la dirección horizontal y especifica el número de píxeles para desplazar la imagen en la dirección vertical.T(3,1)T(3,2)

T = [1 0 0; 0 1 0; 20 30 1]
T = 3×3

     1     0     0
     0     1     0
    20    30     1

Cree un objeto de transformación geométrica que defina la traducción que desea realizar. Dado que las transformaciones de traducción son un caso especial de la transformación afín, el ejemplo utiliza un objeto de transformación geométrica para representar la traducción.affine2d Cree un objeto pasando la matriz de transformación 3 por 3, , al constructor.affine2dTaffine2d

tform = affine2d(T);

Realice la transformación. Llame a la función especificando la imagen que desea transformar y el objeto de transformación geométrica. devuelve la imagen transformada, .imwarpimwarpcb_translated Este ejemplo también devuelve el objeto de referencia espacial opcional, , que contiene información de referencia espacial sobre la imagen transformada.cb_translated_ref

[cb_translated,cb_translated_ref] = imwarp(cb,tform);

Vea la imagen original y la imagen transformada en paralelo utilizando la función junto con .subplotimshow Al ver la imagen traducida, puede parecer que la transformación no tuvo ningún efecto. La imagen transformada tiene un aspecto idéntico a la imagen original. La razón por la que no hay ningún cambio es evidente en la visualización es porque el tamaño de la imagen de salida para que sea lo suficientemente grande como para contener toda la imagen transformada, pero no todo el espacio de coordenadas de salida.imwarp Observe, sin embargo, que la transformación ha cambiado los valores de coordenadas.

figure; subplot(1,2,1); imshow(cb,cb_ref); subplot(1,2,2); imshow(cb_translated,cb_translated_ref)

Para ver la totalidad de la imagen transformada en la misma relación con el origen del espacio de coordenadas que la imagen original, utilice con el parámetro, especificando un objeto de referencia espacial.imwarp'OutputView' El objeto de referencia espacial especifica el tamaño de la imagen de salida y la cantidad de espacio de coordenadas de salida que se incluye en la imagen de salida. Para ello, el ejemplo hace una copia del objeto de referencia espacial asociado a la imagen original y modifica los límites de coordenadas universales para acomodar el tamaño completo de la imagen transformada. El ejemplo establece los límites de la imagen de salida en coordenadas mundiales para incluir el origen de la entrada

cb_translated_ref = cb_ref; cb_translated_ref.XWorldLimits(2) = cb_translated_ref.XWorldLimits(2)+20; cb_translated_ref.YWorldLimits(2) = cb_translated_ref.YWorldLimits(2)+20;  [cb_translated,cb_translated_ref] = imwarp(cb,tform,'OutputView',cb_translated_ref);  figure, subplot(1,2,1); imshow(cb,cb_ref); subplot(1,2,2); imshow(cb_translated,cb_translated_ref)

Consulte también

| |

Temas relacionados