Author Topic: Removing Canon Banding with PJSR  (Read 58406 times)

Offline georg.viehoever

  • PTeam Member
  • PixInsight Jedi Master
  • ******
  • Posts: 2132
Re: Removing Canon Banding with PJSR
« Reply #15 on: 2009 May 21 08:10:17 »
Niall,

your hint to line 600 indeed resolved the median-mystery. Thank you. So now only the preview-question remains...

Georg
Georg (6 inch Newton, unmodified Canon EOS40D+80D, unguided EQ5 mount)

Offline georg.viehoever

  • PTeam Member
  • PixInsight Jedi Master
  • ******
  • Posts: 2132
Re: Removing Canon Banding with PJSR
« Reply #16 on: 2009 May 21 10:33:33 »
Hi,

the script is getter better, slowly. I now fix all 3 channels, and use a separate median for each channel. The results are even better now. I appear to have problems with bright parts of the picture that are over-corrected (become too dark). I have some ideas how to adjust for that. But not today. Below is the script applied to 2 images that were so much hurt by banding that I did not fully process them 9 months ago. The shown version are from images stacked with DSS, and then just applied a quick DBE and STF to see what is in them, followed by the current source code. Still "alpha" status.

Georg


http://cid-c56e60845cfa6790.skydrive.live.com/self.aspx/Pixinsight/pixinsightFlattenRowsAlpha2.jpg

Code: [Select]
/*
   CanonBanding.js v0.3.0
   Joins previews into a new image.
   Copyright (C) 2009 Georg Viehoever

   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by the
   Free Software Foundation, version 3 of the License.

   This program is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
   more details.

   You should have received a copy of the GNU General Public License along with
   this program.  If not, see <http://www.gnu.org/licenses/>.
*/

/*
   Changelog:
   0.3.0: Fixing all channels, automatic workaround for PI1.5 and earlier. First tested with 1.5.0
   0.2.0: Working processing as shown by Juan Conejero. Introduced
          elements from Nial Saunder's Debayer script (beta version)
   0.1.0: Initial version, modelled after Preview Allocator script provided with PixInsight
*/

// ======== #features ==============================================================
#feature-id    Utilities > Canon Banding Reducton

#feature-info  Attempts to reduce the horizontal banding plaguing some Canon DSLRs<br> \
               This script allows you reduce the banding by equalizing horizontal background \
               brightness

// #feature-icon  Batch_CanonBandingReduction.xpm


// ========= # defines =============================================================

/// define for debugging output
#define DEBUGGING_MODE_ON false

/// somehow a true does not do any good
#define HAS_PREVIEW false

#define TITLE  "CanonBanding"
#define VERSION "0.1.0"

#include <pjsr/StdButton.jsh>
#include <pjsr/StdIcon.jsh>
#include <pjsr/Sizer.jsh>
#include <pjsr/FrameStyle.jsh>
#include <pjsr/NumericControl.jsh>

// include constants
#include <pjsr/ImageOp.jsh>
#include <pjsr/SampleType.jsh>



