Vec2f VertexOrientation2DF0D::operator()(Interface0DIterator& iter) { Vec2f A,C; Vec2f B(iter->getProjectedX(), iter->getProjectedY()); if(iter.isBegin()) A = Vec2f(iter->getProjectedX(), iter->getProjectedY()); else { Interface0DIterator previous = iter; --previous ; A = Vec2f(previous->getProjectedX(), previous->getProjectedY()); } Interface0DIterator next = iter; ++next ; if(next.isEnd()) C = Vec2f(iter->getProjectedX(), iter->getProjectedY()); else C = Vec2f(next->getProjectedX(), next->getProjectedY()); Vec2f AB(B-A); if(AB.norm() != 0) AB.normalize(); Vec2f BC(C-B); if(BC.norm() != 0) BC.normalize(); Vec2f res (AB + BC); if(res.norm() != 0) res.normalize(); return res; }
int Curvature2DAngleF0D::operator()(Interface0DIterator& iter) { Interface0DIterator tmp1 = iter, tmp2 = iter; ++tmp2; unsigned count = 1; while ((!tmp1.isBegin()) && (count < 3)) { --tmp1; ++count; } while ((!tmp2.isEnd()) && (count < 3)) { ++tmp2; ++count; } if (count < 3) { // if we only have 2 vertices result = 0; return 0; } Interface0DIterator v = iter; if (iter.isBegin()) ++v; Interface0DIterator next = v; ++next; if (next.isEnd()) { next = v; --v; } Interface0DIterator prev = v; --prev; Vec2r A(prev->getProjectedX(), prev->getProjectedY()); Vec2r B(v->getProjectedX(), v->getProjectedY()); Vec2r C(next->getProjectedX(), next->getProjectedY()); Vec2r AB(B - A); Vec2r BC(C - B); Vec2r N1(-AB[1], AB[0]); if (N1.norm() != 0) N1.normalize(); Vec2r N2(-BC[1], BC[0]); if (N2.norm() != 0) N2.normalize(); if ((N1.norm() == 0) && (N2.norm() == 0)) { Exception::raiseException(); result = 0; return -1; } double cosin = N1 * N2; if (cosin > 1) cosin = 1; if (cosin < -1) cosin = -1; result = acos(cosin); return 0; }
double LocalAverageDepthF0D::operator()(Interface0DIterator& iter) { Canvas * iViewer = Canvas::getInstance(); int bound = _filter.getBound(); if( (iter->getProjectedX()-bound < 0) || (iter->getProjectedX()+bound>iViewer->width()) || (iter->getProjectedY()-bound < 0) || (iter->getProjectedY()+bound>iViewer->height())) return 0.0; GrayImage image ; iViewer->readDepthPixels((int)iter->getProjectedX()-bound,(int)iter->getProjectedY()-bound,_filter.maskSize(),_filter.maskSize(),image); return _filter.getSmoothedPixel(&image, (int)iter->getProjectedX(), (int)iter->getProjectedY()); }
double DensityF0D::operator()(Interface0DIterator& iter) { Canvas* canvas = Canvas::getInstance(); int bound = _filter.getBound(); if( (iter->getProjectedX()-bound < 0) || (iter->getProjectedX()+bound>canvas->width()) || (iter->getProjectedY()-bound < 0) || (iter->getProjectedY()+bound>canvas->height())) return 0.0; RGBImage image; canvas->readColorPixels((int)iter->getProjectedX() - bound, (int)iter->getProjectedY() - bound, _filter.maskSize(), _filter.maskSize(), image); return _filter.getSmoothedPixel<RGBImage>(&image, (int)iter->getProjectedX(), (int)iter->getProjectedY()); }
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; }
float ReadCompleteViewMapPixelF0D::operator()(Interface0DIterator& iter) { SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap(); float v = svm->readCompleteViewMapPixel(_level,(int)iter->getProjectedX(), (int)iter->getProjectedY()); return v; }
float ReadMapPixelF0D::operator()(Interface0DIterator& iter) { Canvas * canvas = Canvas::getInstance(); return canvas->readMapPixel(_mapName, _level, (int)iter->getProjectedX(), (int)iter->getProjectedY()); }