std::map<size_t,Morphology::SegmentInfo> Morphology::createSegmentMap(SegmentedImageCPtr segmentedImage) const { std::map<size_t,SegmentInfo> segments; for(size_t y=0;y<segmentedImage->Height();++y) { for(size_t x=0;x<segmentedImage->Width();++x) { size_t segmentValue = segmentedImage->Value(x,y); if(segmentValue != 0) { if(segments.count(segmentValue) == 0) { SegmentInfo segment; segment.segment = segmentValue; segment.left = x; segment.right = x+1; segment.top = y; segment.bottom = y+1; segment.AddPoint(x,y); segments.insert(std::map<size_t,SegmentInfo>::value_type(segmentValue, segment)); } else { SegmentInfo &segment = segments.find(segmentValue)->second; segment.AddPoint(x,y); } } } } for(std::map<size_t,SegmentInfo>::iterator i=segments.begin();i!=segments.end();++i) { SegmentInfo &info = i->second; info.width = info.right - info.left; info.height = info.bottom - info.top; } return segments; }