Author Topic: Scriptillo para fijar defectos de columnas o filas  (Read 21315 times)

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« on: 2008 August 21 13:00:46 »
Hola,

[English version below]

dejamos aqui un pequeño script para fijar defectos de columna o filas, esta basado en el metodo que Juan propuso en el tutorial de deconvolucion y tambien en un script que Sander para disimular un defecto de columna. De momento es una version preliminar, nos gustaria que ademas de una columna completa o fila a corregir se pudiera coregir un rectangulo completo y ademas Carlos muy amablemente nos a propuesto que por defecto quede selecionado el valor de pixel de la columna/fila a arreglar al abrir el Dialogo y de momento eso no lo sabemos hacer  :oops: Pero en fin, es una primera version que quizas puede ser de ayuda a alguien:



Code: [Select]

// Script to correct columns and row defects of an image
// Based on the script from the image processing tutorial:
// "NGC 5189 from GeminiObservatory..." by J.Conejero
// and on the script to average two columns by Sander:
// http://pixinsight.com/forum/viewtopic.php?t=748


#include <pjsr/Sizer.jsh>
#include <pjsr/FrameStyle.jsh>
#include <pjsr/TextAlign.jsh>
#include <pjsr/StdButton.jsh>
#include <pjsr/StdIcon.jsh>
#include <pjsr/UndoFlag.jsh>
#include <pjsr/ColorSpace.jsh>
#include <pjsr/UndoFlag.jsh>

console.hide();

var window = ImageWindow.activeWindow;

function FLUserData() {
    this.fixColumn = true;
    this.fixRow    = false;
    this.position  = 0;
}
var userData = new FLUserData;

if ( window.isNull )
    throw Error( "There is no active image window!" );

var view = window.mainView;

function FixLinesDialog() {
    this.__base__ = Dialog;
    this.__base__();

    //

    var emWidth = this.font.width( 'M' );
    var labelWidth1 = this.font.width( "Maximum planet radius (px):" );
    var spinWidth1 = 8*emWidth;

    //

    this.helpLabel = new Label( this );
    this.helpLabel.frameStyle = FrameStyle_Box;
    this.helpLabel.margin = 4;
    this.helpLabel.wordWrapping = true;
    this.helpLabel.useRichText = true;
    this.helpLabel.text = "<b>FixLines Script</b> - Script to correct  "+
        "columns or rows defects in an image."
        //

    this.size_Label = new Label( this );
    this.size_Label.text = "Column/Row position (px):";
    this.size_Label.textAlignment = TextAlign_Right|TextAlign_VertCenter;
    this.size_Label.minWidth = labelWidth1;

    this.size_SpinBox = new SpinBox( this );
    this.size_SpinBox.minValue = 0;
    this.size_SpinBox.maxValue = Math.max(view.image.height,view.image.width);
    this.size_SpinBox.value = 0 ;
    this.size_SpinBox.setFixedWidth( spinWidth1 );
    this.size_SpinBox.toolTip = "Column or Row position";

    this.size_SpinBox.onValueUpdated = function( value )
    {
        userData.position = value;
    };

    this.size_Sizer = new HorizontalSizer;
    this.size_Sizer.spacing = 4;
    this.size_Sizer.add( this.size_Label );
    this.size_Sizer.add( this.size_SpinBox );
    this.size_Sizer.addStretch();
   
    // Type of defect: label
    this.typeOfDefectLab = new Label (this);
    with (this.typeOfDefectLab) {
        text = "Type of Defect:";
        textAlignment = TextAlign_Right | TextAlign_VertCenter;
        minWidth = labelWidth1;
    }
    // Type of defect: radio buttons
    this.typeOfDefectCol = new RadioButton (this);
    with (this.typeOfDefectCol) {
        text = "Column";
        checked=true;
        onCheck = function(checked) {
            userData.fixColumn = checked;
        }
    }

    this.typeOfDefectRow = new RadioButton (this);
    with (this.typeOfDefectRow) {
        text = "Row";
        onCheck = function(checked) {
            userData.fixRow = checked;
        }
    }

    // mask blur method: sizer
    this.typeOfDefectSize = new HorizontalSizer (this);
    with (this.typeOfDefectSize) {
        spacing = 16;
        add (this.typeOfDefectLab);
        add (this.typeOfDefectCol);
        add (this.typeOfDefectRow);
        addStretch();
    }

    //
    this.ok_Button = new PushButton( this );
    this.ok_Button.text = " OK ";

    this.ok_Button.onClick = function()
    {
        this.dialog.ok();
    };

    this.done_Button = new PushButton( this );
    this.done_Button.text = " Done ";

    this.done_Button.onClick = function()
    {
        this.dialog.cancel();
    };

    this.buttons_Sizer = new HorizontalSizer;
    this.buttons_Sizer.spacing = 4;
    this.buttons_Sizer.addStretch();
    this.buttons_Sizer.add( this.ok_Button );
    this.buttons_Sizer.add( this.done_Button );

    //

    this.sizer = new VerticalSizer;
    this.sizer.margin = 6;
    this.sizer.spacing = 6;
    this.sizer.add( this.helpLabel );
    this.sizer.addSpacing( 4 );
    this.sizer.add( this.size_Sizer );
    this.sizer.add( this.typeOfDefectSize );
    this.sizer.add( this.buttons_Sizer );

    this.windowTitle = "FixLines Script";
    this.adjustToContents();
    this.setFixedSize();
}

