29 #define BAATZ_EL( featPtr ) featPtr[ 0 ] 32 #define BAATZ_CO( featPtr ) featPtr[ 1 ] 35 #define BAATZ_SM( featPtr ) featPtr[ 2 ] 38 #define BAATZ_SU( featPtr, band ) featPtr[ 3 + band ] 41 #define BAATZ_SS( featPtr, bandsNmb, band ) featPtr[ 3 + bandsNmb + band ] 44 #define BAATZ_ST( featPtr, bandsNmb, band ) featPtr[ 3 + ( 2 * bandsNmb ) + band ] 47 #define BAATZ_STSTARTPTR( featPtr, bandsNmb ) ( featPtr + 3 + ( 2 * bandsNmb ) ) 58 m_segmentsIds( segmentsIds ),
59 m_allSegsCompactnessOffset( 0 ),
60 m_allSegsCompactnessGain( 1.0 ),
61 m_allSegsSmoothnessOffset( 0 ),
62 m_allSegsSmoothnessGain( 0 ),
84 assert( segment1Ptr );
86 assert( segment2Ptr );
88 assert( mergePreviewSegPtr );
374 assert( segment1Ptr );
376 assert( segment2Ptr );
378 assert( mergePreviewSegPtr );
398 std::numeric_limits< rg::BaatzFeatureType >::max();
400 std::numeric_limits< rg::BaatzFeatureType >::max();
403 std::numeric_limits< rg::BaatzFeatureType >::max();
405 std::numeric_limits< rg::BaatzFeatureType >::max();
408 std::numeric_limits< rg::BaatzFeatureType >::max();
410 std::numeric_limits< rg::BaatzFeatureType >::max();
507 const unsigned int& xStart,
const unsigned int& yStart,
508 const unsigned int& xBound,
const unsigned int& yBound,
511 unsigned int& edgeLength1,
512 unsigned int& edgeLength2 )
533 unsigned int xIdx = 0;
534 const unsigned int lastColIdx = colsNumber - 1;
535 const unsigned int lastLineIdx = linesNumber - 1;
537 for(
unsigned int yIdx = yStart ; yIdx < yBound ; ++yIdx )
539 for( xIdx = xStart; xIdx < xBound ; ++xIdx )
541 if( segsIds[ yIdx ][ xIdx ] == id1 )
544 if( segsIds[ yIdx - 1 ][ xIdx ] == id2 )
550 if( segsIds[ yIdx ][ xIdx - 1 ] == id2 )
555 if( yIdx < lastLineIdx)
556 if( segsIds[ yIdx + 1 ][ xIdx ] == id2 )
561 if( xIdx < lastColIdx )
562 if( segsIds[ yIdx ][ xIdx + 1 ] == id2 )
568 else if( segsIds[ yIdx ][ xIdx ] == id2 )
571 if( segsIds[ yIdx - 1 ][ xIdx ] == id1 )
577 if( segsIds[ yIdx ][ xIdx - 1 ] == id1 )
582 if( yIdx < lastLineIdx)
583 if( segsIds[ yIdx + 1 ][ xIdx ] == id1 )
588 if( xIdx < lastColIdx )
589 if( segsIds[ yIdx ][ xIdx + 1 ] == id1 )
unsigned int m_xStart
Segment left X coordinate box over the label image.
std::vector< rg::BaatzFeatureType > m_bandsWeights
A vector where each bands weight are stored.
unsigned int m_getDissimilarity_touchingEdgeLength2
unsigned int m_getDissimilarity_touchingEdgeLength1
#define BAATZ_STSTARTPTR(featPtr, bandsNmb)
double DissimilarityTypeT
Type for dissimilarity.
rg::BaatzFeatureType * m_update_featuresPtr
rg::BaatzFeatureType m_colorWeight
The weight given to the color component, deafult:0.5, valid range: [0,1].
rg::BaatzFeatureType m_getDissimilarity_hColor
SegmenterRegionGrowingBaatzMerger(const double &colorWeight, const double &compactnessWeight, const std::vector< double > &bandsWeights, const SegmentsIdsMatrixT &segmentsIds)
Default constructor.
float BaatzFeatureType
Baatz Strategy feature type.
rg::BaatzFeatureType m_getDissimilarity_stdDevUnion
rg::BaatzFeatureType m_getDissimilarity_hSmooth
rg::BaatzFeatureType m_allSegsStdDevGain
The gains applied to normalize the standard deviation value.
#define BAATZ_EL(featPtr)
rg::BaatzFeatureType m_compactnessWeight
The weight given to the compactness component, deafult:0.5, valid range: [0,1].
rg::BaatzFeatureType m_getDissimilarity_sumUnion
rg::BaatzFeatureType m_getDissimilarity_meanUnion
unsigned int m_update_band
unsigned int SegmentIdDataType
rg::BaatzFeatureType m_update_smoothnessMax
rg::BaatzFeatureType m_allSegsSmoothnessGain
The gains applied to normalize the smoothness value.
#define BAATZ_SU(featPtr, band)
rg::BaatzFeatureType const * m_update_stdDevPtr
SegmenterRegionGrowingSegment< FeatureDataTypeT > * m_nextActiveSegment
A pointer to the next active segment.
rg::BaatzFeatureType m_getDissimilarity_hForm
SegmenterRegionGrowingSegment< rg::BaatzFeatureType > * m_update_currentActSegPtr
unsigned int getColumnsNumber() const
The number of current matrix columns.
rg::BaatzFeatureType m_allSegsStdDevOffset
The offsets applied to normalize the standard deviation value.
SegmenterSegmentsBlock::SegmentIdDataType m_id
Segment ID.
#define BAATZ_CO(featPtr)
unsigned int m_yStart
Segment upper Y coordinate box over the label image.
DissimilarityTypeT getDissimilarity(SegmenterRegionGrowingSegment< rg::BaatzFeatureType > const *const segment1Ptr, SegmenterRegionGrowingSegment< rg::BaatzFeatureType > const *const segment2Ptr, SegmenterRegionGrowingSegment< rg::BaatzFeatureType > *const mergePreviewSegPtr) const
Returns a dimilarity index between this and the other segment.
rg::BaatzFeatureType m_update_smoothnessMin
rg::BaatzFeatureType m_allSegsCompactnessGain
The gains applied to normalize the compactness value.
static void getTouchingEdgeLength(const SegmentsIdsMatrixT &segsIds, const unsigned int &xStart, const unsigned int &yStart, const unsigned int &xBound, const unsigned int &yBound, const SegmenterSegmentsBlock::SegmentIdDataType &id1, const SegmenterSegmentsBlock::SegmentIdDataType &id2, unsigned int &edgeLength1, unsigned int &edgeLength2)
Returns the count of points from region 1 (with ID1) touching the region 2 (with ID2).
void mergeFeatures(SegmenterRegionGrowingSegment< rg::BaatzFeatureType > *const segment1Ptr, SegmenterRegionGrowingSegment< rg::BaatzFeatureType > const *const segment2Ptr, SegmenterRegionGrowingSegment< rg::BaatzFeatureType > const *const mergePreviewSegPtr) const
Merge specific segment features from both segments into the first segment.
unsigned int m_bandsNumber
The number of features (bands).
#define BAATZ_SM(featPtr)
rg::BaatzFeatureType m_getDissimilarity_squaresSumUnion
rg::BaatzFeatureType m_getDissimilarity_sizeUnionD
rg::BaatzFeatureType m_update_stdDevMin
unsigned int m_getDissimilarity_sumsIdx
FeatureType * m_features
A pionter to a fixed size vector of segment features.
unsigned int getSegmentFeaturesSize() const
Return the required segments features vector size (numer of elements).
Segmenter Baatz merger used in region growing process.
rg::BaatzFeatureType m_getDissimilarity_hCompact
const SegmentsIdsMatrixT & m_segmentsIds
A reference to an external valid structure where each all segments IDs are stored.
#define BAATZ_ST(featPtr, bandsNmb, band)
unsigned int m_xBound
Segment lower bound X coordinate box over the label image.
unsigned int m_yBound
Segment lower bound Y coordinate box over the label image.
unsigned int m_size
Segment area (pixels number).
void update(SegmenterRegionGrowingSegment< rg::BaatzFeatureType > *const actSegsListHeadPtr)
Update the internal state.
rg::BaatzFeatureType m_update_stdDevMax
~SegmenterRegionGrowingBaatzMerger()
rg::BaatzFeatureType m_allSegsCompactnessOffset
The offsets applied to normalize the compactness value.
#define TERP_DEBUG_TRUE_OR_THROW(value, message)
Checks if value is true and throws an exception if not.
rg::BaatzFeatureType m_update_compactnessMin
rg::BaatzFeatureType m_allSegsSmoothnessOffset
The offsets applied to normalize the smoothness value.
#define BAATZ_SS(featPtr, bandsNmb, band)
rg::BaatzFeatureType m_getDissimilarity_sizeSeg1D
rg::BaatzFeatureType m_update_compactnessMax
unsigned int getLinesNumber() const
The number of current matrix lines.
rg::BaatzFeatureType m_getDissimilarity_sizeSeg2D