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::PolarScan< T >::undetect, e Z_missing.

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