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
}
Example #3
0
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);
	}
}