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
示例#2
0
文件: gfpfh.hpp 项目: KaiwenGuo/pcl
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 ()));
    }
}
示例#3
0
文件: gfpfh.hpp 项目: KaiwenGuo/pcl
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 ()));
}