Tengo una imagen de 1443x998 de las estrellas (tomada con una cámara de 35 mm y luego escaneada) con las siguientes estrellas en las siguientes ubicaciones de píxeles:
Altair x=782, y=532 [19h50m46.9990s RA, +08 52'05.959'' DEC]
Sualocin, x=311, y=146 [20h 39m 38.287s +15 54'43.49'' DEC]
Denebokab, x=1023, y=815 [19h25m29.9005s +03 06' 53.191'' DEC]
¿Qué función matemática convierte la ubicación de píxeles en RA / DEC y viceversa? Notas:
Las estrellas brillantes son manchas en la imagen; las coordenadas anteriores son aproximadamente el centro de la burbuja, pero pueden estar apagadas en + -2 píxeles.
Sé que puedo rotar la esfera celeste para que el centro de mi imagen tenga coordenadas polares 0,0. Entonces, la verdadera pregunta es "cómo encontrar esta rotación" (pero vea el siguiente punto).
Si la elevación / acimut fuera lineal en las imágenes, esto sería fácil (er), pero no lo son: medir la distancia angular con fotografías
Puedo proporcionar ubicaciones de píxeles de más estrellas si eso ayuda. Creo que 3 debería ser suficiente, pero podría estar equivocado.
Traté de elegir 3 estrellas que se "extendieron" en la imagen (porque creo que eso reduce el error, no estoy seguro), pero no estoy seguro de haber tenido éxito.
Estoy haciendo esto para varias imágenes y me gustaría un método general.
Hacer esto me ayudará a identificar estrellas más débiles / objetos Messier / etc en la imagen.
Estoy seguro de que muchos astrofotógrafos quieren hacer esto, pero no han encontrado ningún software existente que lo haga.
EDITAR: ¡Gracias, whuber! La proyección gnomónica es lo que me faltaba. Ya había hecho esto suponiendo una transformación lineal:
(* convert RA/DEC to xyz coords on celestial psuedo-sphere of radius 1 *)
radecxyz[ra_,dec_] =
{Cos[ra/12*Pi]*Cos[dec/180*Pi],Sin[ra/12*Pi]*Cos[dec/180*Pi],Sin[dec/180*Pi]};
(* I no longer have any idea how this works *)
astrosolve[x_,y_,z_,xwid_,ywid_] := Module[{a,m,ans,nullans},
m=Array[a,{2,3}];
temp=Solve[{
m.radecxyz[x[[1]],x[[2]]]=={x[[3]]-xwid/2,x[[4]]-ywid/2},
m.radecxyz[y[[1]],y[[2]]]=={y[[3]]-xwid/2,y[[4]]-ywid/2},
m.radecxyz[z[[1]],z[[2]]]=={z[[3]]-xwid/2,z[[4]]-ywid/2}
}];
ans = m /. Flatten[temp];
nullans=Flatten[NullSpace[ans]];
If[nullans.radecxyz[x[[1]],x[[2]]]<0,nullans=-nullans];
Return[{ans,nullans}];
];
donde x, y y z eran cada una de las listas de 4 elementos que consisten en una estrella RA, declinación, coordenada x en la imagen y coordenada y en la imagen. xwid e ywid son el ancho y la altura de la imagen. En este caso:
astrosolve[
{19.8463886110, 8.8683219443, 782, 532},
{20.6606352777, 15.9120805555, 311, 146},
{19.4249723610, 3.1147752777, 1023, 815},
1443, 998]
{
{{-2250.51, -1182.52, 385.689}, {-166.12, -543.746, -2376.73}},
{0.480698, -0.861509, 0.163497}
}
Ahora, refiriéndose a "{-2250.51, -1182.52, 385.689}" como $ frow, "{-166.12, -543.746, -2376.73}" como $ srow y "{0.480698, -0.861509, 0.163497}" como $ null, Esta subrutina PHP traduce RA / DEC a coordenadas xy:
# radecxy(ra,dec): converts ra/dec to x,y using a quasi-linear transformation
function radecxy($ra,$dec) {
global $null,$frow,$srow,$xwid,$ywid;
list($x,$y,$z)=array(cos($dec)*cos($ra),cos($dec)*sin($ra),sin($dec));
$dotprod=$null[0]*$x+$null[1]*$y+$null[2]*$z;
if ($dotprod<0) {return(array(-1,-1));}
list($fx,$fy) = array($frow[0]*$x+$frow[1]*$y+$frow[2]*$z,$srow[0]*$x+$srow[1]*$y+$srow[2]*$z);
$fx+=$xwid/2;
$fy+=$ywid/2;
if ($fx<0 || $fy<0 || $fx>$xwid || $fy>$ywid) {
return(array(-1,-1));
} else {
return(array($fx,$fy));
}
}
Lamentablemente, ya no tengo idea de por qué esto funciona, pero usarlo + agregar posiciones conocidas de estrellas produce resultados tolerables (use "ver imagen" para verlo a tamaño completo):
Sin embargo, como puede ver, los resultados no son perfectos, convenciéndome de que una transformación lineal no era la respuesta correcta. Creo que gnomonic podría ser el grial que estaba buscando.
fuente
Hacer esto con el mismo grado de precisión que hacen los astrónomos profesionales sería realmente difícil. Requeriría que tenga una caracterización extremadamente precisa de las distorsiones producidas por su lente y las imperfecciones en el sensor de su cámara. Sin embargo, probablemente no necesite ese grado de precisión. Debería ser suficiente para suponer que su lente no introduce grandes cantidades de distorsión (lo cual es una buena suposición para una lente de calidad) y que el sensor de su cámara está bastante cerca de una cuadrícula perfectamente regular (lo cual es una muy buena suposición para incluso una cámara barata).
Todo lo que queda es resolver la transformación de coordenadas que describe la orientación de la cámara, es decir, la dirección en la que apuntaba y el grado en que giraba.
Entonces, lo que está buscando se llama transformación afín o mapa afín. El cual es solo un nombre elegante para una matriz por la cual multiplicarías tus coordenadas de píxeles para obtener tus coordenadas astronómicas. En el caso de un mapa afín, esta transformación puede incluir cualquier grado de rotación, escala, corte y traslación.
El significado del componente de rotación es bastante obvio. El factor de escala simplemente describe la cantidad de cielo que cubre cada píxel en términos de RA / Dec. La cizalladura es una transformación que haría que la imagen de un rectángulo se convirtiera en un paralelogramo, pero no debería haber ninguno de estos efectos en una imagen de objetos en el infinito (como las estrellas). Por último, el componente de traducción simple agrega un desplazamiento para tener en cuenta el hecho de que el píxel (x = 0, y = 0) en su imagen probablemente no corresponde a (RA = 0, Dec = 0).
Debido a que tiene 3 estrellas de referencia en su imagen, tiene suficiente información para calcular la relación entre sus coordenadas de píxeles y el RA / Dec que está buscando. Esto se haría mediante el ajuste de mínimos cuadrados lineales (no mínimos cuadrados no lineales como se mencionó anteriormente) para determinar los valores de los componentes de la matriz que mejor coincidan con sus coordenadas de píxeles con la RA / Dec conocida de las estrellas de referencia. Una vez establecida la matriz, puede aplicarla a las coordenadas de píxeles de otras estrellas para obtener su RA / Dec.
Si bien podría hacerlo con relativa facilidad, lamentablemente no estoy seguro de cómo ayudarlo a hacerlo. Implicaría alguna habilidad matemática que está un poco más allá del alcance de la foto. Soy ingeniero óptico, pero no soy muy fotógrafo; El software que usaría para esto está diseñado para que los ingenieros realicen cálculos numéricos de alta resistencia, y no es realmente una herramienta fotográfica. Puede haber maneras de hacer esto usando paquetes de software dirigidos a fotógrafos, pero no los conozco.
fuente