def stabilize(td):
"""Compensate for motion of the ATIS sensor during recording of the Neuromorphic datasets
Applies to the N-MNIST and N-Caltech101 datasets.
The image motion is originally induced by egorotation of the ATIS sensor
td: eventvision.Events
"""
assert isinstance(td, ev.Events)
def correct_saccade1(data):
data.x -= np.rint(3.5 * data.ts / 105e3).astype(np.uint16)
data.y -= np.rint(7 * data.ts / 105e3).astype(np.uint16)
return data
def correct_saccade2(data):
data.x -= np.rint(3.5 + 3.5 * (data.ts - 105e3) / 105e3).astype(np.uint16)
data.y -= np.rint(7 - 7 * (data.ts - 105e3) / 105e3).astype(np.uint16)
return data
def correct_saccade3(data):
data.x -= np.rint(7 - 7 * (data.ts - 210e3) / 105e3).astype(np.uint16)
return data
copy = np.piecewise(td.data,\
[td.data.ts <= 105e3, (td.data.ts > 105e3) & (td.data.ts <= 210e3), (td.data.ts > 210e3)],\
[correct_saccade1, correct_saccade2, correct_saccade3]).view(np.recarray)
# after saccades, we might end up with invalid x and y values, have to
# correct these
x_vals = copy.x
y_vals = copy.y
copy.x = np.piecewise(x_vals,\
[x_vals >= 65000, (x_vals < 65000) & (x_vals >= td.width), x_vals < td.width],\
[0, td.width - 1, lambda x: x])
copy.y = np.piecewise(y_vals,\
[y_vals >= 65000, (y_vals < 65000) & (y_vals >= td.height), y_vals < td.height],\
[0, td.height - 1, lambda y: y])
return copy
评论列表
文章目录