Skip to content

Urmarire Obiecte cu scikit-image — Complete Guide

DodaTech Updated 2025-01-15 2 min read

You will learn how to track objects across multiple frames in biomedical image sequences using scikit-image.

The Problem

Analiza miscarii celulelor sau particulelor in secvente video necesita identificarea acelorasi obiecte de-a lungul cadrelor. Fara trackare corecta, datele de miscare sunt inexacte si inutilizabile.

The Wrong Way

Simpla segmentare frame cu frame fara a lega obiectele intre cadre duce la pierderea identitatii:

from skimage import io, filters, measure
frames = io.ImageCollection('experiment/*.tif')
for i, frame in enumerate(frames):
    binary = frame > filters.threshold_otsu(frame)
    labels = measure.label(binary)
    print(f"Frame {i}: {labels.max()} obiecte")

Ce se intampla: Acelasi obiect primeste un ID diferit in fiecare frame, facand imposibila analiza traiectoriei.

The Right Way

Foloseste trackpy sau implementeaza nearest-neighbor tracking pentru a lega obiectele intre cadre:

import pandas as pd
from skimage import io, filters, measure
from scipy.spatial import distance

frames = io.ImageCollection('experiment/*.tif')
all_objects = []
for i, frame in enumerate(frames):
    binary = frame > filters.threshold_otsu(frame)
    labels = measure.label(binary)
    props = measure.regionprops_table(
        labels, properties=('label', 'centroid', 'area')
    )
    df = pd.DataFrame(props)
    df['frame'] = i
    all_objects.append(df)

tracks = pd.concat(all_objects, ignore_index=True)
# Leaga obiectele prin distanta minima intre cadre consecutive

Rezultat asteptat: Fiecare obiect primeste un ID unic pe toata durata secventei, permitand trasarea traiectoriei.

Step-by-Step Fix

1. Segmentheaza fiecare cadru

def segment_frame(frame):
    binary = frame > filters.threshold_otsu(frame)
    cleaned = morphology.remove_small_objects(binary, min_size=20)
    return measure.label(cleaned)

2. Extrage centroidii

def extract_centroids(labels, frame_id):
    props = measure.regionprops_table(
        labels, properties=('label', 'centroid')
    )
    df = pd.DataFrame(props)
    df['frame'] = frame_id
    df['particle'] = 0  # se va popula la linkuire
    return df

3. Leaga obiectele intre cadre

def link_particles(df, max_distance=50):
    particles = []
    next_id = 1
    for frame_id, group in df.groupby('frame'):
        centroids = group[['centroid-0', 'centroid-1']].values
        if not particles:
            group['particle'] = range(next_id, next_id + len(group))
            next_id += len(group)
        else:
            prev = particles[-1]
            prev_cent = prev[['centroid-0', 'centroid-1']].values
            dist = distance.cdist(centroids, prev_cent)
            # logica de asignare
        particles.append(group)
    return pd.concat(particles)

Prevention Tips

  • Pastreaza parametrii de trackare (max_distance, max_missing) documentati
  • Filtreaza obiectele dupa arie pentru a elimina artefactele inainte de trackare
  • Foloseste interpolare pentru cadrele in care obiectul nu este detectat
  • Verifica vizual traiectoriile rezultate pentru a detecta erori de linkuire
  • Salveaza datele brute si parametrii pentru reproductibilitate

Common Mistakes

  1. Nu leaga obiectele intre cadre -- identitatea se pierde, analiza devine imposibila
  2. Foloseste distanta prea mare -- leaga obiecte diferite in aceeasi traiectorie
  3. Ignora obiecte care dispar temporar -- traiectoriile se fragmenteaza
  4. Nu filtreaza artefactele -- obiecte false genereaza traiectorii inexistente
  5. Parametrii de trackare sunt alesi arbitrar, nu pe baza datelor

Practice Exercise

Trackeaza 10 particule care se misca Brownian intr-o secventa video. Traseaza traiectoriile si calculeaza viteza medie.

FAQ

### Ce este nearest-neighbor tracking?

Leaga obiectele din cadrul curent de cele mai apropiate din cadrul anterior, minimizand distanta totala.

Cum gestionez obiecte care dispar temporar?

Permite un numar maxim de cadre lipsa (max_missing) inainte de a termina traiectoria.

Ce biblioteca recomandati pentru trackare?

trackpy este cea mai populara si ofera implementare robusta a algoritmilor de trackare.

Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with Python Data Science workflows for enhanced productivity and security.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro