source: branches/fitshead-branch/ATrous/find_sources_atrous.cc @ 1441

Last change on this file since 1441 was 3, checked in by Matthew Whiting, 18 years ago

This is the first full import of all working code to
the Duchamp repository.
Made three directories at top level:

branches/ tags/ trunk/

and trunk/ has the full set of code:
ATrous/ Cubes/ Detection/ InputComplete? InputExample? README Utils/ docs/ mainDuchamp.cc param.cc param.hh

File size: 3.7 KB
Line 
1#include <iostream>
2//#include <Cubes/cubes.hh>
3#include <Utils/utils.hh>
4using namespace std;
5
6void findSourcesAtrous1D(Image &image, Param &par)
7{
8  float blankPixValue = par.getBlankPixVal();
9  bool flagFDR = par.getFlagFDR();
10  long size = image.getSize();
11  float *arr = new float[size];
12  float *newarr = new float[size];
13  float *resid = new float[size];
14  int goodSize=0;
15  for(int i=0;i<size;i++){
16    if(!par.isBlank(image.getPixValue(i)))
17      arr[goodSize++] = image.getPixValue(i);
18  }
19  float originalMean,originalSigma,mean,sigma;
20  if(goodSize>0){
21    findMedianStats(arr,goodSize,originalMean,originalSigma);
22    image.setStats(originalMean,originalSigma,par.getCut());
23    image.getArray(arr);
24    atrous1DReconstruct(size,arr,newarr,par);
25
26    goodSize=0;
27    for(int i=0;i<size;i++)
28      if(!par.isBlank(image.getPixValue(i)))
29        resid[goodSize++] = arr[i] - newarr[i];
30    findNormalStats(resid,goodSize,mean,sigma);
31
32    long *dim = new long[2]; dim[0] = size; dim[1]=1;
33    Image *newimage = new Image(dim);
34//     *newimage = image;
35    newimage->saveArray(newarr,size);
36//     newimage->setStats(mean,sigma,par.getCut());
37    newimage->setStats(originalMean,sigma,par.getCut());
38    if(flagFDR) setupFDR(*newimage,par);
39    lutz_detect(*newimage,par);
40    for(int obj=0;obj<newimage->getNumObj();obj++){
41      Detection *object = new Detection;
42      *object = newimage->getObject(obj);
43      for(int pix=0;pix<object->getSize();pix++) {
44        // set the flux of each pixel in each object to the flux
45        // in the corresponding pixel in the original image.
46        float flux = image.getPixValue(object->getX(pix),object->getY(pix));
47        object->setF(pix,flux);
48      }
49      image.addObject(*object);
50      maskObject(image,*object);
51      delete object;
52    }
53    delete newimage;
54  }
55  delete [] arr;
56
57
58
59void findSourcesAtrous2D(Image &image, Param &par)
60{
61  float blankPixValue = par.getBlankPixVal();
62  bool flagFDR = par.getFlagFDR();
63
64  long size = image.getSize();
65  float *arr = new float[size];
66  float *newarr = new float[size];
67  float *resid = new float[size];
68  int goodSize=0;
69  for(int i=0;i<size;i++){
70    if(!par.isBlank(image.getPixValue(i)))
71      arr[goodSize++] = image.getPixValue(i);
72  }
73  if(goodSize>0){
74    long xdim = image.getDimX();
75    long ydim = image.getDimY();
76    long *dim = new long[2];
77    dim[0] = xdim; dim[1] = ydim;
78
79    float originalMean,originalSigma,mean,sigma;
80    //    findMedianStats(arr,goodSize,mean,sigma);
81    findMedianStats(arr,goodSize,originalMean,originalSigma);
82//     cerr<<"findSourcesAtrous2D: mean = "<<mean<<", sigma = "<<sigma<<endl;
83    image.setStats(originalMean,originalSigma,par.getCut());
84    image.getArray(arr);
85    //    atrous2DReconstruct(xdim,ydim,arr,newarr,par);
86    atrous2DReconstruct(xdim,ydim,arr,newarr,par);
87
88    goodSize=0;
89    for(int i=0;i<size;i++)
90      if(!par.isBlank(image.getPixValue(i)))
91        resid[goodSize++] = arr[i] - newarr[i];
92    findNormalStats(resid,goodSize,mean,sigma);
93
94    Image *newimage = new Image(dim);
95    //    *newimage = image;
96    newimage->saveArray(newarr,size);
97    //    newimage->setStats(mean,sigma,par.getCut());
98    newimage->setStats(originalMean,sigma,par.getCut());
99    if(flagFDR) setupFDR(*newimage,par);
100    lutz_detect(*newimage,par);
101    for(int obj=0;obj<newimage->getNumObj();obj++){
102      Detection *object = new Detection;
103      *object = newimage->getObject(obj);
104      for(int pix=0;pix<object->getSize();pix++) {
105        // set the flux of each pixel in each object to the flux
106        // in the corresponding pixel in the original image.
107        float flux = image.getPixValue(object->getX(pix),object->getY(pix));
108        object->setF(pix,flux);
109      }
110      image.addObject(*object);
111      maskObject(image,*object);
112      delete object;
113    }
114    delete newimage;
115  }
116  delete [] arr;
117  delete [] newarr;
118
119
Note: See TracBrowser for help on using the repository browser.