/// Does the work using the params in data
function BandingEngine() {

   // process the data
   this.processImage = function(targetImage, amountValue) {
      var targetHeight=targetImage.height;
      var targetWidth=targetImage.width;
      //rescale each row to median
      // this represents the average background value
      var medians=new Array;
      /// true if img.apply(number, op) does not work, as in PI1.5.0 (build 492)
      var hasApplyBug=(coreVersionBuild<=492)
      for (var chan=0; chan<targetImage.numberOfChannels;++chan){
         targetImage.selectedChannel=chan;
         medians[chan]=targetImage.median();
      }  //for channel
      if ( DEBUGGING_MODE_ON ){
         console.writeln("Median=",medians);
      }  // if debugging
      targetImage.initializeStatus("Processing rows", targetHeight);
      var lineRect=new Rect(targetWidth,1);

      for (var chan=0; chan<targetImage.numberOfChannels;++chan){
         for (var row=0; row<targetHeight;++row) {
            targetImage.selectedChannel=chan;
            lineRect.moveTo(0,row);
            targetImage.selectedRect=lineRect;
            var lineMedian=targetImage.median();
            var fixFactor=(medians[chan]-lineMedian)*amountValue;
            if ( DEBUGGING_MODE_ON ){
               console.writeln("Row, Channel, Median, fixFactor=",row,",",chan,",",lineMedian,",",fixFactor,",",ImageOp_Add);
            }  // if debugging
            if (! hasApplyBug){
               // This crashes in PI version 1.5 (and probably in 1.4.5, too - not tested)
               targetImage.apply(fixFactor,ImageOp_Add);
            }else{
               // Workaround
               for (var col=0;col<targetWidth;++col){
                  var sample=targetImage.sample(col,row,chan);
                  var fixedSample=sample+fixFactor;
                  targetImage.setSample(fixedSample,col,row,chan);
               }  //for col
            }  // if HAS_APPLY_BUG
            targetImage.advanceStatus(1);
         }  //for row
      }  //for channel
     
      targetImage.resetSelections();
      targetImage.truncate();
      targetImage.normalize();

   };  //method processImage()


   // do the actual work
   this.doit=function(targetView,amountValue){
      // Tell the core application that we are going to change this view.
      // Without doing this, we'd have just read-only access to the view's image.
      targetView.beginProcess();
      var targetImage=targetView.image;
      // convert image to floating point format, since int would not handle negatives or overflows
      if ( targetImage.sampleType == SampleType_Integer ){
         var wrk = new Image( targetImage.width, targetImage.height,
                                 targetImage.numberOfChannels, targetImage.colorSpace,
                                 (targetImage.bitsPerSample < 32) ? 32 : 64, SampleType_Real );
            wrk.assign( targetImage );
            this.processImage( wrk, amountValue );
            targetImage.assign( wrk );
      }else{
         // work directly on targetImage
         this.processImage(targetImage, amountValue);
      }  // if integer image
      // end transaction
      targetView.endProcess();
    };   //function doit
}  //class BandingEngine

