Exemple #1
0
void Controller::saveSteerableViewMapImages()
{
	SteerableViewMap * svm = _Canvas->getSteerableViewMap();
	if (!svm) {
		cerr << "the Steerable ViewMap has not been computed yet" << endl;
		return;
	}
	svm->saveSteerableViewMap();
}
  float GetViewMapGradientNormF0D::operator()(Interface0DIterator& iter){
    SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap();
    float pxy = svm->readCompleteViewMapPixel(_level,(int)iter->getProjectedX(), (int)iter->getProjectedY());
    float gx = svm->readCompleteViewMapPixel(_level,(int)iter->getProjectedX()+_step, (int)iter->getProjectedY())
      - pxy;
    float gy = svm->readCompleteViewMapPixel(_level,(int)iter->getProjectedX(), (int)iter->getProjectedY()+_step)
      - pxy;
	float f = Vec2f(gx,gy).norm();
    return f;
  }
Exemple #3
0
void Controller::displayDensityCurves(int x, int y)
{
	SteerableViewMap * svm = _Canvas->getSteerableViewMap();
	if (!svm)
		return;

	unsigned int i, j;
	typedef vector<Vec3r> densityCurve;
	vector<densityCurve> curves(svm->getNumberOfOrientations() + 1);
	vector<densityCurve> curvesDirection(svm->getNumberOfPyramidLevels());

	// collect the curves values
	unsigned nbCurves = svm->getNumberOfOrientations() + 1;
	unsigned nbPoints = svm->getNumberOfPyramidLevels();
	if (!nbPoints)
		return;

	// build the density/nbLevels curves for each orientation
	for (i = 0; i < nbCurves; ++i) {
		for (j = 0; j < nbPoints; ++j) {
			curves[i].push_back(Vec3r(j, svm->readSteerableViewMapPixel(i, j, x, y), 0));
		}
	}
	// build the density/nbOrientations curves for each level
	for (i = 0; i < nbPoints; ++i) {
		for (j = 0; j < nbCurves; ++j) {
			curvesDirection[i].push_back(Vec3r(j, svm->readSteerableViewMapPixel(j, i, x, y), 0));
		}
	}

	// display the curves
#if 0
	for (i = 0; i < nbCurves; ++i)
		_pDensityCurvesWindow->setOrientationCurve(i, Vec2d(0, 0), Vec2d(nbPoints, 1), curves[i], "scale", "density");
	for (i = 1; i <= 8; ++i)
		_pDensityCurvesWindow->setLevelCurve(i, Vec2d(0, 0), Vec2d(nbCurves, 1), curvesDirection[i],
		                                     "orientation", "density");
	_pDensityCurvesWindow->show();
#endif
}
 float ReadCompleteViewMapPixelF0D::operator()(Interface0DIterator& iter) {
   SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap();
   float v = svm->readCompleteViewMapPixel(_level,(int)iter->getProjectedX(), (int)iter->getProjectedY());
   return v;
 }
Exemple #5
0
void Controller::ComputeSteerableViewMap()
{
#if 0  //soc
	if ((!_Canvas) || (!_ViewMap))
		return;

	// Build 4 nodes containing the edges in the 4 directions
	NodeGroup *ng[Canvas::NB_STEERABLE_VIEWMAP];
	unsigned i;
	real c = 32.0f/255.0f; // see SteerableViewMap::readSteerableViewMapPixel() for information about this 32.
	for (i = 0; i < Canvas::NB_STEERABLE_VIEWMAP; ++i) {
		ng[i] = new NodeGroup;
	}
	NodeShape *completeNS = new NodeShape;
	completeNS->material().setDiffuse(c,c,c,1);
	ng[Canvas::NB_STEERABLE_VIEWMAP-1]->AddChild(completeNS);
	SteerableViewMap * svm = _Canvas->getSteerableViewMap();
	svm->Reset();

	ViewMap::fedges_container& fedges = _ViewMap->FEdges();
	LineRep * fRep;
	NodeShape *ns;
	for (ViewMap::fedges_container::iterator f = fedges.begin(), fend = fedges.end();
	     f != fend;
	     ++f)
	{
		if ((*f)->viewedge()->qi() != 0)
			continue;
		fRep = new LineRep((*f)->vertexA()->point2d(), (*f)->vertexB()->point2d());
		completeNS->AddRep(fRep); // add to the complete map anyway
		double *oweights = svm->AddFEdge(*f);
		for (i = 0; i < (Canvas::NB_STEERABLE_VIEWMAP - 1); ++i) {
			ns = new NodeShape;
			double wc = oweights[i]*c;
			if (oweights[i] == 0)
				continue;
			ns->material().setDiffuse(wc, wc, wc, 1);
			ns->AddRep(fRep);
			ng[i]->AddChild(ns);
		}
	}

	GrayImage *img[Canvas::NB_STEERABLE_VIEWMAP];
	//#ifdef WIN32
	QGLBasicWidget offscreenBuffer(_pView, "SteerableViewMap", _pView->width(), _pView->height());
	QPixmap pm;
	QImage qimg;
	for (i = 0; i < Canvas::NB_STEERABLE_VIEWMAP; ++i) {
		offscreenBuffer.AddNode(ng[i]);
#if 0
		img[i] = new GrayImage(_pView->width(), _pView->height());
		offscreenBuffer.readPixels(0,0,_pView->width(), _pView->height(), img[i]->getArray());
#endif
		pm = offscreenBuffer.renderPixmap(_pView->width(), _pView->height());

		if (pm.isNull()) {
			if (G.debug & G_DEBUG_FREESTYLE) {
				cout << "BuildViewMap Warning: couldn't render the steerable ViewMap" << endl;
			}
		}
		//pm.save(QString("steerable") + QString::number(i) + QString(".bmp"), "BMP");
		// FIXME!! Lost of time !
		qimg = pm.toImage();
		// FIXME !! again!
		img[i] = new GrayImage(_pView->width(), _pView->height());
		for (unsigned int y = 0; y < img[i]->height(); ++y) {
			for (unsigned int x = 0; x < img[i]->width(); ++x) {
				//img[i]->setPixel(x, y, (float)qGray(qimg.pixel(x, y)) / 255.0f);
				img[i]->setPixel(x, y, (float)qGray(qimg.pixel(x, y)));
				//float c = qGray(qimg.pixel(x, y));
				//img[i]->setPixel(x, y, qGray(qimg.pixel(x, y)));
			}
		}
		offscreenBuffer.DetachNode(ng[i]);
		ng[i]->destroy();
		delete ng[i];
		// check
#if 0
		qimg = QImage(_pView->width(), _pView->height(), 32);
		for (unsigned int y = 0; y < img[i]->height(); ++y) {
			for (unsigned int x = 0; x < img[i]->width(); ++x) {
				float v = img[i]->pixel(x, y);
				qimg.setPixel(x, y, qRgb(v, v, v));
			}
		}
		qimg.save(QString("newsteerable") + QString::number(i) + QString(".bmp"), "BMP");
#endif
	}


	svm->buildImagesPyramids(img, false, 0, 1.0f);
#endif
}
Exemple #6
0
float ReadDirectionalViewMapPixelCF(int iOrientation, int level, unsigned x, unsigned y)
{
	SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap();
	return svm->readSteerableViewMapPixel(iOrientation, level, x, y);
}
Exemple #7
0
float ReadCompleteViewMapPixelCF(int level, unsigned x, unsigned y)
{
	SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap();
	return svm->readCompleteViewMapPixel(level, x, y);
}