FixLinesDialog.prototype = new Dialog;

function FixColumn( image, col, channel )
{
   image.selectedChannel = channel;
   for ( var y = 0; y < image.height; ++y )
      image.setSample( (image.sample( col-2, y, channel ) + image.sample( col+2, y , channel ))/2, col, y , channel );
//   image.selectedRect = new Rect( col, 0, col, image.height ); Ara no...
//   for ( var i = 0; i < 2; ++i )
//       image.convolve( [1,  2,   3,  2,  1,
//               2,  7,  11,  7,  2,
//               3, 11,  17, 11,  3,
//               2,  7,  11,  7,  2,
//               1,  2,   3,  2,  1] );
}

function FixRow( image, row, channel)
{
   for ( var x = 0; x < image.width; ++x )
      image.setSample( (image.sample( x, row-2, channel ) + image.sample( x , row+2, channel ))/2, x, row, channel );
   
 //  image.selectedRect = new Rect( 0, row, image.width, row ); Ara no...
  // for ( var i = 0; i < 2; ++i )
 //      image.convolve( [1,  2,   3,  2,  1,
 //              2,  7,  11,  7,  2,
 //              3, 11,  17, 11,  3,
 //              2,  7,  11,  7,  2,
 //              1,  2,   3,  2,  1] );
}

function fixLinesEngine(userData) {
   var view = window.mainView;

   if(userData.fixColumn==userData.fixRow) {
       throw Error( "A column and a row can not be fixed at the same time!" );
   }
   with (view) {
       beginProcess();

       var isGray = view.image.colorSpace==ColorSpace_Gray;

       if(userData.fixColumn) {
           if(isGray) FixColumn(image, userData.position, 0);
           else {
               console.writeln("hsjsh");
               FixColumn(image, userData.position, 0);
               FixColumn(image, userData.position, 1);
               FixColumn(image, userData.position, 2);
           }
       } else {
           if(isGray) FixRow(image, userData.position, 0);
           else {
               FixRow(image, userData.position, 0);
               FixRow(image, userData.position, 1);
               FixRow(image, userData.position, 2);
           }
       }
       endProcess();
   }
}

function main() {
    var dialog = new FixLinesDialog();
    dialog.view = view;
 //   dialog.execute();
    while ( dialog.execute() )
      fixLinesEngine(userData);
}

main();


Bueno un saludo a todos

Oriol&Ivette

----------------------------------------------------------------------

This is a script for fixing column or row defects. It is based on a method proposed by Juan in the Deconvolution tutorial and also in one proposed by Sander for hiding a column defect. This is only a preliminary version, we would like to correct not only a column or a row but also a rectangle. Furthermore, Carlos has kindly suggest that  the pixel value for the column/row  to be fixed is selected by default when the widget is called. At this time, we dont know how to implement this option :oops:, so this is a first version. We hope this can be useful for somebody

