MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / getInstanceSeeds

Function getInstanceSeeds

source/MRVoxels/MRVolumeSegment.cpp:385–411  ·  view source on GitHub ↗

Get instance seeds by eroding the \p maskOrig and segmenting it into separate connected components

Source from the content-addressed store, hash-verified

383
384/// Get instance seeds by eroding the \p maskOrig and segmenting it into separate connected components
385Expected<std::vector<VdbVolume>> getInstanceSeeds( const VdbVolume& maskOrig )
386{
387 MR_TIMER;
388 openvdb::FloatGrid mask( *maskOrig.data );
389 openvdb::tools::foreach( mask.beginValueOn(), [] ( openvdb::FloatGrid::ValueOnIter it )
390 {
391 if ( it.getValue() == 0 )
392 it.setValueOff();
393 } );
394 openvdb::tools::erodeActiveValues( mask.tree(), 5 );
395
396 std::vector<openvdb::FloatGrid::Ptr> seedObjs;
397 openvdb::tools::segmentActiveVoxels( mask, seedObjs );
398
399 std::vector<VdbVolume> res;
400 for ( auto& s : seedObjs )
401 {
402 auto& r = res.emplace_back();
403 auto mnMx = openvdb::tools::minMax( s->tree() );
404 r.min = mnMx.min();
405 r.max = mnMx.max();
406 r.voxelSize = maskOrig.voxelSize;
407 r.data = MakeFloatGrid( std::move( s ) );
408 r.dims = maskOrig.dims;
409 }
410 return res;
411}
412
413/// Dilate \p maskOrig
414VdbVolume dilateMask( const VdbVolume& maskOrig )

Callers 1

Calls 4

MakeFloatGridFunction · 0.85
minMethod · 0.80
maxMethod · 0.80
getValueMethod · 0.45

Tested by

no test coverage detected