bool CGrid_Pattern::On_Execute(void){ m_pInput = Parameters("INPUT")->asGrid(); CSG_Grid *pRelative = Parameters("RELATIVE")->asGrid(); CSG_Grid *pDominance = Parameters("DOMINANCE")->asGrid(); CSG_Grid *pDiversity = Parameters("DIVERSITY")->asGrid(); CSG_Grid *pFragmentation = Parameters("FRAGMENTATION")->asGrid(); CSG_Grid *pNDC = Parameters("NDC")->asGrid(); CSG_Grid *pCVN = Parameters("CVN")->asGrid(); m_iWinSize = Parameters("WINSIZE")->asInt()*2+3; m_iNumClasses = Parameters("MAXNUMCLASS")->asInt(); for(int y=m_iWinSize-2; y<Get_NY()-m_iWinSize+2 && Set_Progress(y); y++){ for(int x=m_iWinSize-2; x<Get_NX()-m_iWinSize+2; x++){ double dDiversity = getDiversity(x,y); int iNumClasses = getNumberOfClasses(x,y); pRelative->Set_Value(x,y,((double)iNumClasses)/((double)m_iNumClasses)*100.0); pDominance->Set_Value(x,y,log((double)iNumClasses)-dDiversity); pDiversity->Set_Value(x,y,dDiversity); pFragmentation->Set_Value(x,y,((double)(iNumClasses-1))/((double)(m_iWinSize*m_iWinSize-1))); pNDC->Set_Value(x,y,iNumClasses); pCVN->Set_Value(x,y,getCVN(x,y)); }// for }// for return true; }//method
template <typename PointInT, typename PointNT, typename PointOutT> void pcl::GFPFHEstimation<PointInT, PointNT, PointOutT>::computeTransitionHistograms (const std::vector< std::vector<int> >& label_histograms, std::vector< std::vector<int> >& transition_histograms) { transition_histograms.resize (label_histograms.size ()); for (size_t i = 0; i < label_histograms.size (); ++i) { transition_histograms[i].resize ((getNumberOfClasses () + 2) * (getNumberOfClasses () + 1) / 2, 0); std::vector< std::vector <int> > transitions (getNumberOfClasses () + 1); for (size_t k = 0; k < transitions.size (); ++k) { transitions[k].resize (getNumberOfClasses () + 1, 0); } for (size_t k = 1; k < label_histograms[i].size (); ++k) { uint32_t first_class = label_histograms[i][k-1]; uint32_t second_class = label_histograms[i][k]; // Order has no influence. if (second_class < first_class) std::swap (first_class, second_class); transitions[first_class][second_class] += 1; } // Build a one-dimension histogram out of it. int flat_index = 0; for (int m = 0; m < static_cast<int> (transitions.size ()); ++m) for (int n = m; n < static_cast<int> (transitions[m].size ()); ++n) { transition_histograms[i][flat_index] = transitions[m][n]; ++flat_index; } assert (flat_index == static_cast<int> (transition_histograms[i].size ())); } }
template <typename PointInT, typename PointNT, typename PointOutT> boost::uint32_t pcl::GFPFHEstimation<PointInT, PointNT, PointOutT>::getDominantLabel (const std::vector<int>& indices) { std::vector<uint32_t> counts (getNumberOfClasses () + 1, 0); for (size_t i = 0; i < indices.size (); ++i) { uint32_t label = labels_->points[indices[i]].label; counts[label] += 1; } std::vector<uint32_t>::const_iterator max_it; max_it = std::max_element (counts.begin (), counts.end ()); if (max_it == counts.end ()) return (emptyLabel ()); return (static_cast<uint32_t> (max_it - counts.begin ())); }