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; }
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; }
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 }
float ReadDirectionalViewMapPixelCF(int iOrientation, int level, unsigned x, unsigned y) { SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap(); return svm->readSteerableViewMapPixel(iOrientation, level, x, y); }
float ReadCompleteViewMapPixelCF(int level, unsigned x, unsigned y) { SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap(); return svm->readCompleteViewMapPixel(level, x, y); }