Regards

Offline Jordi Gallego

  • PixInsight Addict
  • ***
  • Posts: 279
Scriptillo para fijar defectos de columnas o filas
« Reply #1 on: 2008 August 21 14:57:45 »
Gracias por el trabajo y por compartirlo :wink:

Saludos
Jordi
Jordi Gallego
www.astrophoto.es

Offline C. Sonnenstein

  • PixInsight Addict
  • ***
  • Posts: 262
    • http://astrosurf.com/astro35mm
Scriptillo para fijar defectos de columnas o filas
« Reply #2 on: 2008 August 21 16:25:07 »
Muchas gracias por compartirlo chicos.

Bueno, esta columna de un píxel aparece después del registro y combinación de dos paneles para formar un mosaico.



El defecto es provocado por el hecho de usar imágenes con tamaños físicos muy dispares. Esto no sucede cuando se tiene en cuenta el area concreta que se va a solapar en el registro, y de esta forma se expande la imagen con el número de píxeles correcto.

Para utilizar este script solo hay que situar el cursor en modo Readout (Alt+R), leer el valor de las coordenadas que aparecen en la barra horizontal inferior de la aplicación (en este caso 3341 en el eje de coordenadas x) e introducir dicho valor en la ventana de la interface del script. En el caso de ser una fila (línea horizontal o row) también se puede seleccionar y fijar. Lógicamente no se puede (por ahora...) remover filas y columnas al mismo tiempo.



En fin, un 'scriptillo' realmente útil cuando aparece este tipo de defectos y no quedan ganas ni tiempo de corregirlos con el tampón de clonar ;)
Carlos Sonnenstein

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #3 on: 2008 August 21 23:35:01 »
Gracias Carlos por documentarlo :D

Un saludo

Offline Juan Conejero

  • PTeam Member
  • PixInsight Jedi Grand Master
  • ********
  • Posts: 7111
    • http://pixinsight.com/
Scriptillo para fijar defectos de columnas o filas
« Reply #4 on: 2008 August 22 03:54:53 »
Oriol e Ivette: Felicidades por vuetro primer script en PixInsight  :D

Si no tenéis inconveniente lo podríamos incluir en la lista de scripts que se distribuyen con PixInsight, de manera que aparecería en el menú Script por defecto.

Ahora hay que mejorarlo. Se me ocurren varias cosas:

- Que el usuario pudiera definir una lista de filas y columnas, en vez de tener que aplicar el script de una en una. La idea es básicamente añadir un botón Add, otro Remove, y una lista. Tenéis un ejemplo en la interfaz de BatchFormatConversion.

- Que el usuario pudiera guardar un archivo de texto con las filas y columnas a corregir, y después recuperarlo. Cada línea del archivo tendría este formato:

<type> <coordinate>

donde <type> podría ser "row" o "col" y <coordinate> es la ordenada o abscisa, según el caso. Para hacer esto, el objeto File es vuestro "best friend" :)


======================


Oriol and Ivette: Congratulations for your first PixInsight script  :D

If you don't mind, we could include it in the set of scripts that are distributed with PixInsight, so it would appear under the default Script menu.

Now let's improve it. A couple of things come to my mind:

- The user could define a list of rows and columns, instead of having to apply the script one line at a time. The basic idea is using an Add button, a Remove button, and a list. You have an example of this in the interface of the BatchFormatConversion script.

- The user could save a plain text file with the set of rows and columns to fix, which could be loaded later. Each text line might have the following format:

<type> <coordinate>

where <type> can be "row" or "col", and <coordinate> is the ordinate or abscissa, respectively. To implement this, the File object is your best friend :)
Juan Conejero
PixInsight Development Team
http://pixinsight.com/

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #5 on: 2008 August 22 04:23:51 »
Hola Juan,

