int AppendVertex(FvectorVec& _points, MPoint& _pt) { Fvector pt; // convert from internal units to the current ui units MDistance dst_x (_pt.x); MDistance dst_y (_pt.y); MDistance dst_z (_pt.z); pt.set ((float)dst_x.asMeters(),(float)dst_y.asMeters(),-(float)dst_z.asMeters()); for (FvectorIt it=_points.begin(); it!=_points.end(); it++) if (it->similar(pt)) return it-_points.begin(); _points.push_back(pt); return _points.size()-1; }
void bob::ip::base::TanTriggs::performContrastEqualization(blitz::Array<double,2>& dst) { const double inv_alpha = 1./m_alpha; const double wxh = dst.extent(0)*dst.extent(1); // first step: I:=I/mean(abs(I)^a)^(1/a) blitz::Range dst_y( dst.lbound(0), dst.ubound(0)), dst_x( dst.lbound(1), dst.ubound(1)); double norm_fact = pow( sum( pow( fabs(dst(dst_y,dst_x)), m_alpha)) / wxh, inv_alpha); dst(dst_y,dst_x) /= norm_fact; // Second step: I:=I/mean(min(threshold,abs(I))^a)^(1/a) const double threshold_alpha = pow( m_threshold, m_alpha ); norm_fact = pow( sum( min( threshold_alpha, pow( fabs(dst(dst_y,dst_x)), m_alpha))) / wxh, inv_alpha); dst(dst_y,dst_x) /= norm_fact; // Last step: I:= threshold * tanh( I / threshold ) dst(dst_y,dst_x) = m_threshold * tanh( dst(dst_y,dst_x) / m_threshold ); }