Abbiamo accennato in questo post come sia possibile eseguire un filtro sui dati grezzi provenienti dal Kinect per “smussare” e correggere le fluttuazioni.
In questo post vorrei cercare di capire (per primo io) quale è il significato dei vari parametri utilizzabili.
Riprendiamo il discorso dall’inizializzazione della classi Runtime e l’impostazione dei parametri di smoothing:
- Try
- _Nui = New Runtime
- _Nui.Initialize(RuntimeOptions.UseSkeletalTracking)
- AddHandler _Nui.SkeletonFrameReady, AddressOf SkeletonFrameReadyHandler
- _Nui.SkeletonEngine.TransformSmooth = True
- Dim parameters = New TransformSmoothParameters() With {.Smoothing = 1.0F,
- .Correction = 0.1F,
- .Prediction = 0.1F,
- .JitterRadius = 0.05F,
- .MaxDeviationRadius = 0.05F}
- _Nui.SkeletonEngine.SmoothParameters = parameters
- Catch ex As Exception
- End Try
La classe TransformSmoothParameters, come possiamo vedere, ha 5 proprietà che dovrebbero consentire il filtraggio delle imprecisioni e dei rumori che i sensori del Kinect introducono nei dati grezzi.
Smooting : lo smoothing (il termine italiano più vicino è “pulizia”), in elaborazione delle immagini, consiste nell’applicare una funzione di filtro il cui scopo è quello di mettere in evidenza la parte del segnale “buona” cercando di sopprimere l’eventuale rumore dovuto da cause di diversa natura che, comunque, sporcano il segnale stesso. Nel nostro caso, piccoli movimenti del corpo umano, possono determinare del rumore che rende la tracciatura dello stesso poco affidabile. La proprietà Smoothing (che accetta il range [0,1]) permette di impostare la quantità di smoothing da applicare. Il valore 0 indica che non viene applicato alcun smoothing mentre l’effetto smoothing aumenta all’avvicinarsi al valore 1. Aumentare il valore di questa proprietà aumenta la latenza del segnale.
Correction : la proprietà permette di impostare la correzione
Prediction : permette di impostare il numero di frame predetti dal motore.
Jitter Radius : il jitter è la variazione di una o più grandezze caratteristiche di un segnale che possono minare l’integrità del segnale stesso. La proprietà JitterRadius consente di impostare il raggio di riduzione del jitter (espresso in metri). Qualsiasi jitter che superi il raggio impostato viene normalizzato al raggio stesso.
Maximum Deviation Radius : permette di specificare il massimo scostamento (in metri) dei dati filtrati rispetto ai dati grezzi. I valori filtrati che superano la distanza impostata rispetto ai dati grezzi, vengono normalizzati a questa distanza (rispetto al valore filtrato).
Non esistono dei valori “buoni” per qualsiasi applicazione ma è necessario procedere sperimentando i migliori valori di smoothing. L’apporto di tali correzioni dipende dall’ambiente circostante e, quindi, anche a parità di applicazione possono variare in base a dove il Kinect è posizionato.
Per chi fosse interessato ad approfondire, è necessario sapere che il filtro attualmente utilizzato nell’SDK del Kinect si basa sul metodo a doppio esponenziale di Holt (link).
Commenti