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,
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]bin_wind_magic_number- soglia vento per dati in formato SP20
[in]iel- indice elevazione solo per debug

Definizione alla linea 645 del file cleaner.cpp.

Referenzia radarelab::PolarScanBase::beam_count, radarelab::PolarScanBase::beam_size, radarelab::PolarScanBase::cell_size, clean_beam(), radarelab::PolarScan< T >::nodata, radarelab::PolarScan< T >::undetect, e Z_missing.

646 {
647 
648  if (scan_z.beam_count != scan_w.beam_count)
649  throw std::runtime_error("scan_z beam_count no equal to scan_w beam_count");
650  if (scan_z.beam_size != scan_w.beam_size)
651  throw std::runtime_error("scan_z beam_size no equal to scan_w beam_size");
652 
653  if (scan_z.beam_count != scan_v.beam_count)
654  throw std::runtime_error("scan_z beam_count no equal to scan_v beam_count");
655  if (scan_z.beam_size != scan_v.beam_size)
656  throw std::runtime_error("scan_z beam_size no equal to scan_v beam_size");
657 
658  Cleaner cleaner(scan_z.undetect, scan_w.undetect, scan_v.nodata, bin_wind_magic_number);
659 
660  const unsigned beam_count = scan_z.beam_count;
661  const unsigned beam_size = scan_z.beam_size;
662 
663  // fprintf(stderr, "NEWCLEANER zmis %f, wthr %f, vmis %f, mn %f\n",
664  // cleaner.Z_missing, cleaner.W_threshold, cleaner.V_missing, cleaner.bin_wind_magic_number);
665 
666  radarelab::volume::Scans<double> Z_S, SD2D,SD_Ray,SD_Az;
667  Z_S.push_back(scan_z);
668  radarelab::volume::textureSD( Z_S,SD2D, 1000. , 3,false);
669  radarelab::volume::textureSD( Z_S,SD_Ray, scan_z.cell_size*9 , 360./scan_z.beam_count,false);
670  radarelab::volume::textureSD( Z_S,SD_Az, scan_z.cell_size , 5*360./scan_z.beam_count,false);
671 
672 //radarelab::gdal_init_once();
673 //printf("scrivo Z ");
674 //Matrix2D <double>img;
675 //img = (scan_z.array() - scan_z.offset )/ scan_z.gain /256 ;
676 //Matrix2D <unsigned char>img_tmp, z_clean;
677 //std::string ext;
678 //char pippo[200];
679 //sprintf(pippo, "_%02d.png",iel);
680 //ext=pippo;
681 
682 //img_tmp=img.cast<unsigned char>();
683 //z_clean=img_tmp;
684 //radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_Z"+ext, "PNG");
685 
686 //printf("V ");
687 //img = (scan_v.array()-scan_v.offset)/scan_v.gain/256 ;
688 //img_tmp=img.cast<unsigned char>();
689 //radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_V"+ext,"PNG");
690 //printf("W ");
691 //img = (scan_w.array()-scan_w.offset)/scan_w.gain/256 ;
692 //img_tmp=img.cast<unsigned char>();
693 //radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_W"+ext,"PNG");
694 //printf("SD2d ");
695 //img = (SD2D[0].array()-SD2D[0].offset)/SD2D[0].gain/256 ;
696 //img_tmp=img.cast<unsigned char>();
697 //radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_SD2d"+ext,"PNG");
698 //printf("\n");
699 
700  double new_val=cleaner.Z_missing;
701  if (set_undetect) new_val=scan_z.nodata;
702 
703  for (unsigned i = 0; i < beam_count; ++i)
704  {
705  // Compute which elements need to be cleaned
706  // vector<bool> corrected = cleaner.clean_beam(scan_z.row(i), scan_w.row(i), scan_v.row(i),SD2D[0].row(i), scan_z, scan_w, scan_v, SD2D[0],i);
707  vector<bool> corrected = cleaner.clean_beam(scan_z.row(i), scan_w.row(i), scan_v.row(i),i);
708 
709  for (unsigned ib = 0; ib < beam_size; ++ib)
710  if (corrected[ib])
711  {
712  //scan_z(i, ib) = cleaner.Z_missing;
713  scan_z(i, ib) = new_val;
714  // scan_w(i, ib) = cleaner.W_threshold;
715  // scan_v(i, ib) = cleaner.V_missing;
716  }
717 // img_tmp(i,ib)=255;
718 // z_clean(i,ib)=0;
719 // } else img_tmp(i,ib)= 0 ;
720 
721  }
722 //radarelab::write_image(img_tmp,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_clean"+ext,"PNG");
723 //radarelab::write_image(z_clean,"/ponte/rad_svn/proc_operative/test_arch/rev_actual/radar/immagini/Cleaner/PPI_Zclean"+ext,"PNG");
724 }
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