/////////////////////////////////////////////////////////////////////////////// // 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; }
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; }