TTK
Loading...
Searching...
No Matches
ttk::TrackingPostProcessing Class Reference

TTK processing package for post-processing tracked trajectories: linearization, fusion (chaining), and merge-tree-based segmentation statistics. More...

#include <TrackingPostProcessing.h>

Inheritance diagram for ttk::TrackingPostProcessing:
ttk::Debug ttk::BaseClass

Classes

struct  LinearTrajectory
 Linear trajectory: x(t) = ax*t + bx, y(t) = ay*t + by, defined on the inclusive frame range [startFrame, endFrame]. More...
struct  FuseRecord
 Fusion-link record: trajectory i ends and trajectory j starts. More...

Public Member Functions

 TrackingPostProcessing ()
int preconditionTriangulation (ttk::AbstractTriangulation *triangulation) const
void setInputScalars (const std::vector< void * > &inputScalars)
void setCosCol (double v)
void setMaxRadius (double v)
void setMaxFrameDist (int v)
void setPersistenceThreshold (double v)
void setMaxSurfSize (int v)
void setUseOtsuSimplification (bool v)
void setOtsuBins (int v)
void setBoundaryXMin (double v)
void setBoundaryXMax (double v)
void setBoundaryYMin (double v)
void setBoundaryYMax (double v)
void setDoLinearize (bool v)
void setDoFusion (bool v)
void setDoLinearizeFuse (bool v)
void setDoMergeTree (bool v)
void setUseSplitTree (int v)
int correctTrajectory (const std::vector< std::vector< int > > &trajTime, const std::vector< std::vector< int > > &trajVertexId, const std::vector< std::vector< double > > &coordsX, const std::vector< std::vector< double > > &coordsY, const std::vector< int > &trajCriticalType, std::vector< LinearTrajectory > &linearTraj, std::vector< LinearTrajectory > &outputTraj, std::vector< FuseRecord > &fuseRecords)
 Linearize + (optional) chain input per-trajectory point clouds.
template<class dataType, class triangulationType>
int computeMergeTree (const triangulationType *triangulation, const std::vector< LinearTrajectory > &finalTraj, std::vector< double > &surfMin, std::vector< double > &surfMax, std::vector< double > &surfMean, std::vector< std::vector< int > > &vertexTrajPerFrame)
 Compute merge-tree-based segmentation per trajectory && per frame.
template<class dataType, class triangulationType>
int execute (const std::vector< std::vector< int > > &trajTime, const std::vector< std::vector< int > > &trajVertexId, const std::vector< std::vector< double > > &coordsX, const std::vector< std::vector< double > > &coordsY, const std::vector< int > &trajCriticalType, std::vector< LinearTrajectory > &linearTraj, std::vector< LinearTrajectory > &finalTraj, std::vector< FuseRecord > &fuseRecords, std::vector< double > &surfMin, std::vector< double > &surfMax, std::vector< double > &surfMean, std::vector< std::vector< int > > &vertexTrajPerFrame, const triangulationType *triangulation)
 correctTrajectory + computeMergeTree.
Public Member Functions inherited from ttk::Debug
 Debug ()
 ~Debug () override
