Fly Tracker

1. Labkit for Pixel Classification

2. Python for Fly Detection

3. Kalman Filter for Fly Tracking

Labkit for Pixel Classification

1. Image > Hyperstack > Stack to Hyperstack

2. Label Foreground (Fly) and Background by choosing Draw (D) button and painting on a few pixels

Labkit for Pixel Classification

3. Segmentation > Train Classifier

4. Label a few more pixels if you are not satisfied with the result

Labkit for Pixel Classification

5. Save Segmentation Result

This takes some time !

Clone Repository

git clone https://github.com/MLbyML/fly-tracker.git
cd fly-tracker
git checkout 01_DetectFlies
conda env create -f flytrackerEnv.yml
conda activate flytrackerEnv2
python3 -m ipykernel install --user --name flytrackerEnv2 --display-name "flytrackerEnv2"
jupyter notebook

Now you can run the notebook !!

Python Script for Fly Detection

### Use Erosion to hide small incorrect 
#foreground pixels
from skimage.morphology import erosion
from skimage.morphology import square, cube
erodedIm=erosion(im, cube(3))
print("Shape", erodedIm.shape)

plt.figure(figsize=(16, 8))
plt.subplot(1,2,1)
plt.imshow(im[50])
plt.title('Original')
plt.subplot(1,2,2)
plt.imshow(erodedIm[50, ...])
plt.title('Eroded')

Erosion

Some technical details. Not so important!

Python Script for Fly Detection

Connected Components

fly_labels = np.empty_like(erodedIm)
for i in range(fly_labels.shape[0]):
    fly_labels[i, ...]=
    measure.label(erodedIm[i, ...], background=0)

Python Script for Fly Detection

Hungarian Asssignment

row_col_dict_list=[]
for t in range(0, fly_labels.shape[0]-1): # time axis
    cost=np.zeros((len(np.unique(fly_labels[t]))-1, len(np.unique(fly_labels[t+1]))-1))
    for j in range(cost.shape[0]):
        for k in range(cost.shape[1]):
            cost[j, k]=(comyt[t][j]-comyt[t+1][k])**2 + (comxt[t][j]-comxt[t+1][k])**2
    row_ind, col_ind = linear_sum_assignment(cost) 
    objects=dict(zip(row_ind, col_ind))
    row_col_dict_list.append(objects)