Exemplo n.º 1
0
///////////////////////////////////////////////////////////////////////////////
// namespace po = boost::program_options;
MetaImage Rotate (MetaImage & image, double angle)
{

/*  bool parseOK=true;
  po::variables_map vm;
  try{
    po::store(po::parse_command_line(argc, argv, general_opt), vm);  
  }catch(const std::exception& ex){
    trace.info()<< "Error checking program options: "<< ex.what()<< std::endl;
    parseOK=false;
  }
  po::notify(vm);    
  if(vm.count("help")||argc<=1|| !parseOK)
    {
      trace.info()<< "Rotate an image by a given angle a binary object with 0 values as background points and values >0 for the foreground ones." <<std::endl << "Basic usage: "<<std::endl
      << "\t imgRotate [options] --input <imageName> --output <outputImage> --angle 0.3"<<std::endl
      << general_opt << "\n";
      return 0;
    } */
  
  //Parameters
/*  if ( ! ( vm.count ( "input" ) ) ) missingParam ( "--input" );
  const std::string input = vm["input"].as<std::string>();
  if ( ! ( vm.count ( "output" ) ) ) missingParam ( "--output" );
  const std::string  output = vm["output"].as<std::string>();
  const double angle = vm["angle"].as<double>(); */
  
  typedef functors::IntervalForegroundPredicate<MetaImage> Binarizer;
//  MyImage image = GenericReader<MyImage>::import( input );
//  trace.info() <<"Input image: "<< image<<std::endl;
  
  typedef functors::BackwardRigidTransformation2D<Z2i::Space> RotateFunctor;
  Z2i::RealPoint center = image.domain().upperBound();
  center -= image.domain().lowerBound();
  center /= 2.0;
  
  RotateFunctor rotationFunctor(center,
                                angle,
                                Z2i::RealPoint(0.0,0.0));
  
  functors::Identity idD;
  typedef functors::DomainRigidTransformation2D<MetaImage::Domain, RotateFunctor> MyDomainTransformer;
  MyDomainTransformer rotDomain(rotationFunctor);
  typedef MyDomainTransformer::Bounds Bounds;
  Bounds newdomain = rotDomain( image.domain());
  MetaImage::Domain transformedDomain ( newdomain.first, newdomain.second );
  typedef ConstImageAdapter<MetaImage, MetaImage::Domain, RotateFunctor, MetaImage::Value, functors::Identity > MetaImageBackwardAdapter;
  MetaImageBackwardAdapter backwardImageAdapter ( image, transformedDomain , rotationFunctor, idD );
  
  MetaImage new_image = MetaImage(transformedDomain);
  for (MetaImage::Domain::Iterator it = transformedDomain.begin(); it != transformedDomain.end();it++){
    new_image.setValue(*it,backwardImageAdapter(*it));
  }
  
  return new_image;
//  backwardImageAdapter >> output;
//  return backwardImageAdapter;
}
Exemplo n.º 2
0
bool Apply_AntiBruit (MetaImage & image){
  Domain domain = image.domain();
  MetaImage new_image = MetaImage(domain);
  bool change=false;
  for (Domain::Iterator it = domain.begin(); it != domain.end();it++){
    int noirs =0; 		//variable indiquant le nombre de noirs
    int blancs =0;		//variable indiquant le nombre de blancs
    bool couleur=image(*it)>0;
    couleur?blancs=1:noirs=1;
    vector<Point> voisins = Anti_Bruit_Make_Voisins(*it);
    for (unsigned int i = 0; i < voisins.size(); i++){
        if (domain.isInside(voisins[i])){
	    image(voisins[i])>0?blancs++:noirs++;
	    //noirs  += 1-image(voisins[i]);
	    //blancs += image(voisins[i]);
	}
    }
    if((blancs>noirs)^couleur)change=true;
    if (noirs > blancs) {new_image.setValue(*it,0);}
    else {new_image.setValue(*it,1);}
//    new_image.setValue(*it,(1+(noirs>blancs)) %2);
  }
  image=new_image;
  return change;
}