/// dialog for getting params and starting process
function BandingDialog() {
   this.__base__ = Dialog;
   this.__base__();

   //init values
   this.previewWindow=null;
   //default value fof slider
   this.amountValue=1.0;
   this.imageProcessed=false;

   // ----- HELP LABEL

   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>" + TITLE + " v"+VERSION+"</b> &mdash; A script to remove " +
      "Canon Banding from View.";

   // ------ CHECKBOX
   if ( HAS_PREVIEW){
      this.previewCheckBox = new CheckBox( this );
      this.previewCheckBox.text = "Display Preview";
      this.previewCheckBox.toolTip ="<p>If this option is selected, the will display a preview</p>";
      this.previewCheckBox.onCheck = function(checked){
         if ( DEBUGGING_MODE_ON ){
            console.writeln("previewCheckBox.onCheck()",checked);
         }  // if debugging
         var dialog=this.dialog;
         if(checked){
            var window = ImageWindow.activeWindow;
            if ( !window.isNull ){
               if ( DEBUGGING_MODE_ON ){
                  console.writeln("previewCheckBox.onCheck(): Creating Preview");
               }  // if debugging
               //dialog.previewWindow=new ImageWindow(window);
               //this.previewWindow.bringToFront();
               // this.previewWindow.show();
            }  // if active window exists
         }else{   //checked
            // FIXME somehow this just would not work...
            if ( DEBUGGING_MODE_ON ){
               console.writeln("previewCheckBox.onCheck(): dialog.previewWindow=",dialog.previewWindow);
            }  // if debugging
            if (!dialog.previewWindow.isNull){
               if ( DEBUGGING_MODE_ON ){
                  console.writeln("previewCheckBox.onCheck(): Deleting Preview");
             }  // if debugging
//            dialog.previewWindow.forceClose();
//            dialog.previewWindow=null;
         }  // if preview window exists           
       } // if checked
      }; //onCheck()
   }  // if HAS_PREVIEW

   // ----- SLIDER
   var labelWidth1 = this.font.width( 'T' + "" );
   this.amountControl=new NumericControl(this);
    with (this.amountControl) {
      label.text = "Amount:";
      label.minWidth = labelWidth1;
      setRange( 0, 4.0 );
      slider.setRange( 0, 1000 );
      slider.minWidth = 250;
      setPrecision( 2 );
      setValue( this.amountValue );
      toolTip = "Define amount of correction";
      onValueUpdated = function( value ) {
         //console.writeln("processing in slider, amount=",value);
         this.dialog.amountValue=value;
         return;
         var currentWindow = ImageWindow.activeWindow;
         if (!currentWindow.isNull){
            var currentView=currentWindow.currentView;
            if (!currentView.isNull){
               if (this.dialog.isImageProcessed){
                  // roll back
                  currentWindow.undo();
               }  // if roll back
               var engine = new BandingEngine();
               engine.doit(currentView, value);
               this.dialog.isImageProcessed=true;
               console.writeln("processed in slider");
            }  // if currentview
         }  //if currentWindow
      }; //function onValueUpdated();
   }  //with amountControl

   // ----- BUTTONS

   this.ok_Button = new PushButton (this);
   this.ok_Button.text = "OK";
   // Do it
   this.ok_Button.onClick = function() {
      if ( DEBUGGING_MODE_ON ){
         console.writeln("ok_Button.onClick()");
      }  // if debugging
      this.dialog.ok();
   };

   this.cancel_Button = new PushButton (this);
   this.cancel_Button.text = "Cancel";
   this.cancel_Button.onClick = function() {
      if ( DEBUGGING_MODE_ON ){
         console.writeln("cancel_Button.onClick()");
      }  // if debugging
      this.dialog.cancel();
   };

   // ----- PACK EVERYTHING INTO LAYOUT

   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.cancel_Button);


   this.sizer = new VerticalSizer;
   this.sizer.margin = 6;
   this.sizer.spacing = 6;
   this.sizer.add (this.helpLabel);
   if ( HAS_PREVIEW){
      this.sizer.addSpacing (4);
      this.sizer.add (this.previewCheckBox);
   }  // if HAS_PREVIEW
   this.sizer.addSpacing (4);
   this.sizer.add (this.amountControl);   
   this.sizer.addSpacing (4);
   this.sizer.add (this.buttons_Sizer);

   this.windowTitle = TITLE + " Script v" + VERSION;
   this.adjustToContents();
}  //class BandingDialog
BandingDialog.prototype = new Dialog;


function main() {

   // to display progress
   console.show();
   // allow stop
   console.abortEnabled = true;

   if ( DEBUGGING_MODE_ON ){
      console.writeln("Version Info:", coreId,",",coreVersionBuild,",",coreVersionMajor,
                      ",", coreVersionMinor,",",coreVersionRelease);
      console.writeln ("Dialog opening");
   }  // if debug mode

   // Dialog
   var dialog = new BandingDialog();
   // Global parameters.

   for (;;) {
      if (!dialog.execute()){
         // cancel...
         break;
      }
      var amountValue=dialog.amountValue;
      if ( DEBUGGING_MODE_ON ){
         console.writeln("main(): amountValue=",amountValue);
      }  // if debugging
      var window = ImageWindow.activeWindow;
      if ( window.isNull )
         throw new Error( "No active image" );
      if ( !window.currentView.isNull ){
         var engine = new BandingEngine();
         engine.doit(window.currentView, amountValue);
         // Quit after successful execution./
         break;
      }else{
         var msg = new MessageBox(
               "<p>No action was selected. Do you want to continue?</p>",
               TITLE, StdIcon_Warning, StdButton_Yes, StdButton_No );
         if ( msg.execute() != StdButton_Yes )
            break;
      }  //if !view.isNull
   }  //for
   console.hide();
}  //main()

