[Procesamiento de imágenes digitales] Transformación geométrica de imágenes


Dos imágenes que contienen el mismo contenido pueden tener apariencias completamente diferentes debido a la distorsión geométrica causada por el ángulo de la imagen, las relaciones de perspectiva o incluso la propia lente.
Mediante una transformación geométrica adecuada, los efectos negativos de estas distorsiones geométricas se pueden eliminar en la mayor medida posible, lo que resulta beneficioso para centrarse en el contenido de la imagen en sí en trabajos posteriores de procesamiento y reconocimiento.

Ideas generales de transformación geométrica de imágenes.

Una transformación geométrica requiere dos partes de la operación:

La primera son las operaciones requeridas para la transformación espacial, como traslación, rotación y duplicación, que deben usarse para representar la relación de mapeo entre la imagen de salida y la imagen de entrada;

Además, es necesario utilizar un algoritmo de interpolación en escala de grises para calcular de acuerdo con esta relación de transformación. Los píxeles de la imagen de salida se pueden asignar a coordenadas no enteras de la imagen de entrada.

Suponga la imagen original f ( x 0 , y 0 ) f(x_0, y_0)f ( x0,y0) La imagen de destino generada por transformación geométrica esg (x 1, y 1) g(x_1, y_1)gramo ( x1,y1) , entonces la relación de mapeo de transformación espacial se puede expresar como:
x 1 = s ( x 0 , y 0 ) (1) x_1 = s(x_0, y_0) \tag{1}X1=s ( x0,y0)( 1 )

y 1 = t ( x 0 , y 0 ) (2) y_1 = t(x_0, y_0) \tag{2}y1=t ( x0,y0)( 2 )

Entre ellos, s ( x 0 , y 0 ) s(x_0, y_0)s ( x0,y0)t ( x 0 , y 0 ) t(x_0, y_0)t ( x0,y0) está dada porf ( x 0 , y 0 ) f(x_0, y_0)f ( x0,y0)g ( x 1 , y 1 ) g(x_1, y_1)gramo ( x1,y1) función de transformación de coordenadas.

Por ejemplo, x 1 = s ( x 0 , y 0 ) = 2 x 0 x_1 = s(x_0, y_0) = 2 x_0X1=s ( x0,y0)=2x _0y 1 = t ( x 0 , y 0 ) = 2 y 0 y_1 = t(x_0, y_0) = 2 y_0y1=t ( x0,y0)=2 años0Cuando, la imagen transformada g (x 1, y 1) g(x_1, y_1)gramo ( x1,y1) simplemente enxxx y y En las dos direcciones espaciales de y , f (x 0, y 0) f(x_0, y_0)f ( x0,y0) duplica su tamaño.

Dominó la función de transformación s ( x 0 , y 0 ) s(x_0, y_0)s ( x0,y0)t ( x 0 , y 0 ) t(x_0, y_0)t ( x0,y0) , puede seguir los pasos a continuación para implementar la transformación geométrica.

Pasos del algoritmo 4.1:

  • De acuerdo con la relación de mapeo de la transformación espacial, determine el tamaño de la imagen de destino transformada, es decir, el rango de filas y columnas, porque algunas transformaciones pueden cambiar el tamaño de la imagen;
  • Calcula la transformación inversa s − 1 ( j 1 , i 1 ) s^{-1} (j_1, i_1)s1 (j1,i1)t − 1 ( j 1 , i 1 ) t^{-1} (j_1, i_1)t1 (j1,i1)
  • Escanee progresivamente la imagen de destino g ( x 1 , y 1 ) g(x_1, y_1)gramo ( x1,y1) , parag ( x 1 , y 1 ) g(x_1, y_1)gramo ( x1,y1) en cada punto( j 0 , j 0 ) (j_0, j_0)( j0,j0) :
    • Según la relación cartográfica de transformación espacial, se calcula:
      • j 0 ′ = s - 1 ( j 1 , yo 1 ) ; j_0' = s^{-1}(j_1, i_1);j0=s1 (j1,i1) ; // La abscisa calculada directamente mediante la relación de mapeo no puede ser un número entero;
      • yo 0 ′ = t - 1 ( j 1 , yo 1 ) ; i_0' = t^{-1}(j_1, i_1);i0=t1 (j1,i1) ; // La coordenada vertical calculada directamente mediante la relación de mapeo puede no ser un número entero;
    • Dependiendo del método de interpolación elegido:
      • ( j 0 , yo 0 ) = interp ( j 0 ′ , yo 0 ′ ) ; (j_0, i_0) = interp(j_0', i_0');( j0,i0)=en t er p ( j0,i0) ; // para coordenadas no enteras( j 0 ′ , i 0 ′ ) (j_0', i_0')( j0,i0) requiere interpolación
      • si sisi (j 0 , yo 0) (j_0, i_0)( j0,i0) en la imagenffdentro de f
        • Copie el píxel correspondiente: g (j 1, i 1) = f (j 0, i 0);g(j_1, i_1) = f(j_0, i_0);gramo ( j1,i1)=f ( j0,i0) ;
      • más otra cosademás _ _
        • gramo (j 1, yo 1) = 255; g(j_1, i_1) = 255;gramo ( j1,i1)=255 ;

