Source code for sdt.loc.raw_features
# SPDX-FileCopyrightText: 2020 Lukas Schrangl <lukas.schrangl@tuwien.ac.at>
#
# SPDX-License-Identifier: BSD-3-Clause
import numpy as np
from .. import config, helper
[docs]@config.set_columns
def get_raw_features(loc_data, img_data, size, columns={}):
"""Get raw image data surrounding localizations
For each localization, return the raw image data in the proximity
to the feature position.
Parameters
----------
loc_data : pandas.DataFrame
Localization data. Index should be unique.
img_data : list-like of numpy.ndarray
Image sequence
size : int
For each feature, return a square of ``2 * size + 1`` pixels.
Returns
-------
OrderedDict
Image data for features. Uses the localization data indices as keys
(therefore, the index of `loc_data` has to be unique) and square
:py:class:`numpy.ndarrays` of ``2 * size + 1`` pixels as values.
Other parameters
----------------
columns : dict, optional
Override default column names as defined in :py:attr:`config.columns`.
Relevant names are `coords` and `time`.
This means, if your DataFrame has coordinate columns "x" and "z" and
the time column "alt_frame", set ``columns={"coords": ["x", "z"],
"time": "alt_frame"}``.
"""
ret = {}
# Sort by frame; this avoids re-reading images if they are e.g. pims
# image sequences.
for f, arr in helper.split_dataframe(loc_data, columns["time"],
columns["coords"], keep_index=True):
f = int(f)
img = img_data[f]
for a in arr:
i = a[:-len(columns["coords"])]
if len(i) > 1:
i = tuple(i)
else:
i = i[0]
pos = np.round(a[-len(columns["coords"]):].astype(float))
pos = pos.astype(int)
sl = tuple(slice(p - size, p + size + 1) for p in pos[::-1])
ret[i] = img[sl]
return ret