Transformaciones lineales
Con una transformación lineal se tiene
$$\begin{pmatrix}x'\\y'\end{pmatrix}= \begin{pmatrix}a&b\\c&d\end{pmatrix}\cdot \begin{pmatrix}x\\y\end{pmatrix}$$
y quieres encontrar $a,b,c,d$ . Se pueden establecer un montón de ecuaciones para esto:
$$\begin{pmatrix} x_1 & y_1 & 0 & 0 \\ 0 & 0 & x_1 & y_1 \\ x_2 & y_2 & 0 & 0 \\ 0 & 0 & x_2 & y_2 \\ \vdots & \vdots & \vdots & \vdots \\ x_n & y_n & 0 & 0 \\ 0 & 0 & x_n & y_n \end{pmatrix}\cdot \begin{pmatrix}a\\b\\c\\d\end{pmatrix}\approx \begin{pmatrix}x_1'\\y_1'\\x_2'\\y_2'\\\vdots\\x_n'\\y_n'\end{pmatrix}$$
Utilice aproximación lineal por mínimos cuadrados para determinar $a$ a través de $d$ y ya está.
En realidad, también podría determinar los parámetros para $a,b$ y $c,d$ por separado, ya que las ecuaciones correspondientes son independientes. La vista combinada anterior es beneficiosa en los casos en los que se desean restricciones adicionales. Así, por ejemplo, podría querer $a=d$ y $b=-c$ para aplicar las transformaciones de similitud que preservan el ángulo. De este modo, se tiene un único sistema de ecuaciones en dos variables.
Transformaciones afines
Aquí está su mapa
$$\begin{pmatrix}x'\\y'\\1\end{pmatrix}= \begin{pmatrix}a&b&c\\d&e&f\\0&0&1\end{pmatrix}\cdot \begin{pmatrix}x\\y\\1\end{pmatrix}$$
por lo que tienes dos parámetros más para afinar, y dos columnas más en tu matriz. Sólo tienes que rellenarlas con $1$ , como $c$ y $f$ se añadirán al resultado tal cual.
Transformaciones proyectivas
Sinceramente, no tengo una solución sencilla y genérica para esto. El problema es que se obtiene algo como
$$\begin{pmatrix}x'\\y'\\1\end{pmatrix}= \lambda\begin{pmatrix}a&b&c\\d&e&f\\g&h&k\end{pmatrix}\cdot \begin{pmatrix}x\\y\\1\end{pmatrix}$$
y no sabes que $\lambda$ o bien. Puede utilizar la última fila para eliminar el $\lambda$ pero entonces se obtienen ecuaciones como estas:
\begin{align*} (gx+hy+k)x' &= ax+by+c \\ (gx+hy+k)y' &= dx+ey+f \end{align*}
Expresado en forma de matriz se podría escribir como
$$\begin{pmatrix} x_1 & y_1 & 1 & 0 & 0 & 0 & -x_1x_1' & -y_1x_1' & -x_1' \\ 0 & 0 & 0 & x_1 & y_1 & 1 & -x_1y_1' & -y_1y_1' & -y_1' \\ x_2 & y_2 & 1 & 0 & 0 & 0 & -x_2x_2' & -y_2x_2' & -x_2' \\ 0 & 0 & 0 & x_2 & y_2 & 1 & -x_2y_2' & -y_2y_2' & -y_2' \\ \vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots\\ x_n & y_n & 1 & 0 & 0 & 0 & -x_nx_n' & -y_nx_n' & -x_n' \\ 0 & 0 & 0 & x_n & y_n & 1 & -x_ny_n' & -y_ny_n' & -y_n' \end{pmatrix}\cdot \begin{pmatrix}a\\b\\c\\d\\e\\f\\g\\h\\k\end{pmatrix}\approx \begin{pmatrix}0\\0\\0\\0\\\vdots\\0\\0\end{pmatrix}$$
Pero si aplicas la optimización estándar de mínimos cuadrados a esto, acabarás poniendo todas tus variables a cero, ya que al utilizar la matriz cero como matriz de transformación se eliminarán todos los errores. Para evitar esto, es posible que tenga que añadir algo para forzar una matriz distinta de cero. Por ejemplo, en la mayoría de las situaciones su matriz de transformación tendrá una matriz no nula $k$ y, por lo tanto, puede elegir que esa entrada sea igual a $1$ .
$$\begin{pmatrix} x_1 & y_1 & 1 & 0 & 0 & 0 & -x_1x_1' & -y_1x_1' \\ 0 & 0 & 0 & x_1 & y_1 & 1 & -x_1y_1' & -y_1y_1' \\ x_2 & y_2 & 1 & 0 & 0 & 0 & -x_2x_2' & -y_2x_2' \\ 0 & 0 & 0 & x_2 & y_2 & 1 & -x_2y_2' & -y_2y_2' \\ \vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots\\ x_n & y_n & 1 & 0 & 0 & 0 & -x_nx_n' & -y_nx_n' \\ 0 & 0 & 0 & x_n & y_n & 1 & -x_ny_n' & -y_ny_n' \end{pmatrix}\cdot \begin{pmatrix}a\\b\\c\\d\\e\\f\\g\\h\end{pmatrix}\approx \begin{pmatrix}x_1'\\y_1'\\x_2'\\y_2'\\\vdots\\x_n'\\y_n'\end{pmatrix}$$
Ahora puedes resolver esto. Si tienes cuatro puntos obtendrías exactamente la transformación proyectiva de ese post al que haces referencia. Si tienes más y se ajustan a una transformación proyectiva común, deberías obtener esta transformación. Si no se ajustan exactamente a una transformación proyectiva, tienes que tener cuidado con los errores que realmente estás minimizando. Ya no está minimizando la suma de las distancias al cuadrado entre los puntos predichos y los reales. Eso es porque la forma en que el sistema de ecuaciones se establece, usted está utilizando las posiciones reales transformadas en el lado izquierdo de la ecuación, así, pero si usted calcula los errores al cuadrado que se utiliza las coordenadas previstas allí. Si tu transformación proyectiva es casi afín, es decir, si $\lvert g\rvert,\lvert h\rvert\ll1$ entonces es probable que esto no importe demasiado.