El proceso de restauración (corrección) de imágenes geométricamente distorsionadas es exactamente el proceso inverso de la transformación anterior.
x 0 = s − 1 ( x 1 , y 1 ) (3) x_0 = s^{-1} (x_1, y_1) \tag{3}X0=s1 (x1,y1)( 3 )

y 0 = t − 1 ( x 1 , y 1 ) (4) y_0 = t^{-1}(x_1, y_1) \tag{4}y0=t1 (x1,y1)( 4 )

Las ecuaciones (3) y (4) representan el correspondiente g (x 1, y 1) g(x_1, y_1)gramo ( x1,y1) af ( x 0 , y 0 ) f(x_0, y_0)f ( x0,y0) transformación inversa. En este momento, la imagen g ( x 1 , y 1 ) g(x_1, y_1)distorsionada por transformación geométricagramo ( x1,y1) es el objeto a restaurar, la imagen originalf ( x 0 , y 0 ) f(x_0, y_0)f ( x0,y0) es el objetivo de la recuperación.

Cuando la normalización de imagen se utiliza para eliminar los cambios en la apariencia de la imagen causados ​​por factores geométricos, se denomina normalización geométrica de imagen. Puede eliminar las diferencias en las relaciones geométricas entre objetos y encontrar esas invariantes geométricas en la imagen, conociendo así estos objetos. iguales o pertenecen a la misma categoría.


panorámica de la imagen

La traducción de imágenes consiste en mover todos los puntos de la imagen horizontal o verticalmente según la cantidad de traducción especificada.
Sea (x 0, y 0) (x_0, y_0)( X0,y0) es un punto en la imagen original y la cantidad de traslación horizontal de la imagen esT x T_xtx, la cantidad de traducción vertical es T y T_yty,
las coordenadas del punto después de la traslación se convierten en (x 1, y 1) (x_1, y_1)( X1,y1) , se convierte
en x 1 = x 0 + tx x_1 = x_0 + t_xX1=X0+tx
y 1 = y 0 + t y y_1 = y_0 + t_y y1=y0+ty

Defina la función
[ x 1 y 1 1 ] = [ x 0 y 0 1 ] [ 1 0 0 0 1 0 T x T y 1 ] (5) \begin{bmatrix} x_1 & y_1 & 1 \end{bmatrix}; = \begin{bmatrix}x_0&y_0&1\end{bmatrix}\begin{bmatrix}1&0&0\\0&1&0\\T_x&T_y&1\end{bmatrix}\tag{5}[X1y11]=[X0y01] 10tx01ty001 ( 5 )
Invierta la matriz de transformación para obtener la transformación inversa:
[ x 0 y 0 1 ] = [ x 1 y 1 1 ] [ 1 0 0 0 1 0 − T x − T y 1 ] (6) \begin{ bmatrix } x_0 & y_0 & 1 \end{bmatrix} = \begin{bmatrix}x_1 & y_1 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ -T_x & - T_y y 1 \end{bmatrix} \tag{6}[X0y01]=[X1y11] 10−T _x01−T _y001 ( 6 )

