Isis 3.0 Application Source Code Reference |
Home |
00001 // $Id: phohillier.cpp,v 1.1 2010/02/24 04:05:19 kbecker Exp $ 00002 #include "Isis.h" 00003 00004 #include <string> 00005 #include <memory> 00006 00007 #include "Cube.h" 00008 #include "Hillier.h" 00009 #include "iException.h" 00010 #include "ProcessByLine.h" 00011 #include "Pvl.h" 00012 #include "PvlGroup.h" 00013 #include "SpecialPixel.h" 00014 00015 using namespace std; 00016 using namespace Isis; 00017 00018 // Global variables 00019 Hillier *pho; 00020 00021 void hillier(Buffer &in, Buffer &out); 00022 00023 void IsisMain() { 00024 // We will be processing by line 00025 ProcessByLine p; 00026 00027 // Set up the input cube and get camera information 00028 Cube *icube = p.SetInputCube("FROM"); 00029 00030 // Create the output cube 00031 Cube *ocube = p.SetOutputCube("TO"); 00032 00033 // Set up the user interface 00034 UserInterface &ui = Application::GetUserInterface(); 00035 // Get the name of the parameter file 00036 Pvl par(ui.GetFilename("PHOPAR")); 00037 auto_ptr<Hillier> photom = auto_ptr<Hillier> (new Hillier(par, *icube)); 00038 pho = photom.get(); 00039 00040 // Start the processing 00041 p.StartProcess(hillier); 00042 00043 PvlGroup photo("Photometry"); 00044 pho->Report(photo); 00045 ocube->putGroup(photo); 00046 Application::Log(photo); 00047 p.EndProcess(); 00048 } 00049 00050 /** 00051 * @brief Apply Hillier photometric correction 00052 * 00053 * Short function dispatched for each line to apply the Hillier photometrc 00054 * correction function. 00055 * 00056 * @author kbecker (2/20/2010) 00057 * 00058 * @param in Buffer containing input data 00059 * @param out Buffer of photometrically corrected data 00060 */ 00061 void hillier(Buffer &in, Buffer &out) { 00062 00063 for(int i = 0; i < in.size(); i++) { 00064 // Don't correct special pixels 00065 if(IsSpecial(in[i])) { 00066 out[i] = in[i]; 00067 } 00068 else { 00069 // Get correction and test for validity 00070 double ph = pho->Compute(in.Line(i), in.Sample(i), in.Band(i)); 00071 out[i] = (IsSpecial(ph) ? Null : in[i] * ph); 00072 } 00073 } 00074 return; 00075 } 00076