pues nos parecen buenas las ideas que dices, intentaremos implementadas. Tambien podria estar bien poder seleccionar un grupo de archivos para realizar la misma correcion en ellos  :twisted: .., No tenemos ningun inconveniente con el tema de que pongas el script en el PI  :D

Un saludo

Offline bosch

  • PixInsight Addict
  • ***
  • Posts: 123
Scriptillo para fijar defectos de columnas o filas
« Reply #6 on: 2008 August 22 10:30:35 »
Por cierto, ante el ejemploo que ha colgado Carlos, observo que las estrellas sobre las que pasaba antes la columna borrada, ahora estan "tachadas" por una línea oscura.

O sea que donde antes pasaba una linea blanca ahora lo hace una oscura. ¿No sería más lógico que ese pixel se sustituyera por un promedio de los que tiene a cada lado? Quizá esto es lo que hace este script, pero en esas estrellas que comento algo debe haber fallado quizá ha tomado los pixels de referencia demasiado lejos llegando a sobrepasar los límites de la estrella sobre la que pasaba la columna.

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #7 on: 2008 August 22 10:48:43 »
Quote from: "bosch"
Por cierto, ante el ejemploo que ha colgado Carlos, observo que las estrellas sobre las que pasaba antes la columna borrada, ahora estan "tachadas" por una línea oscura.

O sea que donde antes pasaba una linea blanca ahora lo hace una oscura. ¿No sería más lógico que ese pixel se sustituyera por un promedio de los que tiene a cada lado? Quizá esto es lo que hace este script, pero en esas estrellas que comento algo debe haber fallado quizá ha tomado los pixels de referencia demasiado lejos llegando a sobrepasar los límites de la estrella sobre la que pasaba la columna.


Hola Daniel,

si miras el script veras que en la funcion de correcion de defectos de columna lo que se hace es un promedio entre los pixeles adyacentes de manera unidimensional. Asi que ya se hace lo que tu dices  :? lo que pasa es que el caso de Carlos es complejo, ya que no se tiene defectos de columna (tipicos de las camars CCD), si no defectos generados al realizar un mosaico (como bien explica Carlos en su post) y realmente hay zonas donde no se tiene una columna si no mas bien "rectangulos" asi que el script alli no es tan efectivo ya que extrapola informacion de 'pixeles' que no son buenos... por eso indicabamos que una posible modificacion seria que pudiera corregir zonas de golpe, a la manera que propone Juan en el tutorial de Deconvolucion.
En fin el algoritmo como ves tampoco es una maravilla pero esta abierto a cualquiera que quiera colaborar y mejorarlo.

Un saludo,

Oriol&Ivette

Offline bosch

  • PixInsight Addict
  • ***
  • Posts: 123
Scriptillo para fijar defectos de columnas o filas
« Reply #8 on: 2008 August 22 13:09:39 »
Por desgracia no tengo ni pa*otera idea de scrips. Entiendo pero la diferencia que explicas entre una columna de un pixels de ancho propio de un CCD Clase 2 y lo que nos ha enseñado Carlos.

Adelante con vuestros proyectos! que a todos nos irán de perlas.

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #9 on: 2008 August 22 14:16:51 »
Bueno, pues tenemos una version mejorada, ahora se pueden introducir todos los defectos a corregir de una tacada :



obteniendo el siguiente resultado al dar al OK:



a ver si ahora ponemos el tema de guardar un fichero de configuracion, que nos parece que sera muy util  :D

La version actual es

Code: [Select]

#include <pjsr/Sizer.jsh>
#include <pjsr/FrameStyle.jsh>
#include <pjsr/TextAlign.jsh>
#include <pjsr/StdButton.jsh>
#include <pjsr/StdIcon.jsh>
#include <pjsr/UndoFlag.jsh>
#include <pjsr/ColorSpace.jsh>
#include <pjsr/UndoFlag.jsh>

console.hide();

var window = ImageWindow.activeWindow;

function FLUserData() {
    this.fixColumn = true;
    this.fixRow    = false;
    this.position  = 0;

    this.doColumns = false;
    this.doRows    = false;
    this.columns   = new Array;
    this.rows      = new Array;
}
var userData = new FLUserData;

