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

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #15 on: 2008 August 23 02:04:07 »
Quote from: "C. Sonnenstein"
Yo lo que echo en falta es poder leer y editar las coordenadas simultáneamente :D


Esto esta guai  :D pero primero tendremos que aprender a usar los objetos que Juan nos proponia para el script del background, y tardara un poco, pero se intentara, gracias!

Offline Jordi Gallego

  • PixInsight Addict
  • ***
  • Posts: 279
Scriptillo para fijar defectos de columnas o filas
« Reply #16 on: 2008 August 24 03:15:35 »
Oriol e Yvette,

lo acabo de probar y va muy bien. Gracias de nuevo :wink:

Saludos
Jordi
Jordi Gallego
www.astrophoto.es

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #17 on: 2008 August 24 03:19:57 »
Quote from: "Jordi Gallego"
lo acabo de probar y va muy bien. Gracias de nuevo :wink:


pues nos das una alegria, la verdad, nos encanta que le sea de utilidad a alguien  :wink:

Un saludo,

Oriol&Ivette

Offline bosch

  • PixInsight Addict
  • ***
  • Posts: 123
Scriptillo para fijar defectos de columnas o filas
« Reply #18 on: 2008 August 24 03:39:04 »
Bueno al ser de los primeros scrips que manejo co el PI salvo el MST, se me han abierto algunas dudas sobre el procedimiento. He hecho un cortar y pegar de todo el código que has colgado sobre un New file en el apartado de escritura de scrips del PI y lo he guardado en el directorio que a tal efecto tiene PI. Creía que con ello conseguiríra que apareciera de forma automática de entre la lista de scrips que por defecto ya incorpora PI y no ha sida así debiendo siempre acudir a él a través del brownse que se abre cuando la das a "scrip>exectue scrip file...".

Existe por consiguiente una forma de incorporarlo en la lista que aparece de los scrips en el desplegable de "Sample Scrips"?

También creo que hago algo más al ejecutarlo porqué primero debo leer el número de columna. Luego abrir el scrip y poner a mano el número (eso no es mayor problema) pero si con el diálogo abierto del scritp quiero volver a "leer" la posición de una nueva columna anómala de la imagen problema, no me deja acceder a ella si antes no he cerrado el scrip. Funciona de sta forma? debo por tanto apuntarme primero en un papel la lista de columnas defectuosas para más tarde volcalas todas al scrip?

Por cierto, también como Jordi lo he probado y va de maravilla.

Sólo la faltaría a PI incorporar de forma automática una función en la que el propio programa propusiera columnas defectuosas y el usuario simplemente debería confirmarlas (o desecleccionarlas si el programa las hubiera sobrediagnosticado) y darle al clic de OK.

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #19 on: 2008 August 24 03:48:45 »
Quote from: "bosch"

También creo que hago algo más al ejecutarlo porqué primero debo leer el número de columna. Luego abrir el scrip y poner a mano el número (eso no es mayor problema) pero si con el diálogo abierto del scritp quiero volver a "leer" la posición de una nueva columna anómala de la imagen problema, no me deja acceder a ella si antes no he cerrado el scrip. Funciona de sta forma? debo por tanto apuntarme primero en un papel la lista de columnas defectuosas para más tarde volcalas todas al scrip?

Este es un defecto importante del script, como nos indico Carlos antes, el problema es que para acceder simultaneamente a la imagen y al script, se tiene que generar un windget especial, y estamos trabajando en el pero tardara un poco, pero coincidimos contigo que es una cosa a solucionar y pronto :wink:

Quote from: "bosch"

Por cierto, también como Jordi lo he probado y va de maravilla.


Gracias, nos alegramos.

Quote from: "bosch"

Sólo la faltaría a PI incorporar de forma automática una función en la que el propio programa propusiera columnas defectuosas y el usuario simplemente debería confirmarlas (o desecleccionarlas si el programa las hubiera sobrediagnosticado) y darle al clic de OK.


Esto estaria bien, lo ponemos en la lista de cosas a mejorar, tambien  :) muchas gracias por la ayuda,

Un saludo,