main();
Georg (6 inch Newton, unmodified Canon EOS40D+80D, unguided EQ5 mount)

Offline georg.viehoever

  • PTeam Member
  • PixInsight Jedi Master
  • ******
  • Posts: 2132
Re: Removing Canon Banding with PJSR
« Reply #17 on: 2009 May 23 03:44:29 »
Hi,

here is another iteration of the script. I have added a mechanism ("Highlight Protection") to reduce the overcorrection caused by large bright areas in the image, based on an idea by Jens Dierks, the author of Fitswork. In essence, it uses AvgDev() (or MAD, as some call it) to estimate the noise sigma, and to reject pixels that are outside of a range defined by [0, median+sigma*sigmaFactor). I am using MAD() instead of StdDev, because it is a better estimator for sigma in the type of images we handle here. Have a look at the statistics window and the histogram in the screenshot. StdDev() clearly does not reflect the fact that the red distribution is much broader than green and blue.

The screenshot shows (from top left to bottom right, all with the same STF):
- Original image (DBEed, no noise reduction etc.)
- Fixed image without Highlight Protection. You clearly see the darker region left of m101
- Fixed image with Highlight Protection, SigmaFactor=1.0. Dark region is clearly reduced.
- Fixed image with Highlight Protection, SigmaFactor=0.3. Unfortunately, the banding begins to reappear...
- Statistics Window, focused on the Original Image
- Histogram Window


http://cid-c56e60845cfa6790.skydrive.live.com/self.aspx/Pixinsight/pixinsightFlattenRowsAlpha3.jpg

Finding the right SigmaFactor is a bit difficult, and some preview functionality would certainly help when fiddling with it. I am waiting/hoping for release 1.5.x (x>0) to implement this.
The code is attached. Please let me know how it works for you. Feel free to improve the tool.

Georg
Georg (6 inch Newton, unmodified Canon EOS40D+80D, unguided EQ5 mount)

Offline Juan Conejero

  • PTeam Member
  • PixInsight Jedi Grand Master
  • ********
  • Posts: 7111
    • http://pixinsight.com/
Re: Removing Canon Banding with PJSR
« Reply #18 on: 2009 May 23 05:28:59 »
Hi Georg,

Excellent work! I agree completely with everything you say about the average absolute deviation (or mean absolute deviation = MAD). It is a much more robust estimator of the true distribution variability in images than the standard deviation. I use AvgDev all the time, and many PI tools perform much better thanks to using it instead of StdDev.

Take a look at this screenshot:



It is a ScrollBox object showing a generated image (with the TranslucentPlanets routine). I'm making a lot of (internal) changes to PJSR in version 1.5.2. One of them is that ScrollBox now works nicely (unfortunately, that isn't true in versions <= 1.5.0). With ScrollBox, you'll be able to render and navigate an image inside a JavaScript dialog with just a few lines of code. This is a much more convenient way to provide an image preview than creating "satellite" image windows, as you tried to do in your script.

Just a bit of patience is what I ask :) Version 1.5.2 is almost ready; only a few more bug fixes and optimizations, and I'll release it. My intention is that 1.5.2 will last at least for the whole Summer, so I can concentrate on making videos and assisting all of you in your numerous scripts :laugh:

By the way, as I see that you know the author of FITSwork personally (or at least it seems you are in contact with him), feel free to invite him here. I'd be glad if he'd like to implement something with the PJSR or PCL frameworks!
Juan Conejero
PixInsight Development Team
http://pixinsight.com/

Offline Simon Hicks

  • PixInsight Old Hand
  • ****
  • Posts: 333
Re: Removing Canon Banding with PJSR
« Reply #19 on: 2009 May 24 03:06:11 »
Hi Georg,

