Author Topic: Alineación de Canales  (Read 18188 times)

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
    • View Profile
Alineación de Canales
« Reply #45 on: 2008 December 16 11:37:39 »
Quote from: "cavamen"
Perdonad que me meta en esto sin saber demasiado pero, ¿sería posible aprovechar esta herramienta para corregir la coma de los telescopios?

Es que según iba leyendo, me parecía que tienen bastante en común estos dos problemas.

Sergio


Hola Sergio:

¡Ojala! pero sospecho que no.
Se puede conseguir que en la esquina en vez de tener tres elipses de distinto color, se superpongan las tres y tengas una elipse blanca, pero con lo que veo que se esta haciendo, la forma de elipse o pera no va a cambiar.
Me alegraría equivocarme.........

Saludos.

Manolo L.
Saludos.

Manolo L.

Offline caliu

  • PixInsight Addict
  • ***
  • Posts: 210
    • View Profile
    • http://www.caliu.fotografiaastronomica.com
Alineación de Canales
« Reply #46 on: 2008 December 16 12:40:38 »
Supongo que lo de la coma no debe ser muy dificil, en PS hay una herramienta de correcciòn geometrica y habiendola allí seguro que aqui la bordaban :lol:  :lol:  :lol: , lo dificil creo que seria una herramienta capaz de corregir la rotaciòn de campo, eso si que seria la caña :P  :P  :P

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
    • View Profile
Alineación de Canales
« Reply #47 on: 2008 December 16 12:53:55 »
Quote from: "caliu"
Supongo que lo de la coma no debe ser muy dificil, en PS hay una herramienta de correcciòn geometrica y habiendola allí seguro que aqui la bordaban :lol:  :lol:  :lol: , lo dificil creo que seria una herramienta capaz de corregir la rotaciòn de campo, eso si que seria la caña :P  :P  :P


Hola Caliu.

Pues me alegraría mucho,  pero para conseguirlo supongo que hay que seguir otros caminos como deconvoluciones o similares....., que poco tienen que ver con la alineación de canales.
O al menos eso pienso yo, que dicho sea de paso, no soy una autoridad en el tema.

Saludos.

Manolo L.
Saludos.

Manolo L.

Offline David Serrano

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 503
    • View Profile
Alineación de Canales
« Reply #48 on: 2008 December 16 14:19:33 »
Hace un rato puse un post en la sección de desarrollo en el que muestro un script que implementa los fundamentos básicos para un corrector de coma. Es todavía muy pobre, pero muestra mi plan de ataque.
--
 David Serrano

Offline David Serrano

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 503
    • View Profile
Alineación de Canales
« Reply #49 on: 2008 December 16 14:20:30 »
Ah, y la rotación de campo se soluciona de la misma manera que tengo pensado hacer la correción de coma. Simplemente se usa otra PSF (una en forma de arco) y listos.
--
 David Serrano

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • View Profile
    • http://www.astrosurf.com/brego-sky
Alineación de Canales
« Reply #50 on: 2008 December 17 15:03:24 »
Hola,

pues ya tengo una versión más completa, que por lo menos realiza el proceso automáticamente des del terminal. Aquí esta el corazón:

Code: [Select]

template <class P>
static void GetStars( StarDetector::star_list& S, const Generic2DImage<P>& image , int channel)
{
    Image img(image.Width(),image.Height(),image.ColorSpace());
    img.Assign(image);

    Image tmp(img.Width(),img.Height());
    size_type N = img.NumberOfPixels();
    const Image::sample *original = img[channel];
    Image::sample *temporal = tmp[0];

    for(size_type i=0;i<N;++i,++original,++temporal) (*temporal) = (*original);

    ImageVariant aux(&tmp);
    StarDetector sd(aux);

    S = sd.S;
}

static void CorrectImage(const Array<Homography>& H, const Image& img, Image &final) {

    size_type channels = img.NumberOfChannels();
    BicubicPixelInterpolation interType;

    for(size_type c=0; c<channels; ++c) {
        PixelInterpolation::Interpolator<Image::pixel_traits> *interpolator
            = interType.NewInterpolator((Image::pixel_traits *)0, img.PixelData(c), img.Width(), img.Height());
        Image::sample *target = final[c];

        for (size_type new_y = 0; new_y < final.Height(); ++new_y) {
            for (size_type new_x = 0; new_x < final.Width(); ++new_x,++target) {
                FPoint p = H[c]( new_x, new_y );
                if (p.x >= 0 && p.y >= 0 && p.x < img.Width() && p.y < img.Height()) *target = (*interpolator)(p);
            }
        }
        delete interpolator;
    }    
}