if ( window.isNull )
    throw Error( "There is no active image window!" );

var view = window.mainView;

function FixLinesDialog() {
    this.__base__ = Dialog;
    this.__base__();

    //

    var emWidth = this.font.width( 'M' );
    var labelWidth1 = this.font.width( "Maximum planet radius (px):" );
    var spinWidth1 = 8*emWidth;

    //

    this.helpLabel = new Label( this );
    this.helpLabel.frameStyle = FrameStyle_Box;
    this.helpLabel.margin = 4;
    this.helpLabel.wordWrapping = true;
    this.helpLabel.useRichText = true;
    this.helpLabel.text = "<b>FixLines Script</b> - Script to correct  "+
        "columns or rows defects in an image."
    //

    this.colRowTreeBox = new TreeBox( this );
    this.colRowTreeBox.multipleSelection = true;
    this.colRowTreeBox.rootDecoration = false;
    this.colRowTreeBox.setMinSize( 500, 200 );
    this.colRowTreeBox.numberOfColumns = 2;
    this.colRowTreeBox.headerVisible = false;
    //      

    this.size_Label = new Label( this );
    this.size_Label.text = "Column/Row position (px):";
    this.size_Label.textAlignment = TextAlign_Right|TextAlign_VertCenter;
    this.size_Label.minWidth = labelWidth1;

    this.size_SpinBox = new SpinBox( this );
    this.size_SpinBox.minValue = 0;
    this.size_SpinBox.maxValue = Math.max(view.image.height,view.image.width);
    this.size_SpinBox.value = 0 ;
    this.size_SpinBox.setFixedWidth( spinWidth1 );
    this.size_SpinBox.toolTip = "Column or Row position";

    this.size_SpinBox.onValueUpdated = function( value )
    {
        userData.position = value;
    };

    this.size_Sizer = new HorizontalSizer;
    this.size_Sizer.spacing = 4;
    this.size_Sizer.add( this.size_Label );
    this.size_Sizer.add( this.size_SpinBox );
    this.size_Sizer.addStretch();

    // Type of defect: label
    this.typeOfDefectLab = new Label (this);
    with (this.typeOfDefectLab) {
        text = "Type of Defect:";
        textAlignment = TextAlign_Right | TextAlign_VertCenter;
        minWidth = labelWidth1;
    }
    // Type of defect: radio buttons
    this.typeOfDefectCol = new RadioButton (this);
    with (this.typeOfDefectCol) {
        text = "Column";
        checked=true;
        onCheck = function(checked) {
            userData.fixColumn = checked;
        }
    }

    this.typeOfDefectRow = new RadioButton (this);
    with (this.typeOfDefectRow) {
        text = "Row";
        onCheck = function(checked) {
            userData.fixRow = checked;
        }
    }

    // mask blur method: sizer
    this.typeOfDefectSize = new HorizontalSizer (this);
    with (this.typeOfDefectSize) {
        spacing = 16;
        add (this.typeOfDefectLab);
        add (this.typeOfDefectCol);
        add (this.typeOfDefectRow);
        addStretch();
    }

    //

    this.addButton = new PushButton( this );
    this.addButton.text = " Add ";
    this.addButton.onClick = function() {
       this.dialog.colRowTreeBox.canUpdate = false;
       if(userData.fixColumn) {
           var isDone = false;
           for(var i=0;i<userData.columns.lenght;++i)
                if(userData.position==userData.columns[i]) isDone = true;
           if(!isDone) {
               var node = new TreeBoxNode(this.dialog.colRowTreeBox);
               node.setText(0,"column");
               node.setText(1,format("%d",userData.position));
               userData.columns.push(userData.position);
               userData.doColumns = true;
           }
       } else {
           var isDone = false;
           for(var i=0;i<userData.rows.lenght;++i)
               if(userData.position==userData.rows[i]) isDone = true;
           if(!isDone) {
               var node = new TreeBoxNode(this.dialog.colRowTreeBox);
               node.setText(0,"row");    
               node.setText(1,format("%d",userData.position));
               userData.rows.push(userData.position);
               userData.doRows = true;
           }
       }
       this.dialog.colRowTreeBox.canUpdate = true;
    };

    this.removeButton = new PushButton( this );
    this.removeButton.text = " Remove ";
    this.removeButton.onClick = function() {
        for ( var i = this.dialog.colRowTreeBox.numberOfChildren; --i >= 0; )
            if ( this.dialog.colRowTreeBox.child( i ).selected) {
                if(this.dialog.colRowTreeBox.child(i).text(0)=="column") {
                        userData.columns.lenght = 0;
                        userData.doColumns = false;
                        for (var ii = 0; ii < this.dialog.colRowTreeBox.numberOfChildren; ++ii )
                            if ( !this.dialog.colRowTreeBox.child( ii ).selected ) {
                                userData.columns.push(this.dialog.colRowTreeBox.child(ii).text(1));
                                userData.doColumns=true;
                            }
                } else {
                        userData.rows.lenght = 0;
                        userData.doRows = false;
                        for (var ii = 0; ii < this.dialog.colRowTreeBox.numberOfChildren; ++ii )
                            if ( !this.dialog.colRowTreeBox.child( ii ).selected ) {
                                userData.rows.push(this.dialog.colRowTreeBox.child(ii).text(1));
                                userData.doRows = true;
                            }
                }
                this.dialog.colRowTreeBox.remove(i);
                break;
            }

    };

    this.addRemButtonsSizer = new HorizontalSizer;
    this.addRemButtonsSizer.spacing = 4;
    this.addRemButtonsSizer.add( this.typeOfDefectSize );
    this.addRemButtonsSizer.addStretch();
    this.addRemButtonsSizer.add( this.addButton );
    this.addRemButtonsSizer.add( this.removeButton );

    //
   
    this.colRowGroupBox = new GroupBox( this );
    this.colRowGroupBox.title = "Defects to correct:";
    this.colRowGroupBox.sizer = new VerticalSizer;
    this.colRowGroupBox.sizer.margin = 4;
    this.colRowGroupBox.sizer.spacing = 4;
    this.colRowGroupBox.sizer.add( this.colRowTreeBox, 100 );
    this.colRowGroupBox.sizer.add( this.size_Sizer );
    this.colRowGroupBox.sizer.add( this.addRemButtonsSizer );

    //

    this.ok_Button = new PushButton( this );
    this.ok_Button.text = " OK ";

    this.ok_Button.onClick = function()
    {
        this.dialog.ok();
    };

    this.done_Button = new PushButton( this );
    this.done_Button.text = " Done ";

    this.done_Button.onClick = function()
    {
        this.dialog.cancel();
    };

    this.buttons_Sizer = new HorizontalSizer;
    this.buttons_Sizer.spacing = 4;
    this.buttons_Sizer.addStretch();
    this.buttons_Sizer.add( this.ok_Button );
    this.buttons_Sizer.add( this.done_Button );

    //

    this.sizer = new VerticalSizer;
    this.sizer.margin = 6;
    this.sizer.spacing = 6;
    this.sizer.add( this.helpLabel );
    this.sizer.addSpacing( 4 );
    this.sizer.add( this.colRowGroupBox );
    this.sizer.add( this.buttons_Sizer );

    this.windowTitle = "FixLines Script";
    this.adjustToContents();
    this.setFixedSize();
}