Congratulations on a great script. It looks like it is getting better with each version. The images speak for themselves. This is going to be very useful....I see the same banding on my Canon 400D images. I'm not a programmer myself, but really glad that people like you can contribute these new processes into PI.

Now for the very basic question to you and/or Juan.....Can I copy this script into PI and run it on one of my images? And if the answer is 'yes'....then the next question is How? I've seen the menu list for SCRIPT in PI...and I've run the various Utilities and Sample Scripts....but that's as far as my knowledge goes. Any help would be greatfully recieved.

Cheers
         Simon

Offline georg.viehoever

  • PTeam Member
  • PixInsight Jedi Master
  • ******
  • Posts: 2132
Re: Removing Canon Banding with PJSR
« Reply #20 on: 2009 May 24 03:22:23 »
Simon,

store the script somewhere in the file system (in my case, I store them separate from the PI scripts in C:/PCLGeorg/scripts, so the dont get deleted with the next update). The use menu entry Script/Feature Scripts... to add this directory. The script is then available in menu entry Script/Utilities.

Georg
Georg (6 inch Newton, unmodified Canon EOS40D+80D, unguided EQ5 mount)

Offline Simon Hicks

  • PixInsight Old Hand
  • ****
  • Posts: 333
Re: Removing Canon Banding with PJSR
« Reply #21 on: 2009 May 24 13:56:16 »
Hi Georg,

Thanks for the pointer. I copied the script into Notepad and then just saved it with a .js extension and it seemed to work just fine. I tried it on one of my Canon images and it cleared up the banding very effectively.

Many thanks Georg.

Regards
           Simon

Offline NKV

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 677
Re: Removing Canon Banding with PJSR
« Reply #22 on: 2009 May 24 21:27:20 »
Georg, it's fantastic! Look at bias. :surprised:
Thank you. I must recalibrate all my archive. So, how to apply the script to group of images (to ImageContainer) ?
Best regards,
Nikolay.
« Last Edit: 2009 May 24 21:48:00 by NKV »

Offline Niall Saunders

  • PTeam Member
  • PixInsight Jedi Knight
  • *****
  • Posts: 1456
  • We have cookies? Where ?
Re: Removing Canon Banding with PJSR
« Reply #23 on: 2009 May 24 23:58:56 »
Hi Georg, (and others)

If you apply your 'banding removal' to ALL of your subs (lights, darks, flats, flatdarks, biasoffsets etc.) is there not a possibility that you end up with 'cumulative noise' ?

In other words, each time you apply the 'de-banding' algorithm, you are introducing a signal value that has been 'interpolated' as opposed to having been 'acquired', and interpolation is always a 'best guess' process, and the definition of 'noise' can be taken to be 'a signal value that was obtained OTHER than by measurement'.

I am curious, simply because - as is the case with my deBayering trials, I only want to deBayer 'after' I have calibrated. If I debayered my full sub-frame dataset, then I feel that I would have introduced 'noise' too early in the post-processing stage. In fact, if I could align and stack my calibrated light frames, and the only deBayer my 'final' Light, that would be ideal. I would only have deBayered 'once' - but I know that I cannot do that because, by then, I would have lost the association between the deBayer CFA grid and the actual image.

But, in your case, it looks as if you could wait until you have the final calibrated light - and only remove the banding at that stage. Would this be the desired workflow?

Cheers,
« Last Edit: 2009 May 25 04:27:09 by Niall Saunders »
Cheers,
Niall Saunders
Clinterty Observatories
Aberdeen, UK

Altair Astro GSO 10" f/8 Ritchey Chrétien CF OTA on EQ8 mount with homebrew 3D Balance and Pier
Moonfish ED80 APO & Celestron Omni XLT 120
QHY10 CCD & QHY5L-II Colour
9mm TS-OAG and Meade DSI-IIC

Offline georg.viehoever

  • PTeam Member
  • PixInsight Jedi Master
  • ******
  • Posts: 2132