{ x 0 = x 1 − T xy 0 = y 1 − T y (7) \left \{ \begin{matrix} x_0 = x_1 - T_x \\ y_0 = y_1 - T_y \end{matrix} \ bien. \etiqueta{7}{ X0=X1txy0=y1ty( 7 )
De la fórmula anterior, podemos obtener que cada punto en la imagen de destino traducida puede encontrar el punto correspondiente en la imagen original.

Por ejemplo, para (i, j) (i,j) en el nuevo gráfico( i ,j ) píxel, en la fórmula puedes obtener su píxel correspondiente en la imagen original( i − T x , j − T y ) (i-T_x, j-T_y)( itx,jty) . En este momento, siT x > i T_x > itx>iT y > j T_y > jty>j,点( i − T x , j − T y ) (i-T_x, j-T_y)( itx,jty) está más allá del alcance de la imagen original y sus valores de píxeles se pueden establecer directamente en0 00 o255 255255 .

Por lo general, existen dos métodos de procesamiento para los puntos de la imagen original que se han movido fuera del área de visualización de la imagen: se pueden descartar directamente o el ancho de la imagen recién generada se puede aumentar en T x T_x aumentando adecuadamente el tamaño. de la imagen objetivo.tx, la altura aumenta T y T_ytyEl método permite incluir estos puntos en la nueva imagen.

imtransformLas funciones se utilizan para completar transformaciones espaciales bidimensionales generales.
Prototipo de función:B = imtransform(A, TFORM, method);

  • A es la imagen a transformar geométricamente;
  • TFORM especifica el tipo de transformación específico;
  • El método le permite seleccionar el método de interpolación para la función imtransform. Los métodos de interpolación opcionales son: bicúbico, bilineal, más cercano

Las estructuras TFORM se pueden crear de dos maneras, usando maketformfunciones y cp2tformfunciones.
cp2tform es una función de ajuste de datos que requiere los pares de puntos correspondientes entre la imagen original y la imagen de destino como entrada para determinar la relación de transformación geométrica basada en el par de puntos de control.

formulario de llamada a la función maketform:T = maketform(transformtype, Matrix);

  • El parámetro transformtype especifica el tipo de transformación;
  • El parámetro Matrix es la matriz de transformación afín correspondiente, por ejemplo, para la transformación de traducción, la matriz es [1,0,0;0,1,0;T_x,T_y,1]

reflejo de imagen

La transformación de espejo de imagen se divide en espejo horizontal y espejo vertical. La duplicación horizontal convierte las mitades izquierda y derecha de la imagen con el eje central vertical de la imagen como eje central; la duplicación vertical convierte la mitad superior e inferior de la imagen con el eje central horizontal de la imagen como eje central.

Determine el rango de las ecuaciones:
[ x 1 y 1 1 ] = [ x 0 y 0 1 ] [ − 1 0 0 0 1 0 Ancho 0 1 ] = [ Ancho − x 0 y 0 1 ] (8) \ comenzar {bmatrix} x_1 & y_1 & 1 \ end {bmatrix} = \begin {bmatrix} x_0 & y_0 & 1 \end {bmatrix} \begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ Ancho &0&1\end{bmatrix} = \begin{bmatrix}Ancho-x_0&y_0&1\end{bmatrix}\tag{8}[X1y11]=[X0y01] 10Ancho _ _ _010001 =[Ancho _ _ _X0y01]( 8 )
Gráfico específico:
[ x 0 y 0 1 ] = [ x 1 y 1 1 ] [ − 1 0 0 0 1 0 Ancho 0 1 ] = [ Ancho − x 1 y 1 1 ] (9 ) \begin {bmatrix} x_0 & y_0 & 1 \ end {bmatrix} = \begin {bmatrix} x_1 & y_1 & 1 \end {bmatrix} \begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & \\Width&0&1\ end{bmatrix} = \begin{bmatrix} Ancho - x_1&y_1&1\end{bmatrix}\tag{9}[X0y01]=[X1y11] 10Ancho _ _ _010001 =[Ancho _ _ _X1y11]( 9 )
La relación de transformación del espejo vertical se puede describir formalmente de la siguiente manera:
[ x 1 y 1 1 ] = [ x 0 y 0 1 ] [ 1 0 0 0 − 1 0 0 H ocho 1 ] (10) \begin{bmatrix }x_1 & y_1 & 1 \end{bmatrix} = \begin{bmatrix} x_0 & y_0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & Altura & 1 \end{bmatrix} \tag{10}[X1y11]=[X0y01] 10001Él i g h t001 ( 10 )
Defina:
[ x 0 y 0 1 ] = [ x 1 y 1 1 ] [ 1 0 0 0 − 1 0 0 H ocho 1 ] (11) \begin{bmatrix}x_0 & y_0 & 1 \end {bmatrix } = \begin{bmatrix}x_1&y_1&1\end{bmatrix}\begin{bmatrix}1&0&0\\0&-1&0\\0&Altura&1\end{bmatrix}\ tag{11}[X0y01]=[X1y11] 10001Él i g h t001 ( 11 )


transposición de imagen

La transposición de imagen consiste en transformar el xx de píxeles de la imagen.coordenada x y yyLas coordenadas y se intercambian, el tamaño de la imagen cambiará después de la transposición y se intercambiarán la altura y el ancho.

La fórmula de transformación transpuesta es la siguiente:
[ x 1 y 1 1 ] = [ x 0 y 0 1 ] [ 0 1 0 1 0 0 0 0 1 ] (12) \begin{bmatrix}x_1 & y_1 & 1 \end{ bmatrix} = \begin{bmatrix}x_0 & y_0 & 1 \end{bmatrix} \begin{bmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} \tag{ 12}[X1y11]=[X0y01] 010100001 ( 12 )
La matriz inversa de la matriz transpuesta sigue siendo ella misma.


Ampliar imagen

El escalado de imagen significa que la imagen se amplía o reduce según una proporción específica.

Asumir imagen xxLa relación de escala en la dirección del eje x esS x S_xSx y y La relación de escala en la dirección del eje y esS y S_ySy, la expresión de transformación correspondiente es:
[ x 1 y 1 1 ] = [ x 0 y 0 1 ] [ S x 0 0 0 S y 0 0 0 1 ] = [ x 0 ⋅ S xy 0 ⋅ S y 1 ] ( 13 ) \begin{bmatrix} x_1 & y_1 & 1 \end{bmatrix} = \begin{bmatrix} x_0 & y_0 & 1 \end{bmatrix} \begin{bmatrix} S_x & 0 & 0 \\ 0 & S_y & 0 \ \ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix}x_0 \cdot S_x & y_0 \cdot S_y & 1 \end{bmatrix} \tag{13}[X1y11]=[X0y01] Sx000Sy0001 =[X0Sxy0Sy1]( 13 )
Derive la ecuación:
[ x 0 y 0 1 ] = [ x 1 y 1 1 ] [ 1 S x 0 0 0 1 S y 0 0 0 1 ] = [ x 1 S xy 1 S y 1 ] ( 14 ) \begin {bmatrix} x_0 & y_0 & 1 \end{bmatrix} = \begin{bmatrix}x_1 &y_1&1\end{bmatrix}\begin{bmatrix}\frac{1}{S_x}&0&0 \\0&\frac{1 }{S_y}&0\\0&0&1\end{bmatrix}=\begin{bmatrix}\frac{x_1}{S_x}&\frac{y_1}{S_y}& 1\end{bmatrix} \tag{14}[X0y01]=[X1y11] Sx1000Sy10001 =[SxX1Syy11]( 14 )
En la imagen de destino calculada directamente de acuerdo con la fórmula de escala, es posible que algunas coordenadas de origen del mapeo no sean números enteros, por lo que no se puede encontrar la posición del píxel correspondiente. Por ejemplo, cuando la imagen se amplía 2 veces, es decir,S x = S y = 2 S_x = S_y = 2Sx=Sy=2 , amplía los píxeles de la imagen(0, 1) (0,1)( 0 ,1 ) Corresponde al píxel (0, 0,5) (0, 0,5)de la imagen original( 0 ,0.5 ) , que no es una posición de coordenadas entera y su valor en escala de grises no se puede extraer.

Se debe realizar algún tipo de aproximación, una estrategia simple es simplemente usar la posición de coordenadas enteras más cercana ( 0 , 0 ) (0,0)( 0 ,0 ) o( 0 , 1 ) (0,1)( 0 ,El valor de gris del píxel en 1 ) , que también es el algoritmo de interpolación del vecino más cercano.


rotacion de imagen

La rotación generalmente se refiere a rotar una imagen en un cierto ángulo alrededor de un punto específico. La rotación también suele cambiar el tamaño de la imagen. Como se muestra abajo

Insertar descripción de la imagen aquí

P ( x 0 , y 0 ) P(x_0, y_0)P ( x0,y0) gira en sentido antihorario alrededor del origen formando un ánguloθ \thetaθ aP 1 ( x 1 , y 1 ) P1(x_1, y_1)P 1 ( x1,y1),令L = ∣ OP ∣ = x 2 + y 2 L = |OP| = \sqrt{x^2 + y^2}l=∣OP _=X2+y2 ,有: sen α = y 0 / L sen \alpha = y_0/Ls en α=y0/ Lcos α = x 0 / L cos \alpha = x_0/Lcosα_ _=X0/ l .

Llegar a P 1 P1P 1 ,ecuación:
sin ( α + θ ) = y 1 / L = cos θ sin α + sin θ cos α cos ( α + θ ) = x 1 / L = cos θ cos α − sin θ sin α ( 15) sin(\alpha + \theta) = y_1 / L = cos \theta sin \alpha + sin \theta cos \alpha \tag{15} \\ cos(\alpha + \theta) = x_1/L = cos \ theta cos \alpha - sin \theta sin \alphas en ( un+i )=y1/ l=cos θ s en α+s en θ cos aporque ( un+i )=X1/ l=porque θ porque αs en θ s en a( 15 )
Denota:
x 1 = cos θ x 0 − sin θ y 0 y 1 = cos θ y 0 + sin θ x 0 (16) x_1 = cos \theta x_0 - sin \theta y_0 \tag{16}\ \ y_1 = cos \theta y_0 +sen \theta x_0X1=porque θ x0s en θ y0y1=porque θ y0+s en θx _0( 16 )
Derivemos la matriz:
[ x 1 y 1 1 ] = [ x 0 y 0 1 ] [ cos θ sin θ 0 − sin θ cos θ 0 0 0 1 ] (17) \begin{bmatrix} x_1 & 1. y_1 & 1 \end {bmatrix} = \begin{bmatrix} x_0 & y_0 & 1 \end{bmatrix}\begin{bmatrix} cos \theta & sin \theta & 0 \\ -sin \theta & cos \theta & \\ 0&0&1\end{bmatrix}\tag{17}[X1y11]=[X0y01] porque θs en θ0s en θporque θ0001 ( 17 )
Especifica:
[ x 0 y 0 1 ] = [ x 1 y 1 1 ] [ cos θ − sin θ 0 sin θ cos θ 0 0 0 1 ] (18) \begin{bmatrix} x_0 & y_0 &1 \end {bmatrix} = \begin{bmatrix}x_1&y_1&1\end{bmatrix}\begin{bmatrix} cos\theta&-sin\theta&0\\sin\theta&cos\theta&0\ \0&0&1\end{bmatrix}\tag{18}[X0y01]=[X1y11] porque θs en θ0s en θporque θ0001 ( 18 )
La discusión anterior se basa en el origen, que es la esquina inferior izquierda de la imagen, como centro.¿Cómo rotar alrededor de cualquier punto específico?

Simplemente combine las operaciones de traslación y rotación: primero traslade el sistema de coordenadas, luego gire alrededor del nuevo origen de coordenadas y luego traslade el nuevo origen de nuevo al origen del sistema de coordenadas original. Este proceso se puede resumir en los siguientes 3 pasos:

  1. Cambie el sistema de coordenadas I a II;
  2. Gira el punto en el sentido de las agujas del reloj θ \thetaángulo θ ;
  3. Cambie el sistema de coordenadas II nuevamente a I;

Tomando como ejemplo la rotación alrededor del centro de la imagen, como se muestra en la figura siguiente, el sistema de coordenadas I tiene el origen en la esquina superior izquierda de la imagen y xx a la derecha.La dirección positiva del eje x , hacia abajo esyyLa dirección positiva del eje y ; mientras que el sistema de coordenadas II toma el centro de la imagen como origen yxxLa dirección positiva del eje x , hacia abajo esyyDirección positiva del eje y . La relación de conversión entre el sistema de coordenadas I y el sistema de coordenadas II es la siguiente:

Insertar descripción de la imagen aquí

Supongamos que el ancho de la imagen es ww.w , poco altohhh , denotamos por:
[ x II y II 1 ] = [ x II y II 1 ] [ 1 0 0 0 − 1 0 0.5 w 0.5 h 1 ] (19) \begin {bmatrix} x_in \\ y_in \\ 1 \ end{bmatrix} = \begin {bmatrix} x_in \\ y_in \\ 1 \end{bmatrix} \begin {bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0.5w & 0.5h & 1 \ fin{bmatrix}\tag{19} Xy1 = Xy1 100,5w _010,5 horas001 ( 19 )
La transformación inversa correspondiente es:
[ x Ⅱ y Ⅱ 1 ] = [ x Ⅰ y Ⅰ 1 ] [ 1 0 0 0 − 1 0 − 0.5 w 0.5 h 1 ] (20) \begin{bmatrix} x_Ⅱ \\ y_Ⅱ \\ 1 \end{bmatrix} = \begin{bmatrix} x_Ⅰ \\ y_Ⅰ \\ 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ -0.5w & 0,5h & 1 \end{bmatrix} \tag{20} Xy1 = Xy1 100,5 w010,5 horas001 ( 20 )
Aquí se han implementado los pasos 1 y 3 de los tres pasos anteriores. Junto con la transformación de rotación del paso 2, se obtiene la matriz de transformación final girada alrededor del punto central de la imagen. Esta matriz es en realidad una cascada de tres matrices de transformación utilizadas en cada uno de los tres pasos de transformación. En la fórmula,W viejo W_{old}W.viejo _ _H viejo Hold_ {old}hviejo _ _W nuevo W_ {nuevo}W.nuevo _ _H nuevo H_ {nuevo}hnuevo _ _representan el ancho y alto de la imagen original y la nueva imagen respectivamente.

[ x 1 y 1 1 ] = [ x 0 y 0 1 ] [ 1 0 0 0 − 1 0 − 0.5 W viejo 0.5 H viejo 1 ] [ cos θ − sin θ 0 sin θ cos θ 0 0 0 − 1 0 0.5 W nuevo 0.5 H nuevo 1 ] = [ x 0 y 0 1 ] [ cos θ sin θ 0 − sin θ cos θ 0 0.5 ⋅ ( − W viejo ⋅ cos θ + H viejo ⋅ sin θ + W nuevo ) 0.5 ( − W antiguo ⋅ sin θ − H antiguo ⋅ cos θ + H nuevo ) 1 ] \begin{align} \begin{bmatrix} x_1 \\ y_1 \\ 1 \end{bmatrix} &= \begin{ bmatrix} x_0\\y_0\ \1\end{bmatrix}\begin{bmatrix}1&0&0\\0&-1&0\\-0.5W_{old}&0.5H_{old}&1\end {bmatrix} \begin{bmatrix} cos \theta & -sin \ theta & 0 \\ sin \theta & cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0.5W_{new } & 0.5 H_{new} & 1 \end{bmatrix}\nonumber\&= \begin{bmatrix}x_0\y_0\\1\end{ bmatrix} \begin{bmatrix} cos \theta & sin \theta & 0 \ \ -sin \theta & cos \theta & 0 \\ 0.5 \cdot(-W_{old}\cdot cos \theta + H_{old}\ cdot sin \theta + W_{new} ) & 0.5 ( - W_{old) } \cdot sin \theta - H_{old} \cdot cos \theta + H_{new}) & 1 \end{bmatrix}\tag{2 } \end{align} X1y11 = X0y01 100,5W _viejo _ _010,5H_ _viejo _ _001 porque θs en θ0s en θporque θ0001 100,5W _nuevo _ _010,5H_ _nuevo _ _001 = X0y01 porque θs en θ0,5( Wviejo _ _porque θ+hviejo _ _s en θ+W.nuevo _ _)s en θporque θ0,5 ( Wviejo _ _s en θhviejo _ _porque θ+hnuevo _ _)001 ( 21 )

La transformación inversa de la fórmula anterior es:

[ x 0 y 0 1 ] = [ x 1 y 1 1 ] [ 1 0 0 0 − 1 0 − 0.5 W nuevo 0.5 H nuevo 1 ] [ cos θ sin θ 0 − sin θ cos θ 0 0 0 − 1 0 0.5 W viejo 0.5 H viejo 1 ] = [ x 1 y 1 1 ] [ cos θ − sin θ 0 sin θ cos θ 0 − 0.5 W nuevo ⋅ cos θ − 0.5 H nuevo ⋅ sin θ + W viejo 0.5 W nuevo ⋅ sin θ − 0.5 H nuevo ⋅ cos θ + 0.5 H viejo 1 ] \begin{align} \begin{bmatrix} x_0 \\ y_0 \\ 1 \end{bmatrix} &= \begin{bmatrix}; x_1 \\ y_1 \\ 1 \ end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ -0.5W_{new} & 0.5 H_{new} & 1 \end{bmatrix} } \begin {bmatrix} cos \theta & sin \theta & 0 \\ -sin \theta & cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \ \ 0 & -1 & 0 \\ 0.5W_{old} & 0.5 H_{old} & 1 \ end{bmatrix} \nonumber \\ &= \begin{bmatrix} x_1 \\y_1 \\ 1 \end{bmatrix} \begin{bmatrix} cos \theta & -sin \theta & 0 \\ sin \theta & cos \theta & 0 \\ -0.5 W_{new} \cdot cos \theta - 0.5 H_{new} \cdot sin \theta + 0.5 W_{old} & 0.5 W_{new} \cdot sin \theta - 0.5 H_{new} \cdot cos \theta + 0.5 H_{old} & 1 \end{bmatrix}\tag{22}\end{align } } X0y01 = X1y11 100,5W _nuevo _ _010,5H_ _nuevo _ _001 porque θs en θ0s en θporque θ0001 100,5W _viejo _ _010,5H_ _viejo _ _001 = X1y11 porque θs en θ0,5W _nuevo _ _porque θ0,5H_ _nuevo _ _s en θ+0,5W _viejo _ _s en θporque θ0,5W _nuevo _ _s en θ0,5H_ _nuevo _ _porque θ+0,5H_ _viejo _ _001 ( 22 )

