Using features during trackingο
Note
The following applies to versions of btrack>=0.5.
By default, btrack
uses a btrack.models.MotionModel
to make predictions about the future position of an object. Further, if specified, object labels defined in btrack.btypes.PyTrackObject
can be used to predict future states. Together, these predictions can be used to link objects in time to produce the final tracks.
However, it is also possible to utilise other features, such as those derived from image data or segmentations during the Bayesian update step.
Warning
The tracking update makes no assumption about the features being normalised. You should take this into account when designing features to be used for tracking, either by normalising them before tracking, or by using features that fall in a defined range.
Adding features to objectsο
In order to do this, one must specify the image features as properties
of an btrack.btypes.PyTrackObject
, either using built-in functions or your own code. Examples of these are given below.
Using built-in functionsο
The built-in function btrack.utils.segmentation_to_objects()
uses regionprops
from scikit-image
to calculate image features. These can be specified as follows:
# features to be calculated from image data
FEATURES = [
"area",
"major_axis_length",
"minor_axis_length",
"orientation",
"solidity",
]
objects = btrack.utils.segmentation_to_objects(
segmentation,
properties=tuple(FEATURES),
)
Adding your own features to an objectο
You can also add your own features to an object, which can be utilised for analysis.
features_to_add = {"my_feature": 0.1}
obj = objects[0]
obj.properties = features_to_add
Inspecting an objectο
One can inspect an object to show the features associated with it.
obj
will return a table (assuming use of a Jupyter Notebook):
ID |
x |
y |
z |
t |
dummy |
states |
label |
area |
major_axis_length |
minor_axis_length |
orientation |
solidity |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 |
517.573657 |
9.07279 |
0 |
0 |
False |
7 |
5 |
577 |
33.260603 |
22.856213 |
1.455708 |
0.968121 |
Specifying features to use during trackingο
When running the tracking step, all that is required is to pass the list of features that you want to use to the tracker:
# features to be used for tracking updates
FEATURES = [
"area",
"major_axis_length",
"minor_axis_length",
"orientation",
"solidity",
]
TRACKING_UPDATES = [
"motion",
"visual",
]
# initialise a tracker session using a context manager
with btrack.BayesianTracker() as tracker:
# configure the tracker using a config file
tracker.configure('/path/to/your/models/cell_config.json')
# set up the features to use as a list
tracker.features = FEATURES
# append the objects to be tracked
tracker.append(objects)
# tell the tracker to use certain information while
# performing tracking
tracker.track(tracking_updates=TRACKING_UPDATES)
...
You must specify which information to use when performing the tracking:
motion
- this uses the motion predictions to link objects in timevisual
- this uses the features supplied to link objects in time
At least one of these options must be used. The default is only motion
. However, you can chose to use visual
only, or a combination of both.
Warning
You must pass the list of features before using the btrack.BayesianTracker.append()
function to add the objects.