update filter, flow ema 0.5 + med 3
This commit is contained in:
+21
-4
@@ -94,13 +94,30 @@ class Tracker:
|
||||
return mask.astype(bool)
|
||||
|
||||
def apply_valid_mask(self, flow, valid_mask, erode_iters=1):
|
||||
"""Zero flow outside the valid UV domain."""
|
||||
"""Zero flow outside the valid UV domain (in place when safe).
|
||||
|
||||
Multiplying by a 0/1 mask is a single streaming pass, whereas
|
||||
``flow.copy()`` followed by a boolean fancy-index assignment costs a
|
||||
full copy plus a gather/scatter over the masked-out pixels.
|
||||
|
||||
Note: a masked-out *negative* component becomes ``-0.0`` rather than
|
||||
``+0.0``. The two compare, sum and magnitude identically; only the raw
|
||||
bit pattern of those zeros differs from the previous implementation.
|
||||
"""
|
||||
if flow is None or valid_mask is None:
|
||||
return flow
|
||||
mask = self._prepare_valid_mask(valid_mask, flow.shape[:2], erode_iters=erode_iters)
|
||||
flow_out = flow.copy()
|
||||
flow_out[~mask] = 0
|
||||
return flow_out
|
||||
if not getattr(self, "_Tracker__adaptive", False):
|
||||
# The non-adaptive path hands back the DIS state buffer, which feeds
|
||||
# the next frame as its initial guess; never mutate it.
|
||||
flow_out = flow.copy()
|
||||
flow_out[~mask] = 0
|
||||
return flow_out
|
||||
if not flow.flags.writeable:
|
||||
flow = flow.copy()
|
||||
mask_f = mask.astype(np.float32, copy=False)[:, :, None]
|
||||
np.multiply(flow, mask_f, out=flow)
|
||||
return flow
|
||||
|
||||
def track(self, frame, valid_mask=None):
|
||||
"""Main tracking function that dispatches to CUDA or CPU implementation"""
|
||||
|
||||
Reference in New Issue
Block a user