De acuerdo con la fórmula de transformación inversa, la transformación de rotación alrededor del centro de la imagen se puede implementar como se describe en el Algoritmo 4.1. De manera similar, se puede obtener una transformación de rotación centrada en cualquier punto.


algoritmo de interpolación

Al implementar operaciones geométricas, existen dos métodos: mapeo hacia adelante y mapeo hacia atrás.

  • El principio del método de mapeo directo es transferir la escala de grises de la imagen de entrada a la imagen de salida secuencialmente de acuerdo con los píxeles, es decir, las coordenadas de la imagen de destino se calculan a partir de las coordenadas de la imagen original: g (x 1, y 1) = f ( a ( x 0 , y 0 ) , b ( x 0 , y 0 ) ) g(x_1, y_1) = f(a(x_0, y_0), b(x_0, y_0))gramo ( x1,y1)=f ( a ( x0,y0) ,segundo ( x0,y0)) . Por ejemplo, operaciones como la traducción de imágenes y la duplicación pueden utilizar este método.
  • El método de mapeo hacia atrás es el inverso de la transformación de mapeo hacia adelante, es decir, los píxeles de salida se asignan a la imagen de entrada a su vez. Si un píxel de salida se asigna a un punto de píxel que no está en las coordenadas enteras de la cuadrícula de muestreo de la imagen de entrada, entonces su valor de gris Es necesario hacer inferencias basadas en los valores en escala de grises de las coordenadas enteras, que es la interpolación. El método de mapeo hacia atrás genera la imagen de salida píxel por píxel sin causar desperdicio computacional. Este método se usa a menudo en operaciones como escalado y rotación.