virtual int setDebugLevel (const int &debugLevel)
int setWrapper (const Wrapper *wrapper) override
int printMsg (const std::string &msg, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const
int printMsg (const std::vector< std::string > &msgs, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const
int printErr (const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const
int printWrn (const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const
int printMsg (const std::string &msg, const double &progress, const double &time, const int &threads, const double &memory, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const
int printMsg (const std::string &msg, const double &progress, const double &time, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const
int printMsg (const std::string &msg, const double &progress, const double &time, const int &threads, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const
int printMsg (const std::string &msg, const double &progress, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const
int printMsg (const std::string &msg, const double &progress, const debug::Priority &priority, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const
int printMsg (const std::vector< std::vector< std::string > > &rows, const debug::Priority &priority=debug::Priority::INFO, const bool hasHeader=true, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const
int printMsg (const debug::Separator &separator, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::INFO, std::ostream &stream=std::cout) const
int printMsg (const debug::Separator &separator, const debug::Priority &priority, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const
int printMsg (const std::string &msg, const debug::Separator &separator, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::INFO, std::ostream &stream=std::cout) const
void setDebugMsgPrefix (const std::string &prefix)
Public Member Functions inherited from ttk::BaseClass
 BaseClass ()
virtual ~BaseClass ()=default
int getThreadNumber () const
virtual int setThreadNumber (const int threadNumber)

Protected Member Functions

int computeMeanUnitDirectionLinear (const std::vector< LinearTrajectory > &newTraj, std::vector< std::array< double, 3 > > &meanDir)
int computeSurfaceCellCount (const std::vector< ttk::SimplexId > &surfVertices, const ttk::AbstractTriangulation *triangulation)
template<class dataType>
dataType otsuThresholdLocal (const std::vector< ttk::SimplexId > &verts, const dataType *scalars, const int nbins)
template<class dataType, class triangulationType>
void cleanDarkSegmentInPlace (std::vector< ttk::SimplexId > &segmentVerts, const dataType *scalars, const triangulationType *triangulation, const int otsuBins)
Protected Member Functions inherited from ttk::Debug
int printMsgInternal (const std::string &msg, const std::string &right, const std::string &filler, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const
int printMsgInternal (const std::string &msg, const debug::Priority &priority, const debug::LineMode &lineMode, std::ostream &stream=std::cout) const
int welcomeMsg (std::ostream &stream)

Protected Attributes

std::vector< void * > inputData_ {}
double cosCol_ {0.9}
double maxRadius_ {225.0}
int maxFrameDist_ {30}
int minFrameDist_ {-30}
double persistenceThreshold_ {0.0}
int maxSurfSize_ {10000}
bool useOtsuSimplification_ {false}
int otsuBins_ {0}
double boundaryXMin_ {0.0}
double boundaryXMax_ {0.0}
double boundaryYMin_ {0.0}
double boundaryYMax_ {0.0}
bool doLinearize_ {true}
bool doFusion_ {true}
bool doLinearizeFuse_ {true}
bool doMergeTree_ {false}
int useSplitTree_ {2}
Protected Attributes inherited from ttk::Debug
int debugLevel_
std::string debugMsgPrefix_
std::string debugMsgNamePrefix_
Protected Attributes inherited from ttk::BaseClass
bool lastObject_
int threadNumber_
Wrapperwrapper_

Additional Inherited Members

Static Protected Attributes inherited from ttk::Debug
static COMMON_EXPORTS debug::LineMode lastLineMode = ttk::debug::LineMode::NEW

Detailed Description

TTK processing package for post-processing tracked trajectories: linearization, fusion (chaining), and merge-tree-based segmentation statistics.

Author
Théophane Loloum theop.nosp@m.hane.nosp@m..lolo.nosp@m.um@g.nosp@m.mail..nosp@m.com
Date
April 2026

This module takes the initial trajectories produced by an upstream tracker (TrackingFromFields) and refines them:

  • linearization: fit a 2D line (x(t)=ax*t+bx, y(t)=ay*t+by) through each trajectory point cloud via least squares (Eigen);
  • fusion: greedily chain temporally-adjacent, directionally-consistent linearized segments into longer trajectories;
  • merge-tree segmentation: per-frame, compute a merge tree of the scalar field and associate each trajectory
See also
ttk::TrackingFromFields
ttk::TrackingFromCriticalPoints

Definition at line 52 of file TrackingPostProcessing.h.

Constructor & Destructor Documentation

◆ TrackingPostProcessing()

ttk::TrackingPostProcessing::TrackingPostProcessing ( )

Definition at line 3 of file TrackingPostProcessing.cpp.

Member Function Documentation

◆ cleanDarkSegmentInPlace()

template<class dataType, class triangulationType>
void ttk::TrackingPostProcessing::cleanDarkSegmentInPlace ( std::vector< ttk::SimplexId > & segmentVerts,
const dataType * scalars,
const triangulationType * triangulation,
const int otsuBins )
protected

Definition at line 392 of file TrackingPostProcessing.h.

◆ computeMeanUnitDirectionLinear()

int ttk::TrackingPostProcessing::computeMeanUnitDirectionLinear ( const std::vector< LinearTrajectory > & newTraj,
std::vector< std::array< double, 3 > > & meanDir )
inlineprotected

Definition at line 293 of file TrackingPostProcessing.h.

◆ computeMergeTree()

template<class dataType, class triangulationType>
int ttk::TrackingPostProcessing::computeMergeTree ( const triangulationType * triangulation,
const std::vector< LinearTrajectory > & finalTraj,
std::vector< double > & surfMin,
std::vector< double > & surfMax,
std::vector< double > & surfMean,
std::vector< std::vector< int > > & vertexTrajPerFrame )

Compute merge-tree-based segmentation per trajectory && per frame.

Parameters
[in]triangulationtriangulation of the scalar field
[in,out]finalTrajtrajectories to annotate
[out]surfMinper-trajectory minimum surface
[out]surfMaxper-trajectory maximum surface
[out]surfMeanper-trajectory mean surface
[out]vertexTrajPerFrameper-frame, per-vertex labelling: -1 = no surface, -2 = collision,

Definition at line 465 of file TrackingPostProcessing.h.

◆ computeSurfaceCellCount()

int ttk::TrackingPostProcessing::computeSurfaceCellCount ( const std::vector< ttk::SimplexId > & surfVertices,
const ttk::AbstractTriangulation * triangulation )
inlineprotected

Definition at line 310 of file TrackingPostProcessing.h.

◆ correctTrajectory()

int ttk::TrackingPostProcessing::correctTrajectory ( const std::vector< std::vector< int > > & trajTime,
const std::vector< std::vector< int > > & trajVertexId,
const std::vector< std::vector< double > > & coordsX,
const std::vector< std::vector< double > > & coordsY,
const std::vector< int > & trajCriticalType,
std::vector< LinearTrajectory > & linearTraj,
std::vector< LinearTrajectory > & outputTraj,
std::vector< FuseRecord > & fuseRecords )

Linearize + (optional) chain input per-trajectory point clouds.

Parameters
[in]trajTimeper-trajectory, frame indices (sorted)
[in]trajVertexIdper-trajectory, vertex global ids
[in]coordsXper-trajectory, X coordinates
[in]coordsYper-trajectory, Y coordinates
[out]linearTrajper-input-trajectory linear fits (with finalChainId set when the segment is part of a fused chain in outputTraj, -1 otherwise)
[out]outputTrajfinal trajectory set (fused chains + un-fused survivors)
[out]fuseRecordslist of i -> j fusion links

Definition at line 7 of file TrackingPostProcessing.cpp.

◆ execute()

template<class dataType, class triangulationType>
int ttk::TrackingPostProcessing::execute ( const std::vector< std::vector< int > > & trajTime,
const std::vector< std::vector< int > > & trajVertexId,
const std::vector< std::vector< double > > & coordsX,
const std::vector< std::vector< double > > & coordsY,
const std::vector< int > & trajCriticalType,
std::vector< LinearTrajectory > & linearTraj,
std::vector< LinearTrajectory > & finalTraj,
std::vector< FuseRecord > & fuseRecords,
std::vector< double > & surfMin,
std::vector< double > & surfMax,
std::vector< double > & surfMean,
std::vector< std::vector< int > > & vertexTrajPerFrame,
const triangulationType * triangulation )

correctTrajectory + computeMergeTree.

Definition at line 774 of file TrackingPostProcessing.h.

◆ otsuThresholdLocal()

template<class dataType>
dataType ttk::TrackingPostProcessing::otsuThresholdLocal ( const std::vector< ttk::SimplexId > & verts,
const dataType * scalars,
const int nbins )
protected

Definition at line 328 of file TrackingPostProcessing.h.

◆ preconditionTriangulation()

int ttk::TrackingPostProcessing::preconditionTriangulation ( ttk::AbstractTriangulation * triangulation) const
inline

Definition at line 93 of file TrackingPostProcessing.h.

◆ setBoundaryXMax()

void ttk::TrackingPostProcessing::setBoundaryXMax ( double v)
inline

Definition at line 129 of file TrackingPostProcessing.h.

◆ setBoundaryXMin()

void ttk::TrackingPostProcessing::setBoundaryXMin ( double v)
inline

Definition at line 126 of file TrackingPostProcessing.h.

◆ setBoundaryYMax()

void ttk::TrackingPostProcessing::setBoundaryYMax ( double v)
inline

Definition at line 135 of file TrackingPostProcessing.h.

◆ setBoundaryYMin()

void ttk::TrackingPostProcessing::setBoundaryYMin ( double v)
inline

Definition at line 132 of file TrackingPostProcessing.h.

◆ setCosCol()

void ttk::TrackingPostProcessing::setCosCol ( double v)
inline

Definition at line 102 of file TrackingPostProcessing.h.

◆ setDoFusion()

void ttk::TrackingPostProcessing::setDoFusion ( bool v)
inline

Definition at line 142 of file TrackingPostProcessing.h.

◆ setDoLinearize()

void ttk::TrackingPostProcessing::setDoLinearize ( bool v)
inline

Definition at line 139 of file TrackingPostProcessing.h.

◆ setDoLinearizeFuse()

void ttk::TrackingPostProcessing::setDoLinearizeFuse ( bool v)
inline

Definition at line 145 of file TrackingPostProcessing.h.

◆ setDoMergeTree()

void ttk::TrackingPostProcessing::setDoMergeTree ( bool v)
inline

Definition at line 148 of file TrackingPostProcessing.h.

◆ setInputScalars()

void ttk::TrackingPostProcessing::setInputScalars ( const std::vector< void * > & inputScalars)
inline

Definition at line 99 of file TrackingPostProcessing.h.

◆ setMaxFrameDist()

void ttk::TrackingPostProcessing::setMaxFrameDist ( int v)
inline

Definition at line 108 of file TrackingPostProcessing.h.

◆ setMaxRadius()

void ttk::TrackingPostProcessing::setMaxRadius ( double v)
inline

Definition at line 105 of file TrackingPostProcessing.h.

◆ setMaxSurfSize()

void ttk::TrackingPostProcessing::setMaxSurfSize ( int v)
inline

Definition at line 116 of file TrackingPostProcessing.h.

◆ setOtsuBins()

void ttk::TrackingPostProcessing::setOtsuBins ( int v)
inline

Definition at line 122 of file TrackingPostProcessing.h.

◆ setPersistenceThreshold()

void ttk::TrackingPostProcessing::setPersistenceThreshold ( double v)
inline

Definition at line 113 of file TrackingPostProcessing.h.

◆ setUseOtsuSimplification()

void ttk::TrackingPostProcessing::setUseOtsuSimplification ( bool v)
inline

Definition at line 119 of file TrackingPostProcessing.h.

◆ setUseSplitTree()

void ttk::TrackingPostProcessing::setUseSplitTree ( int v)
inline

Definition at line 151 of file TrackingPostProcessing.h.

Member Data Documentation

◆ boundaryXMax_

double ttk::TrackingPostProcessing::boundaryXMax_ {0.0}
protected

Definition at line 250 of file TrackingPostProcessing.h.

◆ boundaryXMin_

double ttk::TrackingPostProcessing::boundaryXMin_ {0.0}
protected

Definition at line 249 of file TrackingPostProcessing.h.

◆ boundaryYMax_

double ttk::TrackingPostProcessing::boundaryYMax_ {0.0}
protected

Definition at line 252 of file TrackingPostProcessing.h.

◆ boundaryYMin_

double ttk::TrackingPostProcessing::boundaryYMin_ {0.0}
protected

Definition at line 251 of file TrackingPostProcessing.h.

◆ cosCol_

double ttk::TrackingPostProcessing::cosCol_ {0.9}
protected

Definition at line 239 of file TrackingPostProcessing.h.

◆ doFusion_

bool ttk::TrackingPostProcessing::doFusion_ {true}
protected

Definition at line 255 of file TrackingPostProcessing.h.

◆ doLinearize_

bool ttk::TrackingPostProcessing::doLinearize_ {true}
protected

Definition at line 254 of file TrackingPostProcessing.h.

◆ doLinearizeFuse_

bool ttk::TrackingPostProcessing::doLinearizeFuse_ {true}
protected

Definition at line 256 of file TrackingPostProcessing.h.

◆ doMergeTree_

bool ttk::TrackingPostProcessing::doMergeTree_ {false}
protected

Definition at line 257 of file TrackingPostProcessing.h.

◆ inputData_

std::vector<void *> ttk::TrackingPostProcessing::inputData_ {}
protected

Definition at line 237 of file TrackingPostProcessing.h.

◆ maxFrameDist_

int ttk::TrackingPostProcessing::maxFrameDist_ {30}
protected

Definition at line 241 of file TrackingPostProcessing.h.

◆ maxRadius_

double ttk::TrackingPostProcessing::maxRadius_ {225.0}
protected

Definition at line 240 of file TrackingPostProcessing.h.

◆ maxSurfSize_

int ttk::TrackingPostProcessing::maxSurfSize_ {10000}
protected

Definition at line 245 of file TrackingPostProcessing.h.

◆ minFrameDist_

int ttk::TrackingPostProcessing::minFrameDist_ {-30}
protected

Definition at line 242 of file TrackingPostProcessing.h.

◆ otsuBins_

int ttk::TrackingPostProcessing::otsuBins_ {0}
protected

Definition at line 247 of file TrackingPostProcessing.h.

◆ persistenceThreshold_

double ttk::TrackingPostProcessing::persistenceThreshold_ {0.0}
protected

Definition at line 244 of file TrackingPostProcessing.h.

◆ useOtsuSimplification_

bool ttk::TrackingPostProcessing::useOtsuSimplification_ {false}
protected

Definition at line 246 of file TrackingPostProcessing.h.

◆ useSplitTree_

int ttk::TrackingPostProcessing::useSplitTree_ {2}
protected

Definition at line 258 of file TrackingPostProcessing.h.


The documentation for this class was generated from the following files: