void computeDistanceTransform3D(const cv::Mat &edges, std::vector<cv::Mat> &dtImages) { //TODO: move up const float directionCost = 0.5f; const double maxCost = 30.0; const int nDirections = 60; const double scale = 1.0; LFLineFitter lineFitter; fitLines(edges, lineFitter); EIEdgeImage linearEdges; linearEdges.SetNumDirections(nDirections); linearEdges.Read(lineFitter); linearEdges.Scale(scale); LMDistanceImage distanceImage; distanceImage.Configure(directionCost, maxCost); distanceImage.SetImage(linearEdges); vector<Image<float> > &fdcmDtImages = distanceImage.getDtImages(); dtImages.resize(fdcmDtImages.size()); for (size_t i = 0; i < fdcmDtImages.size(); ++i) { fdcm2cv(fdcmDtImages[i], dtImages[i]); } }
void LMDistanceImage::ConstructDTs(EIEdgeImage& ei) { #if 0 Image<uchar> image(width_,height_,false); dtImages_.resize(nDirections_); for (int i=0 ; i<ei.nDirections_ ; i++) { dtImages_[i].Resize(width_,height_,false); ei.ConstructDirectionImage(i, &image); DistanceTransform::CompDT(&image, &dtImages_[i], false); } #else dtImages_.resize(nDirections_); #pragma omp parallel for for (int i=0 ; i<ei.nDirections_ ; i++) { Image<uchar> image(width_,height_,false); dtImages_[i].Resize(width_,height_,false); ei.ConstructDirectionImage(i, &image); DistanceTransform::CompDT(&image, &dtImages_[i], false); } #endif }
void LMDisplay::DrawMatchTemplate(Image<RGBMap> *image,EIEdgeImage &ei,int x,int y,double scale,const RGBMap scalar,int thickness) { EIEdgeImage tdbImage; tdbImage = ei; tdbImage.Scale(scale); LFLineSegment line; double ltrans[2]; ltrans[0] = 1.0*x; ltrans[1] = 1.0*y; for (int k=0 ; k<tdbImage.nLines_ ; k++) { line = tdbImage.lines_[k]; line.Translate(ltrans); ImageDraw<RGBMap>::Line(image,(int)line.sx_,(int)line.sy_,(int)line.ex_,(int)line.ey_,scalar,thickness); } }