Los algoritmos de interpolación comúnmente utilizados incluyen: interpolación del vecino más cercano, interpolación bilineal e interpolación de alto orden.

interpolación del vecino más cercano

Algoritmo de interpolación del vecino más cercano, el valor del píxel de salida es el valor del píxel de su punto de muestreo más cercano en la imagen de entrada.

La interpolación del vecino más cercano se puede expresar como
f ( x , y ) = g ( round ( x ) , round ( y ) ) (23) f(x,y) = g(round(x), round(y)) \tag { veintitrés}f ( x ,y )=g ( redondo ( x ) , _ _ _redondo y ( y ) ) _( 23 )
El cálculo de la interpolación del vecino más cercano es sencillo y el efecto de salida es aceptable en la mayoría de los casos. Sin embargo, la interpolación del vecino más cercano puede producir artefactos en la imagen.

interpolación bilineal

La interpolación bilineal, también conocida como interpolación de primer orden, es una aplicación de interpolación lineal extendida a dos dimensiones y se puede obtener mediante una serie de interpolaciones lineales de primer orden.

La linealidad se refiere a la relación proporcional y rectilínea entre cantidades y matemáticamente puede entenderse como una función cuya derivada de primer orden es una constante.

La interpolación lineal se refiere a determinar linealmente el valor de un punto en la línea que conecta los dos puntos en función de los valores de los dos puntos.

