This homework has 2 parts: one is segmenting and tracking the bat database using alpha beta filter and bipartite matchign and one is tracking cell database with similar techniques. This assignement give a deep glance into tracking with practical circumstances.
Method and Implementation
tracking, bipartite matching, and filter:
Used greedy method with implementation of a graph and node class. The vertices are stored in adjacency list and graph in an array. The implementation of graph is from geeksforgeeks. However, we find that implementating the greedy method effects too much for the result so we used another algorithm call Hungarian method.
For the alpha-beta filter since it is a prediction algorithm for location, we use it to first predict location of certain object and use it optimize frame per frame object detection, which we could know whether the constant alpha-beta is correct. And use the constant to draw lines across the movement of objects.
Part2: cell segmentation:
There are two parts for this implementation: segmenting and tracking. First we identify cell location in each frame by eliminating noise finding contours through canny edge detection and eliminating small area contour as noise. Then we identify centers and dimensions of the cell and compare cell location between two frames where each cell was assgined a name and the cell that is most closed to that location in the next frame was assigned the same name. New name was added when new cells are detected. However, since the noise is still prominent between frames, the algorithm has difficulty identifying the same cell between two frames. Also, the program seem to identify multiply cell in the same location thus confused the labeling algorithm.
Part1:Multiple Object Tracking
1. beta alpha filter:
We defined KalmanFilter class with init, predict, correct function
2. bipartite matching:
AdjNode and Graph class, then the main method that implements the bipartite matching
3. tracking results:
We defined Track class with init which was implemented in Tracker class which contain init and update
Part2: cell segmentation:
thresh_callback(val, img, diffimg)
opencv2 method: cvtColor, Canny, findContours, approxPolyDP, boundingRect, minEnclosingCircle, contourArea, imshow
other method from library: deepcopy,randint, and other files for reading and writing images
Describe your experiments, including the number of tests that you performed, and the relevant parameter values.
Define your evaluation metrics, e.g., detection rates, accuracy, running time.
List your experimental results. Provide examples of input images and output images. If relevant, you may provide images showing any intermediate steps. If your work involves videos, do not submit the videos but only links to them.
part2: cell (without labeling)
part2: cell (with labeling and tracking)
Discuss your method and results:
- What are the strengths and weaknesses of your method: the time efficiency of the algorithm is impressive. However, sometimes the alpha beta constant is predicted wrong so the path drawn is not correct. Another version of the implementation is significantly slower but more accurate.
- Do your results show that your method is generally successful or
are there limitations? Describe what you expected to find in your
experiments, and how that differed or was confirmed by your
Our result shows that are still limitation on alpha-beta prediction to make correct/accurate/ close enough prediction, but the Hungarian algoithm for data assosiation is efficient in time and accurate. For the second part, because of brightness and contrast, algorithm seem to fail at a significant rate.
- Potential future work. How could your method be improved? What would you try (if you had more time) to overcome the failures/limitations of your work? Yes, if we had more time we would try to find a better segmentation and tracking algoithm for cell tracking.
From experiementing with labeling cells under images that are uneasy to segment, it is extremely difficult to label and compare movement between frame to frame except using motion history to both identify the origin of the cell and the cell's movement. Also, only contouring the cell and label based on bad filtered contour will either cause multiply identification of the same cell or mislabeling. Also, the algorithm I used has trouble identifying new cell that is adding to the group apart from old cell. This occurance can be shown the cluster of labels on the top right corner of the picture where thare are many noises and thus result in excessive identification of cell.
Credits and Bibliography
Credit any joint work or discussions with your classmates.