Re: Removing Canon Banding with PJSR
« Reply #24 on: 2009 May 25 02:08:15 »
Hi Sander,

Quote
But, in your case, it looks as if you could wait until you have the final calibrated light - and only remove the banding at that stage. Would this be the desired workflow?

In fact, so far I have applied the script only to images already calibrated and stacked with DSS (complete with flats, darks, bias frames). The peculiar thing about this Canon banding issue is that it cannot be completely eliminated by calibration, and the dark bands also appear in different regions of the image. Some attribute it to read noise, some believe it is electromagnetic interference, some have even other ideas. That's why I need this script: to remove the banding that remains after calibration and stacking.

I was surprised by Nikolay's finding that it works nicely on bias frames as well, but just as you, I am not sure that it should be applied to non-calibrated frames.

Georg

Georg (6 inch Newton, unmodified Canon EOS40D+80D, unguided EQ5 mount)

Offline Simon Hicks

  • PixInsight Old Hand
  • ****
  • Posts: 333
Re: Removing Canon Banding with PJSR
« Reply #25 on: 2009 May 25 04:55:10 »
Hi Niall and Georg,

I agree....it is not at all clear that you should remove the banding from the uncalibrated images because by doing so you are effectively adding noise to a measured signal by modifying it.

However....I pose the following as a question...because I don't know the answer:

The banding seems to be completely random, i.e. if you look at two frames (lights, darks, flats, whatever) the banding is always there and it is always in different positions. The point of taking a dark or a flat or a bias frame is to take a measurement of the dark signal, or the flat signal or the bias signal. We try to take as many as possible to reduce the noise whilst maintaining the signal. And that obviously works just fine for most of the signals and noise sources that we encounter.

However, the banding seems to be quite structured (on a line by line basis) and completely random in its location. Obviously taking lots of lights, darks, bias frames etc should eventually blur the banding out. But because of the banding's structure and dominant size it obviously takes a huge number of frames to do that.....and we all end up with banding still visible (all be it reduced) in our stacked calibrated images.

So I wonder if there is a balance to be struck here between two methods. The first is to apply the banding removal to each sub, each flat, bias and dark frame. This will add noise by virtue of very subtle modifications to the signal of each frame...but reduces the noise due to the structured but random banding. The second route is to leave all the subs, darks, bias and flats in their pure pristine form and remove the banding after calibration and stacking.

I don't know mathematically which one would give the best results, and I guess it would actually be quite a big problem to work it out rigorously.

Anyone know the answer?

Cheers
         Simon

Offline georg.viehoever

  • PTeam Member
  • PixInsight Jedi Master
  • ******
  • Posts: 2132
Re: Removing Canon Banding with PJSR
« Reply #26 on: 2009 May 25 05:50:11 »
Simon,

I am not fluent in the mathematics of noise calculation. But some time ago I did an experiment with a rediculous number of shots: 100 bias, flats, darks and lights each (which clearly is not feasible for normal shots). To my surprise, the banding was still there in the calibrated images. There is something in there that is just not fixed by calibration. Maybe the temperature fluctuations that happen unavoidably over night? Maybe some variation in the movement of the shutter?

Thats when I started to think about an algorithmic approach.

Georg
Georg (6 inch Newton, unmodified Canon EOS40D+80D, unguided EQ5 mount)

Offline Niall Saunders

  • PTeam Member
  • PixInsight Jedi Knight
  • *****
  • Posts: 1456
  • We have cookies? Where ?
Re: Removing Canon Banding with PJSR
« Reply #27 on: 2009 May 25 07:32:31 »
Georg,

I am wondering why you need to involve BiasOffset frames in your data collection?

Is it not the case with a DSLR (un-modified) that, because you cannot control the CCD temperature, you really have to take Darks at, more or less, the same time as you take Lights, and that - because of this temperature limitation - you have to take Darks using the same exposure time as used for your Lights?

And, in the previous statement, you can obviosly substitute Flats for Lights, and FlatDarks for Darks.