Oriol&Ivette

Offline C. Sonnenstein

  • PixInsight Addict
  • ***
  • Posts: 262
    • http://astrosurf.com/astro35mm
Scriptillo para fijar defectos de columnas o filas
« Reply #20 on: 2008 August 26 11:55:27 »
Pues sorprende lo bien que funciona :)

Fijaros en el siguiente mouseover :
http://datastore.pleiades-astrophoto.com/csonnenstein/mouseover/fixlines_script/fixlines_script.htm

El defecto cruza por el centro de una estrella situada en el centro de la imagen. Es un recorte aumentado 3:1 sin ningún método de interpolación, utilizando la segunda versión de FixLines.
Carlos Sonnenstein

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #21 on: 2008 August 26 14:54:13 »
Vaya pues si que funciona bien para este caso  :) gracias por enseñarlo Carlos  :wink:
Hemos detectado algunos bugs un poco heavy asi que ponemos otra version que no es la final, pero esta mas cerca  :D

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;

    this.doColumns = false;
    this.doRows    = false;
    this.columns   = new Array;
    this.rows      = new Array;
    this.average   = true;
    this.blur      = false;
}
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 );

    // Activate gaussian blur
    this.gaussianBlur = new CheckBox (this);
    with (this.gaussianBlur){
        text = "Gaussian convolution";
        checked = false;
        onCheck = function (checked) { userData.blur = checked; };
    }
    //

    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.gaussianBlur);
    this.sizer.add( this.buttons_Sizer );

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

FixLinesDialog.prototype = new Dialog;

function FixColumn( image, col, channel, blur )
{
    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 );
    if(blur) {
        image.selectedRect = new Rect(col, 0, col,image.height);
        for ( var i = 0; i < 2; ++i )
            image.convolve( [
                    1/25, 1/5, 1/25,
                    1/5,  1,   1/5,
                    1/24, 1/5, 1/25
                    ] );
    }
}