template <class P> inline
static void __DoChannelCorrection( Generic2DImage<P>& img)
{
     Array<Star> SR;
     Array<Star> SG;
     Array<Star> SB;
     Console console;

     GetStars(SR,img,0);
     GetStars(SG,img,1);
     GetStars(SB,img,2);

     StarMatcher SM_RtoG( SR, SG);
     StarMatcher SM_RtoB( SR, SB);

     Array<FPoint> P1_RtoG,P2_RtoG;
     Array<FPoint> P1_RtoB,P2_RtoB;

     for ( StarMatcher::match_list::const_iterator i = SM_RtoG.M.Begin(); i != SM_RtoG.M.End(); ++i )
     {
         P1_RtoG.Add( SR[i->i1].pos );
         P2_RtoG.Add( SG[i->i2].pos );
     }

     for ( StarMatcher::match_list::const_iterator i = SM_RtoB.M.Begin(); i != SM_RtoB.M.End(); ++i )
     {
         P1_RtoB.Add( SR[i->i1].pos );
         P2_RtoB.Add( SB[i->i2].pos );
     }

     if ( P1_RtoG.Length() < 6 )
         throw Error( String().Format( "%u star pair match(es) found (Red-Green)- need at least six matched star pairs.", P1_RtoG.Length() ) );
     if ( P1_RtoB.Length() < 6 )
         throw Error( String().Format( "%u star pair match(es) found (Red-Blue)- need at least six matched star pairs.", P1_RtoB.Length() ) );
     
     RANSACPointMatcher RM_RtoG( P1_RtoG, P2_RtoG, 1000 );
     RANSACPointMatcher RM_RtoB( P1_RtoB, P2_RtoB, 1000 );

     if ( (RM_RtoG.M1.Length() < 6) || (RM_RtoB.M1.Length() < 6) )
         throw Error( "RANSAC: Unable to find a valid set of star pair matches." );

     Array<Homography> H(3);

     H[1] = RM_RtoG.H;
     H[2] = RM_RtoB.H;

     Image image(img.Width(),img.Height(),img.ColorSpace());
     Image final(img.Width(),img.Height(),img.ColorSpace());
     Image::sample backgroundColor = 0;

     image.Assign(img);
     final.Fill(backgroundColor);

     CorrectImage(H,image,final);

     ImageWindow win( 1, 1, final.IsColor() ? 3 : 1, 32, true, final.IsColor(), true, "Corrected" );
     if ( win.IsNull() )
         throw Error( "Unable to create image window: Mask" );

     ImageVariant imgOut = win.MainView().Image();
     imgOut.CopyImage( final );
     win.Show();
     win.ZoomToFit( false );
}



Ahora queda poner estas funciones en una clasilla para que se pueda utilizar otro dia en algún proceso que lo requiera y claro generar un dialogo para controlar el proceso. En el dialogo se podría activar el modo automático o si es una imagen donde no hay estrellas pues se debería introducir manualmente las matrices :) mmm no se, quizás se podría guardar algún tipo de fichero para no tener que introducir manualmente las mismas matrices? Ya diréis ;)

Oriol

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
    • View Profile
Alineación de Canales
« Reply #51 on: 2008 December 18 05:51:46 »
Hola Oriol:

Esta tarde echaré un vistazo a la nueva versión.
Yo con la antigua me he hecho dos scripts: uno para alinear el rojo y otro para alinear el azul. Cada uno tiene introducida la matriz correspondiente que obtuve en Tiermes, y por ahora me ha dado buenos resultados en todas fotos que he realizado con el gran angular a f:7,1.
Los resultados mas espectaculares como ya he indicado es con las trazas. De hecho no me decidía a usar este objetivo para este tipo de foto y solo estaba usando el EF 50mm menos afectado por este fenómeno, aunque cuando se hacen de la zona ecuatorial se requiere un campo más amplio de lo que da este para que se diferencie la curvatura que hay en ambos hemisferios.
En Tiermes, en octubre, quedé frustrado porque con el de 50 mm no pude lograr un encuadre englobando a la esquina de las Termas y el Polo. En mi próxima visita lo intentaré con el de 20 mm, pues es una foto que llevo persiguiendo dos años y ahora creo que está a mi alcance.

Saludos.
Saludos.

Manolo L.

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • View Profile
    • http://www.astrosurf.com/brego-sky
Alineación de Canales
« Reply #52 on: 2008 December 18 06:00:13 »
Uy Manolo,

lo que he puesto es C++ no lo podrás usar como script :? lo siento. Espero que en la próxima realse de PI se pueda usar como una herramienta más de PI :) De momento tendrás que continuar con el script que tienes, disculpa las molestias,

Oriol

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
    • View Profile
Alineación de Canales
« Reply #53 on: 2008 December 18 07:07:57 »
Quote from: "OriolLehmkuhl"
Uy Manolo,

lo que he puesto es C++ no lo podrás usar como script :? lo siento. Espero que en la próxima realse de PI se pueda usar como una herramienta más de PI :) De momento tendrás que continuar con el script que tienes, disculpa las molestias,

Oriol

Hola Oriol:

Ya me extrañaba que el resultado fuera este:

Reading 1 image(s):
G:/FotosNuevas/A2008/10Octubre/081026Tiermes/Tiermes081026/400d/IMG_6856.CR2
Decoding Canon EOS 400D DIGITAL file (3906x2602 pixels, ISO=1600, Exposure=1/30s): 100%
Loading raw image: 100%

run -x=auto C:/PCL/src/scripts/AlineacionCanalesB.js

Processing script file: C:/PCL/src/scripts/AlineacionCanalesB.js
*** Error [109]: C:/PCL/src/scripts/AlineacionCanalesB.js, line 1: SyntaxError: missing ; before statement
; template <class P>
..................^

Y no ha sido ninguna molestia. Estoy encantado de probar lo que me echéis.
Yo aunque sea con el script de una forma tan artesana estoy tan contento como un niño con "objetivo" nuevo.

Saludos.

Manolo L.
Saludos.

Manolo L.