5 votos

Deformación 2D Puntos (Cuadrado -> Triángulo... más o menos)

Estoy en una extraña situación en la que tengo que convertir los colores de un "blanco+verde" espacio de color a un espacio de color RGB:

(w,g)(R,G,B) w,g,R,G,B[0,1]

Esencialmente, tengo que tomar un "blanco" (w) y "verde" (g) coordinar y asignar a algún punto en la mitad de la R=B avión, donde se GR (imagen de abajo es de gama, triángulo negro excluido):

enter image description here

Yo he venido para arriba con una lista de cuatro conocidos asignan puntos. Desde R=B me voy a referir a ambos como R. La constante p(0,1) a continuación es un valor que se puede ajustar a gusto (lo siento por incorrecta la notación):

f:(w,g)(R,G)f(0,0)(0,0)f(1,0)(1,1)f(1,1)(p,1)f(0,1)(0,1)

Gráficamente, se parece a esto:

enter image description here

Me estoy tomando un cuadrado y de deformación de un triángulo, donde la parte inferior derecha del punto de la plaza se convierte en el punto superior derecho del triángulo, y el punto superior derecho de la plaza se mueve a la izquierda a lo largo del borde superior.

La línea de puntos que debe permanecer recta y la deformación de cada mitad de la plaza (ambos lados de la línea de puntos) debe ser lineal-estas son las opciones arbitrarias, pero parece que tiene sentido para mi situación, y es más fácil que pensar. Si se sobre-complica las matemáticas, sin embargo, no es necesario permanecer de esa manera (lo siento, es tan mal definido -- la naturaleza del problema tiene algunos aspectos subjetivos).

Mi pregunta es: necesito ayuda para crear f(w,g). Yo lo entiendo así, gráficamente, pero realmente no puedo conseguir mi cabeza alrededor de las matemáticas, por alguna razón.

Lo siento por todos los errores de notación anterior, en realidad no soy de matemáticas chico, sólo estoy adivinando.

1voto

lowglider Puntos 562

Tienes dos triángulos, y a los que desee asignar ellos linealmente a otros dos triángulos. Así que vamos a ello.

El triángulo superior izquierdo, es decir, el g>w de los casos, es fácil: el g eje permanece fija, mientras que el w eje es simplemente reducido por un factor de p, lo que nos da el mapa de (w,g)(pw,g).

El triángulo inferior derecho, donde g<w, es ligeramente más complicado. Podemos empezar por considerar el caso de p=1, donde claramente el g coordinar es exprimida y todo el triángulo sólo se asigna a la línea de R=G=w, lo que nos da la degenerados mapa de (w,g)(w,w). Más generalmente, si p<1, seguiremos mapa de la w eje a la línea, pero también tendremos que restar un múltiplo de gR, de modo que (1,1) mapas a (p,1) en lugar de (1,1). Un poco de pensamiento muestra que la correcta factor de escala es 1p, lo que nos da el mapa de (w,g)(w(1p)g,w).

Poniendo a estos en conjunto, el mapa completo es simplemente:

f(w,g) = \begin{cases}
(p w, g) & \text{if } g > w \\
(w - (1-p)g, w) & \text{otherwise}
\end{casos}

Para asegurarse de que el resultado de la función es continua, se puede comprobar que, en el límite de la línea de w=g, las dos piezas de hecho se unen:

w=gw(1p)g=wg+pg=pw


Ps. Si prefieres algo más sistemático y de aplicación general que el razonamiento anterior, también puede derivar estas fórmulas utilizando álgebra lineal.

El primer paso es tener en cuenta que vamos a necesitar una función definida a tramos compone de dos lineal (bueno, afín, en realidad) de los mapas, uno para cada triángulo. El segundo paso a tener en cuenta es que cualquier afín mapa de h:R2R puede ser escrita como:

h(x,y)=a+bx+cy

donde a, b y c son constantes. Desde nuestro espacio de salida es también de dos dimensiones, vamos a necesitar dos de estos mapas para cada triángulo, de manera que nuestra función final tendrá este aspecto:

f(w,g) = \begin{cases}
(a_{11} + b_{11}w + c_{11}g,\, a_{12} + b_{12}w + c_{12}g) & \text{if } (w, g) \in \text{triangle 1} \\
(a_{21} + b_{21}w + c_{21}g,\, a_{22} + b_{22}w + c_{22}g) & \text{if } (w, g) \in \text{triangle 2}
\end{casos}

Ahora, dado que los puntos de esquina del original y se asigna triángulos, podemos encontrar los coeficientes a, b y c para cada triángulo y cada una de las coordenadas de salida al resolver el sistema de tres ecuaciones lineales:

Z1=a+bw1+cg1Z2=a+bw2+cg2Z3=a+bw3+cg3

donde (wi,gi) están las coordenadas originales de cada uno de los puntos de esquina, (Ri,Gi) son las coordenadas de la transformación de los puntos de esquina, y Zi representa a Ri o Gi dependiendo de coordenadas que estamos resolviendo los coeficientes de.

Así, por ejemplo, para el segundo triángulo tenemos los conocidos puntos de esquina (0,0)(0,0), (1,0)(1,1) y (1,1)(p,1), que nos da las siguientes ecuaciones para las R coordenadas de salida:

0=a21+b210+c2101=a21+b211+c210p=a21+b211+c211

Usted puede resolver este utilizando, por ejemplo, la eliminación Gaussiana, pero en este caso que sería una exageración: es obvio a partir de la primera ecuación que a21=0) y de la segunda ecuación que b21=1. Conectar aquellos que en la última ecuación, a continuación, nos deja con p=1+c21 e lo c21=p1.

Repetir el proceso para los otros tres conjuntos de coeficientes se deja como un ejercicio simple.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X