El valor del píxel de salida es el 2 × 2 2 \times 2 más cercano a él en la imagen de entrada.2×2 Promedio ponderado del valor de gris de píxeles de los puntos de muestreo en el vecindario.

Supongamos que las coordenadas de vértice del cuadrado unitario conocido son f (0, 0), f (1, 0), f (0, 1), f (1, 1) f(0,0), f(1,0 ) , f(0,1), f(1,1)f ( 0 ,0 ) ,f ( 1 ,0 ) ,f ( 0 ,1 ) ,f ( 1 ,1 ) , como se muestra en la figura siguiente, cualquier puntof (x, y) f (x, y)f ( x ,y ) valor.

Primero, interpola linealmente los dos puntos en el extremo superior para obtener f (x, 0) f(x,0)f ( x ,0 )f ( x , 0 ) = f ( 0 , 0 ) + x [ f ( 1 , 0 ) − f ( 0 , 0 ) ] f(x,0) = f(0,0) + x [f (1,0)-f(0,0)]f ( x ,0 )=f ( 0 ,0 )+x [ f ( 1 ,0 )f ( 0 ,0 )]

Luego realice una interpolación lineal en los dos vértices inferiores para obtener f (x, 1) f(x,1)f ( x ,1 )f ( x , 1 ) = f ( 0 , 1 ) + x [ f ( 1 , 1 , ) − f ( 0 , 1 ) ] f(x,1) = f(0,1) + x[ f(1,1,) - f(0,1)]f ( x ,1 )=f ( 0 ,1 )+x [ f ( 1 ,1 ,)f ( 0 ,1 )]

