triskele/include/Attributes/XYAttributes.tpp
Git Merciol aff93d5467 modifié : include/Appli/Option.hpp
modifié :         include/Attributes/AreaAttributes.hpp
	modifié :         include/Attributes/AreaAttributes.tpp
	modifié :         include/Attributes/AverageAttributes.hpp
	modifié :         include/Attributes/AverageAttributes.tpp
	modifié :         include/Attributes/MoIAttributes.hpp
	modifié :         include/Attributes/MoIAttributes.tpp
	modifié :         include/Attributes/SDAttributes.hpp
	modifié :         include/Attributes/SDAttributes.tpp
	modifié :         include/Attributes/WeightAttributes.hpp
	modifié :         include/Attributes/WeightAttributes.tpp
	modifié :         include/Attributes/XYAttributes.hpp
	modifié :         include/Attributes/XYAttributes.tpp
	modifié :         include/CompAttribute.hpp
	modifié :         include/CompAttribute.tpp
	modifié :         include/triskeleDealThreads.tpp
	modifié :         src/Appli/Option.cpp
	modifié :         src/IImage.cpp
	modifié :         src/apGenerator.cpp
2018-04-20 09:49:46 +02:00

39 lines
1.3 KiB
C++

#ifndef _OTB_TRISKELE_XY_ATTRIBUTES_TPP
#define _OTB_TRISKELE_XY_ATTRIBUTES_TPP
using namespace boost::chrono;
inline
XYAttributes::XYAttributes (const Tree &tree, const AreaAttributes &areaAttributes)
: CompAttribute<AverageXY> (tree) {
compute (areaAttributes);
}
inline
XYAttributes::~XYAttributes () {
}
inline void
XYAttributes::compute (const AreaAttributes &areaAttributes) {
auto start = high_resolution_clock::now ();
DimImg const width = CompAttribute<AverageXY>::tree.getSize ().width;
const DimImg *areas = areaAttributes.getValues ();
computeSameCompLevel ([this, &width, &areas] (const DimImg &parentId) {
AverageXY tmpXY;
tree.forEachChildTI (parentId, [this, &tmpXY, &width, &areas, &parentId] (const bool &isLeaf, const DimImg &childId) {
if (isLeaf) {
tmpXY.x += childId % width;
tmpXY.y += childId / width;
return;
}
tmpXY.x += CompAttribute<AverageXY>::values[childId].x*areas[childId];
tmpXY.y += CompAttribute<AverageXY>::values[childId].y*areas[childId];
});
CompAttribute<AverageXY>::values[parentId].x = tmpXY.x/areas[parentId];
CompAttribute<AverageXY>::values[parentId].y = tmpXY.y/areas[parentId];
});
globalTreeStats.addTime (xyStats, duration_cast<duration<double> > (high_resolution_clock::now ()-start).count ());
}
#endif // _OTB_TRISKELE_XY_ATTRIBUTES_TPP