FixLinesDialog.prototype = new Dialog;

function FixColumn( image, col, channel )
{
   image.selectedChannel = channel;
   for ( var y = 0; y < image.height; ++y )
      image.setSample( (image.sample( col-1, y, channel ) + image.sample( col+1, y , channel ))/2, col, y , channel );
}

function FixRow( image, row, channel)
{
   for ( var x = 0; x < image.width; ++x )
      image.setSample( (image.sample( x, row-1, channel ) + image.sample( x , row+1, channel ))/2, x, row, channel );
}

function fixLinesEngine(userData) {
   var view = window.mainView;

   with (view) {
       beginProcess();

       var isGray = view.image.colorSpace==ColorSpace_Gray;

       if(userData.doColumns) {
           if(isGray) FixColumn(image, userData.position, 0);
           else {
               for(var i=0;i<userData.columns.length;++i) {
                   FixColumn(image,userData.columns[i], 0);
                   FixColumn(image,userData.columns[i], 1);
                   FixColumn(image,userData.columns[i], 2);
               }
           }
       }
       if(userData.doRows) {
           if(isGray) FixRow(image, userData.position, 0);
           else {
               for(var i=0;i<userData.rows.length;++i) {
                   FixRow(image,userData.rows[i], 0);
                   FixRow(image,userData.rows[i], 1);
                   FixRow(image,userData.rows[i], 2);
               }
           }
       }
       endProcess();
   }
}

