Elaboradar  0.1
 Tutto Classi Namespace File Funzioni Variabili Tipi enumerati (enum) Gruppi
void radarelab::algo::Cleaner::clean ( PolarScan< double > &  scan_Z,
PolarScan< double > &  scan_W,
PolarScan< double > &  scan_V,
PolarScan< double > &  scan_ZDR,
double  bin_wind_magic_number,
unsigned  iel = 0,
bool  set_undetect = false 
)
static

Funzione che crea l'oggetto cleaner, lo inizializza, pulisce i dati e modifica il PolarScan di DBZH.

Parametri
[in,out]scan_Z- volume di DBZH
[in]scan_W- volume di WRAD
[in]scan_V- volume di V
[in]scan_zdr- volume di ZDR
[in]bin_wind_magic_number- soglia vento per dati in formato SP20
[in]iel- indice elevazione solo per debug

Definizione alla linea 732 del file cleaner.cpp.

Referenzia radarelab::PolarScanBase::beam_count, radarelab::PolarScanBase::beam_size, clean_beam(), radarelab::PolarScan< T >::gain, radarelab::gdal_init_once(), radarelab::PolarScan< T >::nodata, radarelab::PolarScan< T >::offset, radarelab::volume::Scans< T >::offset, radarelab::PolarScan< T >::undetect, e Z_missing.

733 {
734  cout<<"Chiamato cleaner "<<set_undetect<<endl;
735  if (scan_z.beam_count != scan_w.beam_count)
736  throw std::runtime_error("scan_z beam_count no equal to scan_w beam_count");
737  if (scan_z.beam_size != scan_w.beam_size)
738  throw std::runtime_error("scan_z beam_size no equal to scan_w beam_size");
739 
740  if (scan_z.beam_count != scan_v.beam_count)
741  throw std::runtime_error("scan_z beam_count no equal to scan_v beam_count");
742  if (scan_z.beam_size != scan_v.beam_size)
743  throw std::runtime_error("scan_z beam_size no equal to scan_v beam_size");
744  double z_val=scan_z.nodata;
745  if(set_undetect) z_val=scan_z.undetect;
746 //Cleaner cleaner(scan_z.undetect, scan_w.undetect, scan_v.nodata, bin_wind_magic_number);
747  Cleaner cleaner(z_val, scan_w.undetect, scan_v.nodata, bin_wind_magic_number);
748 
749  const unsigned beam_count = scan_z.beam_count;
750  const unsigned beam_size = scan_z.beam_size;
751 
752  // fprintf(stderr, "NEWCLEANER zmis %f, wthr %f, vmis %f, mn %f\n",
753  // cleaner.Z_missing, cleaner.W_threshold, cleaner.V_missing, cleaner.bin_wind_magic_number);
754 
756  Z_S.push_back(scan_z);
757  radarelab::volume::textureSD( Z_S,SD2D, 1000. , 3,false);
758  radarelab::volume::Scans<double> ZDR_S, SDZDR2D;
759  ZDR_S.push_back(scan_zdr);
760  radarelab::volume::textureSD( ZDR_S,SDZDR2D, 1000. , 3,false);
761 
762 //----------------------------------------------------------------------------------
763 //----------------------------------------------------------------------------------
764 //----------------------------------------------------------------------------------
765 // Mettere a true per fare grafica per debug o false per non fare grafica
766 //
767 // RICORDARSI DI TOGLIERE/METTERE COMMENTI DOPO CLEAN_BEAM
768 // -------------------------------------------------------------------
769 Matrix2D <unsigned char>img_tmp, z_clean;
771 std::string ext;
772 char pippo[200];
773 if (false){
775 
776  printf("scrivo Z ");
777  img = (scan_z.array() - scan_z.offset )/ scan_z.gain /256 ;
778  sprintf(pippo, "_%02d.png",iel);
779  ext=pippo;
780  img_tmp=img.cast<unsigned char>();
781  z_clean=img_tmp;
782  radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_Z"+ext, "PNG");
783 
784 // printf("V ");
785 // img = (scan_v.array()-scan_v.offset)/scan_v.gain/256 ;
786 // img_tmp=img.cast<unsigned char>();
787 // radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_V"+ext,"PNG");
788 // printf("W ");
789 // img = (scan_w.array()-scan_w.offset)/scan_w.gain/256 ;
790 // img_tmp=img.cast<unsigned char>();
791 // radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_W"+ext,"PNG");
792  printf("SD2d ");
793  img = (SD2D[0].array()-SD2D[0].offset)/SD2D[0].gain/256 ;
794  img_tmp=img.cast<unsigned char>();
795  radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_SD2d"+ext,"PNG");
796  printf("SDZDR2d ");
797  img = (SDZDR2D[0].array()-SDZDR2D[0].offset)/SDZDR2D[0].gain/256 ;
798  img_tmp=img.cast<unsigned char>();
799  radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_SDZDR2d"+ext,"PNG");
800  printf("\n");
801 }
802  double new_val=cleaner.Z_missing;
803  if (set_undetect) new_val=scan_z.undetect;
804 //printf("valore new_val ---> %f\n",new_val);
805  for (unsigned i = 0; i < beam_count; ++i)
806  {
807  // Compute which elements need to be cleaned
808  vector<bool> corrected = cleaner.clean_beam(scan_z.row(i), scan_w.row(i), scan_v.row(i),SD2D[0].row(i), SDZDR2D[0].row(i), scan_z, scan_w, scan_v, SD2D[0],i);
809 
810  for (unsigned ib = 0; ib < beam_size; ++ib)
811  if (corrected[ib])
812  {
813  //scan_z(i, ib) = cleaner.Z_missing;
814  scan_z(i, ib) = new_val;
815  // scan_w(i, ib) = cleaner.W_threshold;
816  // scan_v(i, ib) = cleaner.V_missing;
817  }
818 // img_tmp(i,ib)=255;
819 // z_clean(i,ib)=0;
820 // } else img_tmp(i,ib)= 0 ;
821 
822  }
823 //radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_clean"+ext,"PNG");
824 //radarelab::write_image(z_clean,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_Zclean"+ext,"PNG");
825 }
T offset
Data Offset.
Definition: volume.h:274
Cleaner(double Z_missing, double W_threshold, double V_missing, double bin_wind_magic_number)
Constructor.
Definition: cleaner.h:29
const double bin_wind_magic_number
valore magico per dati in formato SP20
Definition: cleaner.h:25
void gdal_init_once()
Initialize the GDAL library when called for the first time; does nothing all other times...
Definition: image.cpp:12