Hola:
He estado intentando reducir el ruido en imagenes con pocas tomas o con poco tiempo de integración. en general tomas H-Alpha. Ya sé que para eso está ACDNR y GREYCstoration pero en el caso de imágenes con poca señal no me convence demasiado, sobre todo GREYCstoration. Viendo las tomas el ruido era básicamente falta de señal con tamaños de 1 pixel, entonces pensé en hacer un script que moviese la imagen 1px arriba, abajo, izquierda y derecha y despues hacer un average con las 4 imágenes y posteriormente combinarlas con la imagen original mediante average o sumandolas con alguna proporción entre las dos.
Bueno, el resultado es este. Izquierda Original, derecha Script:
Y este es un average del original con una imágen a la que se le ha pasado 3 veces el script (zoom 2x).
A ver que os parece, ¿podeis probarlo en vuestras imágenes y me deciis que tal va?.
Créditos: La imágen fue tomada por Daniel Bosch. Espero que no le importe que la haya usado. Las mías no son tan buenas.
Saludos, Silvercup.
Hi:
I've been trying to reduce noise in images with a few exposures or with low integration time, generally H-Alpha images. I know that's what ACDNR and GREYCstoration for, but in the case of images with low signal does not convince me too much, especially GREYCstoration. By inspecting takes the noise level was basically lack of signal with pixel sizes of 1px, then I thought to make a script to move the image 1px up, down, left and right and then make an average with 4 images and then combine them with the original image width average or adding them with some proportion between each image.
Well, the result is this. Original Left, Right Script:
And that is an average of the original with an image which has been run 3 times the script (zoom 2x).
What do you think about this procedure?, can you try it in your images and I tell me your opinion?.
Credits: The image was taken by Daniel Bosch. I hope he don't mind that I use it. Mine are not so good.
Greetings, Silvercup.
#include <pjsr/ColorSpace.jsh>
#include <pjsr/UndoFlag.jsh>
#define VERSION "1.0"
var Imagenum = 4;
var targetView = new Array(Imagenum);
var targetPoints = new Array(Imagenum);
var window = ImageWindow.activeWindow;
var originalView = window.mainView;
targetPoints[1] = new Point( 0, 1 );
targetPoints[2] = new Point( 0, -1 );
targetPoints[3] = new Point( 1, 0 );
targetPoints[4] = new Point( -1, 0 );
targetView[0]= new ImageWindow(originalView.image.width,
originalView.image.height,
originalView.image.numberOfChannels,
window.bitsPerSample,
window.isFloatSample,
originalView.image.colorSpace != ColorSpace_Gray,
"targetView0");
targetView[0].mainView.beginProcess(UndoFlag_NoSwapFile);
targetView[0].mainView.image.assign( originalView.image );
var p = new IntegerResample;
with ( p )
{
zoomFactor = 2;
subsampleMode = Average;
xResolution = 72.000;
yResolution = 72.000;
metric = false;
forceResolution = false;
}
p.executeOn(targetView[0].mainView);
targetView[0].mainView.endProcess();
targetView[0].show();
for (var i = 1; i <= Imagenum; i++) {
targetView[i]= new ImageWindow(targetView[0].mainView.image.width,
targetView[0].mainView.image.height,
targetView[0].mainView.image.numberOfChannels,
window.bitsPerSample,
window.isFloatSample,
targetView[0].mainView.image.colorSpace != ColorSpace_Gray,
"targetView"+i);
targetView[i].mainView.beginProcess(UndoFlag_NoSwapFile);
targetView[i].mainView.image.assign( targetView[0].mainView.image );
targetView[i].mainView.image.selectedPoint = targetPoints[i];
targetView[i].mainView.image.apply( targetView[0].mainView.image );
targetView[i].mainView.endProcess();
};
var p = new PixelMath;
with ( p )
{
expression = "avg(targetView1,targetView2,targetView3,targetView4)";
expression1 = "";
expression2 = "";
expression3 = "";
useSingleExpression = true;
symbols = "";
use64BitWorkingImage = false;
rescale =false;
rescaleLower = 0.0000000000;
rescaleUpper = 1.0000000000;
truncate = true;
truncateLower = 0.0000000000;
truncateUpper = 1.0000000000;
createNewImage = false;
newImageId = "";
newImageWidth = 0;
newImageHeight = 0;
newImageAlpha = false;
newImageColorSpace = SameAsTarget;
newImageSampleFormat = SameAsTarget;
}
targetView[0].mainView.beginProcess(UndoFlag_NoSwapFile);
p.executeOn(targetView[0].mainView);
var p = new IntegerResample;
with ( p )
{
zoomFactor = -2;
subsampleMode = Average;
xResolution = 72.000;
yResolution = 72.000;
metric = false;
forceResolution = false;
}
p.executeOn(targetView[0].mainView);
targetView[0].mainView.endProcess();
for (var i = 1; i <= Imagenum; i++) {
targetView[i].undoAll();
targetView[i].purge();
targetView[i].close();
targetView[i]=null;
}