function main() {
    var dialog = new FixLinesDialog();
    dialog.view = view;
 //   dialog.execute();
    while ( dialog.execute() )
      fixLinesEngine(userData);
}

main();


Offline bosch

  • PixInsight Addict
  • ***
  • Posts: 123
Scriptillo para fijar defectos de columnas o filas
« Reply #10 on: 2008 August 22 19:12:32 »
:D Felicidades, un buen trabajo.

Interpeto que esto repara columnas esteras. Es muy complicado que sólo repare también segmentos de columna?

Sería algo así como decirle al script que cuando encuentre que el valor del pixel es igual o muy parecido (dentro de un margen presetablecido) al valor de los pixels que tiene a cada lado pues que no actúe ya que se considera que la columna a partir de ahí ya no está defectuosa.

Edito: me contesto a mi mismo. Supongo que si los valores son tan parejos, el hecho que continue interpolando hasta el final, poco artefacto debe añadir.

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #11 on: 2008 August 23 01:20:22 »
Hola Daniel,

pues que el script de manera automatica "encuentre" qué parte de la columna o fila ha de reparar, lo vemos un poco infiernillo  :lol:  :lol: ya que el algoritmo para decidir si el pixel es bueno o no puede fallar bastante. Pero si que parece practico que el usuario pueda introducir en el script un rango de pixeles dentro de la columna/fila a corregir, por defecto se podrian todos y si no los que diga el usuario, esto no estaria mal, no?

Gracias

Offline C. Sonnenstein

  • PixInsight Addict
  • ***
  • Posts: 262
    • http://astrosurf.com/astro35mm
Scriptillo para fijar defectos de columnas o filas
« Reply #12 on: 2008 August 23 01:33:52 »
Yo lo que echo en falta es poder leer y editar las coordenadas simultáneamente :D
Carlos Sonnenstein

Offline bosch

  • PixInsight Addict
  • ***
  • Posts: 123
Scriptillo para fijar defectos de columnas o filas
« Reply #13 on: 2008 August 23 01:51:17 »
El caso es que al no saber leer lenguaje scrip no sé cómo lo estais haciendo actualmente.

Yo imagino que si un pixel perteneciente a una columna defectuosa tiene una lectura en blanco (0) y un lado tiene uno gris (usaré 8 bits para más facilidad) de 189 y al otro lado tiene uno de 192 pues se interpola y el que tiene valor 0 se sustituye por (189+192)/2. Quizá también se pueden escoger más de un pixels por cada lado para realizar la interpolación.

Luego se trata de decir que que si el valor que hay entre 189 y 192 es de 190 pues que simplemente se vaya a otro pixel y deje este tal como está. Quien dice 190 dice también un intervalo a determinar por el usuario más o menos ancho p.e. (180-200)

Bueno, tampoco me hagais mucho caso. Simplemente son reflexiones de alguien que no entiende demasiado todo esto.

Salu2

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #14 on: 2008 August 23 02:02:32 »
Daniel, un algoritmo automatizado para esto no lo vemos claro, por ahora. Lo que dices es correcto para fondo de cielo, pero si estas en una region adyaciente a estrellas, es facil que dejes de corregir partes de la columna que deberias corregir, ademas la banda no tiene por que ser la misma para toda la columna ya que depende de lo que haya a su alrededor. De momento lo dejaremos en modo manual  :roll: ya que no somos capaces de buscar algo robusto y general

Un saludo