Which, in my mind, leaves no requirement for BiasOffset frames at all. (I have always considered BiasOffset frames as only being needed to 're-scale' longer-exposure Darks to match shorter-exposure Lights. Am I missing something ?)

Is it not the case that the BiasOffset component is present, in statistically 'equal' amounts, in both a Light and a Dark, and is therefore 'eliminated' when a Dark is subtracted from a Light (given that temp and exposure time are the same for both Light and Dark)?

But that then makes me wonder if, should the Canon 'banding' be present in the BiasOffset subs, then the 'noise' is purely a function of the 'readout' process? If that were the case then, if there is no repeatable 'pattern' to the noise - that is, the noise IS truly random, in which case should it be eliminated as 'early' in the process as possible ?

Either that, or move up here to Scotland, where our clouds will successfully filter out all sorts of CCD noise ^-^

Cheers,
« Last Edit: 2009 May 25 11:14:26 by Niall Saunders »
Cheers,
Niall Saunders
Clinterty Observatories
Aberdeen, UK

Altair Astro GSO 10" f/8 Ritchey Chrétien CF OTA on EQ8 mount with homebrew 3D Balance and Pier
Moonfish ED80 APO & Celestron Omni XLT 120
QHY10 CCD & QHY5L-II Colour
9mm TS-OAG and Meade DSI-IIC

Offline georg.viehoever

  • PTeam Member
  • PixInsight Jedi Master
  • ******
  • Posts: 2132
Re: Removing Canon Banding with PJSR
« Reply #28 on: 2009 May 25 08:23:56 »
Hi Niall,

the clouds should be useable as filters here in Munich as well, especially in winter. Can you give me details of this scottish filter technique ?  ;)

Have a look at http://deepskystacker.free.fr/english/theory.htm (especially the bottom). You need some type of bias to get rid of the pedestal in the flats that are divided into the end result. There are different ways to arrive at this bias. Also, I found that my images are often slightly better when I allow DSS to do dark optimization (even if the darks were taken on the same evening). And dark optimization requires bias again.

Georg
Georg (6 inch Newton, unmodified Canon EOS40D+80D, unguided EQ5 mount)

Offline Niall Saunders

  • PTeam Member
  • PixInsight Jedi Knight
  • *****
  • Posts: 1456
  • We have cookies? Where ?
Re: Removing Canon Banding with PJSR
« Reply #29 on: 2009 May 25 08:57:19 »
OK,

As I understood things, when you apply your MasterDark to each of your Lights, using 'SUBTRACT' then you eliminate the 'common mode' BiasOffset signal. The same goes for the Flats and FlatDarks.

This gives you a new set of part-calibrated Lights, and a fully calibrated MasterFlat, neither of which contain any 'bias' component, thus allowing you to 'divide' the MasterFlat into every part-calibrated Light - giving you a final set of FULLY calibrated Lights, ready for alignment and stacking.

So, I am still not clear why there is a need for BiasOffset frames. Obviously, when I get home I will have to re-read the DSS help file, and that from Nebulosity as well - and I will have to go through the appropriate chapter of my 'Bible', the HAIP.

As for using the 'Scottish Cloud Filter' method -it is very easy. Irrespective of day or night, and even ignoring your ownership of a telescope, Google foran image of your desired target, apply a random 0 to 5 degree rotation, a Y-flip, crop to suit, apply Gaussian Noise to suit your actual imager, then rescale to an appropriate image size. If a guilty conscience occurs, consider buying property in New Mexico - et voilà !!

Cheers,
Cheers,
Niall Saunders
Clinterty Observatories
Aberdeen, UK

Altair Astro GSO 10" f/8 Ritchey Chrétien CF OTA on EQ8 mount with homebrew 3D Balance and Pier
Moonfish ED80 APO & Celestron Omni XLT 120
QHY10 CCD & QHY5L-II Colour
9mm TS-OAG and Meade DSI-IIC