diff --git a/Code/Learning/otbListSampleGenerator.txx b/Code/Learning/otbListSampleGenerator.txx index 7373236e2649d16a36b51b8859ac968f2bd16f6a..b4875c5cacbe961f02ad0cb455c7a992d6f1687b 100644 --- a/Code/Learning/otbListSampleGenerator.txx +++ b/Code/Learning/otbListSampleGenerator.txx @@ -235,8 +235,8 @@ ListSampleGenerator<TImage, TVectorData> m_ClassesSize.clear(); //Compute pixel area: - typename ImageType::Pointer image = const_cast<ImageType*>(this->GetInput()); - double pixelArea = vcl_abs(image->GetSpacing()[0] * image->GetSpacing()[1]); + typename ImageType::Pointer image = const_cast<ImageType*> (this->GetInput()); + double pixelArea = vcl_abs(image->GetSpacing()[0] * image->GetSpacing()[1]); typename VectorDataType::ConstPointer vectorData = this->GetInputVectorData(); TreeIteratorType itVector(vectorData->GetDataTree()); @@ -245,26 +245,34 @@ ListSampleGenerator<TImage, TVectorData> { if (itVector.Get()->IsPolygonFeature()) { - m_ClassesSize[itVector.Get()->GetFieldAsInt(m_ClassKey)] += - itVector.Get()->GetPolygonExteriorRing()->GetArea() / pixelArea; // in pixel + m_ClassesSize[itVector.Get()->GetFieldAsInt(m_ClassKey)] += itVector.Get()->GetPolygonExteriorRing()->GetArea() + / pixelArea; // in pixel } ++itVector; } - std::map<ClassLabelType, double>::const_iterator itmap = m_ClassesSize.begin(); - double minSize = itmap->second; - ++itmap; - while (itmap != m_ClassesSize.end()) + if (!m_ClassesSize.empty()) { - if (minSize > itmap->second) + std::map<ClassLabelType, double>::const_iterator itmap = m_ClassesSize.begin(); + double minSize = itmap->second; + ++itmap; + while (itmap != m_ClassesSize.end()) { - minSize = itmap->second; + if (minSize > itmap->second) + { + minSize = itmap->second; + } + ++itmap; } - ++itmap; - } - m_ClassMinSize = minSize; - m_NumberOfClasses = m_ClassesSize.size(); + m_ClassMinSize = minSize; + m_NumberOfClasses = m_ClassesSize.size(); + } + else + { + m_ClassMinSize = 0; + m_NumberOfClasses = 0; + } } template <class TImage, class TVectorData>