Prerequisite for funkelab/motile_tracker#107, funkelab/motile_tracker#95, funkelab/motile_tracker#55
We need a Feature class to hold metadata about an individual features, and a FeatureSet class for holding the set of features available on the graph.
We then need an Annotator class to add features to the graph and potentially recompute them when nodes/edges change.
We also need to implement the existing features via:
- a RegionpropsAnnotator (area, other stuff)
- an IOUAnnotator
- a LineageAnnotator (for track id and potentially lineage ids)
- App controlled features include Time and Position, they don't get an annotator.
At graph construction, we get the required features and add them to the graph, and then get the user chosen features, compute them with Annotators, add to candidate graph.
UI components include the Annotators widget - A way for the user to select the features they want (axes/position is always selected/not in list)
At graph update - for each feature that needs to be recomputed, tell the appropriate Annotator to recompute the feature.
- e.g. for deleting an edge - track ID and lineage ID are updated, but none of the regionprops features
- for updating a segmentation - all regionprops node attrs need updated. Edge attrs like IOU also need updated.
- moving a node in the points layer (if no segmentation) - positions need to be updated. Also, edge attrs like distance would need to be updated
Import will soon be a non-persistent widget (aka a dialog). During import, the user can select the features they want to pre-compute in a widget. This widget will go away after import starts. However, we can have a features tab where they can change their selection with another copy of this widget.
Prerequisite for funkelab/motile_tracker#107, funkelab/motile_tracker#95, funkelab/motile_tracker#55
We need a Feature class to hold metadata about an individual features, and a FeatureSet class for holding the set of features available on the graph.
We then need an Annotator class to add features to the graph and potentially recompute them when nodes/edges change.
We also need to implement the existing features via:
At graph construction, we get the required features and add them to the graph, and then get the user chosen features, compute them with Annotators, add to candidate graph.
UI components include the Annotators widget - A way for the user to select the features they want (axes/position is always selected/not in list)
At graph update - for each feature that needs to be recomputed, tell the appropriate Annotator to recompute the feature.
- e.g. for deleting an edge - track ID and lineage ID are updated, but none of the regionprops features
- for updating a segmentation - all regionprops node attrs need updated. Edge attrs like IOU also need updated.
- moving a node in the points layer (if no segmentation) - positions need to be updated. Also, edge attrs like distance would need to be updated
Import will soon be a non-persistent widget (aka a dialog). During import, the user can select the features they want to pre-compute in a widget. This widget will go away after import starts. However, we can have a features tab where they can change their selection with another copy of this widget.