Finalmente, se realiza una interpolación lineal en dirección vertical para obtener f ( x , y ) f(x,y)f ( x ,y )f ( x , y ) = f ( x , 0 ) + y [ f ( x , 1 ) − f ( x , 0 ) ] f(x,y) = f(x,0) + y [f (x,1) -f(x,0)]f ( x ,y )=f ( x ,0 )+y [ f ( x ,1 )f ( x ,0 )]

Organizar para obtener f ( x , y ) f(x,y)f ( x ,y ) :

f ( x , y ) = [ f ( 1 , 0 ) − f ( 0 , 0 ) ] x + [ f ( 0 , 1 ) − f ( 0 , 0 ) ] y + [ f ( 1 , 1 ) + f ( 0 , 0 ) − f ( 0 , 1 ) − f ( 1 , 0 ) ] xy + f ( 0 , 0 ) (24) f(x,y) = [f(1,0) - f(0, 0)] x + [f(0,1) - f(0,0)]y + [f(1,1) + f(0,0) - f(0,1) - f(1,0) ] xy + f(0,0) \etiqueta{24}f ( x ,y )=[ f ( 1 ,0 )f ( 0 ,0 )] x+[ f ( 0 ,1 )f ( 0 ,0 )] y+[ f ( 1 ,1 )+f ( 0 ,0 )f ( 0 ,1 )f ( 1 ,0 )] x y+f ( 0 ,0 )( 24 )

Insertar descripción de la imagen aquí

El efecto de suavizado de la interpolación bilineal puede degradar los detalles de la imagen, mientras que las discontinuidades en su pendiente pueden provocar resultados de transformación no deseados.

interpolación de orden superior

Los puntos críticos de la interpolación bilineal se pueden compensar mediante la interpolación de alto orden, que generalmente se implementa mediante convolución.

El valor del píxel de salida es el 4 × 4 4 \times 4 más cercano en la imagen de entrada.4×El promedio ponderado de los valores de píxeles de los puntos de muestreo en los 4 barrios.

Tomando la interpolación cúbica como ejemplo, utiliza el siguiente polinomio cúbico para aproximar la función de interpolación óptima teórica sinc (x) sinc(x)s en c ( x )
S ( x ) = { 1 − 2 ∣ x ∣ 2 + ∣ x ∣ 3 , 0 ≤ ∣ x ∣ < 1 4 − 8 ∣ x ∣ + 5 ∣ x ∣ 2 − ∣ x ∣ 3 , 1 ≤ ∣ x ∣ < 2 0 ∣ x ∣ ≥ 2 (25) S(x) = \left \{ \begin{matrix} \tag{25} 1 - 2 |x|^2 + |x|^3 , & 0\le | x| < 1 \\ 4 - 8 |x| + 5 |x|^2 - |x|^3, & 1 \le |x| < 2 \\ 0 & |x| \ge 2 \end{matrix} \right.S ( x )= 12∣x∣ _ _2+x 3 ,48∣x∣ _ _+5∣x∣ _ _2x 3 ,00x <11x <2x 2( 25 )
En la fórmula anterior∣ x ∣ |x|x son los píxeles circundantes a lo largo dexxLa distancia entre la dirección x y el origen. Píxel a encontrar(x, y) (x,y)( X ,El valor de gris de y ) se obtiene mediante interpolación ponderada de los valores de gris de 16 puntos a su alrededor. La fórmula de cálculo es la siguiente:
f (x, y) = f (i + u, j + v) = ABC (26) f(x,y) = f(i+u, j+v) = ABC \tag {26}f ( x ,y )=f ( yo+,j+v )=A B C( 26 )
其中
A = [ S ( 1 + v ) S ( v ) S ( 1 − v ) S ( 2 − v ) ] TC = [ S ( 1 + u ) S ( u ) S ( 1 − u ) S ( 2 − u ) ] B = [ f ( i − 1 , j − 1 ) f ( i − 1 , j ) f ( i − 1 , j + 1 ) f ( i − 1 , j + 2 ) f ( i , j − 1 ) f ( i , j ) f ( j , j + 1 ) f ( i , j + 2 ) f ( i + 1 , j − 1 ) f ( i + 1 , j ) f ( i + 1 , j + 1 ) f ( i + 1 , j + 2 ) f ( i + 2 , j − 1 ) f ( i + 2 , j ) f ( i + 2 , j + 1 ) f ( i + 2 , j + 2 ) ] A = \begin{bmatrix} S(1+v) \\ S(v) \\ S(1-v) \\ S(2-v) \end{bmatrix} ^T \nonumber \\ C = \begin{bmatrix} S(1+u) \\ S(u) \\ S(1-u) \\ S(2-u) \end{bmatrix} \nonumber \\ B = \begin{bmatrix } f(i-1, j-1) & f(i-1, j) & f(i-1,j+1) & f(i-1, j+2) \nonumber \\ f(i, j-1) & f(i, j) & f(j, j+1) & f(i, j+2) \nonumber \\ f(i+1, j-1) & f(i+1, j) & f(i+1, j+1) & f(i+1, j+2) \nonumber \\ f(i+2, j-1) & f(i+2, j) & f( i+2, j+1) y f(i+2, j+2) \end{bmatrix}A= S ( 1+v )S ( v )S ( 1v )S ( 2v ) tC= S ( 1+)S ( tu )S ( 1)S ( 2tu ) B= f ( yo1 ,j1 )f ( yo ,j1 )f ( yo+1 ,j1 )f ( yo+2 ,j1 )f ( yo1 ,j )f ( yo ,j )f ( yo+1 ,j )f ( yo+2 ,j )f ( yo1 ,j+1 )f ( j ,j+1 )f ( yo+1 ,j+1 )f ( yo+2 ,j+1 )f ( yo1 ,j+2 )f ( yo ,j+2 )f ( yo+1 ,j+2 )f ( yo+2 ,j+2 )
El método de interpolación cúbica se utiliza generalmente en visualizaciones rasterizadas, lo que permite operaciones de escalado en cualquier proporción manteniendo bien los detalles de la imagen.

Continuará ~

Supongo que te gusta

Origin blog.csdn.net/sinat_41752325/article/details/132988188
Recomendado
Clasificación