function FixRow( image, row, channel, blur)
{
    image.selectedChannel = 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 );
    if(blur) {
        image.selectedRect = new Rect(0,row, image.width, row);
        for ( var i = 0; i < 2; ++i )
            image.convolve( [
                    1/25, 1/5, 1/25,
                    1/5,  1,   1/5,
                    1/24, 1/5, 1/25
                    ] );
    }
}

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

   with (view) {
       beginProcess();

       var isGray = image.colorSpace==ColorSpace_Gray;

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

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

main();



Un saludo a todos

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Scriptillo para fijar defectos de columnas o filas
« Reply #22 on: 2008 September 28 09:55:36 »
Hola,

pues tenemos ya la version que permite guardar ficheros de configuracion, ahora el usuario no tiene la necesidad de volver a introducir las columnas/filas cada vez que corriga el mismo sensor  :D El codigo,

This is the last version of the script that corrects column/line defects. In this version, the user can save a configuration file. Now, it is easier to correct the same defects of the chip in different images :D . The code is:

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>
#include <pjsr/DataType.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;
    this.average   = true;
}
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.length;++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.length;++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.length = 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.length = 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.save_Button = new PushButton( this );
    this.save_Button.text = " Save ";

    this.save_Button.onClick = function()
    {
        var saveFile = new SaveFileDialog;
        if(saveFile.execute()) {
            var fileName = saveFile.fileName;
            var f = new File;
            f.createForWriting(fileName);
            f.write(userData.columns.length,DataType_UInt16);
            console.writeln(" number of columns "+userData.columns.length);
            if(userData.columns.length!=0) f.write(userData.columns,DataType_Int32);
            f.write(userData.rows.length,DataType_UInt16);
            console.writeln(" number of rows "+userData.rows.length);
            if(userData.rows.length!=0) f.write(userData.rows,DataType_Int32);
            f.close();
        }
    };
    //

    this.load_Button = new PushButton( this );
    this.load_Button.text = " Load ";



    this.load_Button.onClick = function()
    {
        var loadFile = new OpenFileDialog;
        if(loadFile.execute()) {
            var fileName = loadFile.fileName;
            var f = new File;

            f.openForReading(fileName);

            for (var i = this.dialog.colRowTreeBox.numberOfChildren; i >= 0; --i) this.dialog.colRowTreeBox.remove(i);

            userData.columns.length = 0;
            userData.doColumns = false;
           
            var size = f.read(DataType_UInt16,1);
            if(size!=0) {
                userData.doColumns = true;
                if(size!=1) userData.columns = f.read(DataType_Int32,size);
                else        userData.columns.push(f.read(DataType_Int32,size));
                this.dialog.colRowTreeBox.canUpdate = false;
                for (var i = 0;i<size; i++) {
                    var node = new TreeBoxNode(this.dialog.colRowTreeBox);
                    node.setText(0,"column");
                    node.setText(1,format("%d",userData.columns[i]));
                }
                this.dialog.colRowTreeBox.canUpdate = true;
            }

            userData.rows.length = 0;
            userData.doRows = false;
           
            size = f.read(DataType_UInt16,1);
            if(size!=0) {
                userData.doRows = true;
                if(size!=1) userData.rows = f.read(DataType_Int32,size);
                else        userData.rows.push(f.read(DataType_Int32,size));
                this.dialog.colRowTreeBox.canUpdate = false;
                for (var i = 0;i<size; i++) {
                    var node = new TreeBoxNode(this.dialog.colRowTreeBox);
                    node.setText(0,"row");
                    node.setText(1,format("%d",userData.rows[i]));
                }
                this.dialog.colRowTreeBox.canUpdate = true;
            }
            f.close();
        }
    };
    //

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

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

    this.cancel_Button = new PushButton( this );
    this.cancel_Button.text = " Cancel ";

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

    this.buttons_Sizer = new HorizontalSizer;
    this.buttons_Sizer.spacing = 4;
    this.buttons_Sizer.add( this.load_Button );
    this.buttons_Sizer.add( this.save_Button );
    this.buttons_Sizer.addStretch();
    this.buttons_Sizer.add( this.ok_Button );
    this.buttons_Sizer.add( this.cancel_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)
{
    image.selectedChannel = 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 = image.colorSpace==ColorSpace_Gray;

       if(userData.doColumns) {
           if(isGray) {
               for(var i=0;i<userData.columns.length;++i) {
                   FixColumn(image, userData.columns[i], 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) {
               for(var i=0;i<userData.rows.length;++i) {
                   FixRow(image, userData.rows[i], 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;
    if ( dialog.execute() )
      fixLinesEngine(userData);
}

main();



Bueno, pues eso un saludo a todos y gracias a Juan por ayudarnos con lo de los Files  :wink:

Offline bianry

  • PixInsight Enthusiast
  • **
  • Posts: 90
Re: Scriptillo para fijar defectos de columnas o filas
« Reply #23 on: 2014 March 11 03:18:47 »
I downloaded this script because I was about to write a similar one.

Found an error in the remove function

This is the fixed version
Code: [Select]
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.length = 0;
                        userData.doColumns = false;
                        for (var ii = 0; ii < this.dialog.colRowTreeBox.numberOfChildren; ++ii )
                            if ( !this.dialog.colRowTreeBox.child( ii ).selected ) {
                               
                                userData.columns.push(parseInt(this.dialog.colRowTreeBox.child(ii).text(1)));
//Was  userData.columns.push(this.dialog.colRowTreeBox.child(ii).text(1));
// Needs to convert the string to int

                                userData.doColumns=true;
                            }
                       
                } else {
                        userData.rows.length = 0;
                        userData.doRows = false;
                        for (var ii = 0; ii < this.dialog.colRowTreeBox.numberOfChildren; ++ii )
                            if ( !this.dialog.colRowTreeBox.child( ii ).selected ) {
                                userData.rows.push(parseInt(this.dialog.colRowTreeBox.child(ii).text(1)));
//Was  userData.columns.push(this.dialog.colRowTreeBox.child(ii).text(1));
                                userData.doRows = true;
                            }
                }
                this.dialog.colRowTreeBox.remove(i);
                break;
            }
         

    };

regards

Mats