Moving Target Indicator
The goal of this algorithm is to detect moving targets from a moving platform. We repurpose the Reed-Xiaoli (RX) anomaly detection algorithm to identify moving objects within a stack of frames. It works as follows:
- Given N number of frames & GPS/IMU data we register each frame to the middle frame.
a. TODO: Currently the implementation uses feature based registration
b. To register frames using GPS/IMU data we register frame X to Y using the Direction Cosine Matrices by going from Frame X -> Frame X Local Level -> ECEF-> Frame Y Local Level -> Frame Y. - Process the stack of registered image frames using the RX algorithm.
a. See here for original RX implementation and my paper here for a short description of how the RX algorithm works
b. The algorithm can be found under ARX.py as the function arx. - We identify moving objects as anomalies found by the response of the RX algorithm. This is done by:
a. Compute the cumulative probability distribution of RX score values
b. Set the confidence coefficient value to 0.995
c. Select the first RX score with cumulative probability distribution value greater than the confidence coefficient as the threshold. - Find the optical between the stack of registered image frames using GPS/IMU data
a. TODO: Currently calculated using Lucas Kanade or Farneback algorithm - Threshold RX response further using magnitude of optical flow vectors
- Find bounding boxes around remaining points using connected components
- Run NMS to remove overlapping boxes
- TODO: Apply image tracker to continue identifying objects that may have stopped moving or reduced speed significantly.
There are small details omitted from the explanation for brevity; however, all of this is done under the function mtiChain in mti_end2end.py