mercoledì 2 aprile 2014

Accuratezza del sensore di distanza di Kinect

Per verificare l'accuratezza del sensore di distanza del Kinect ho provato ad acquisire due immagini di una stessa scena statica e a vedere le differenze

Mappa di profondita' di Kinect

Le due immagini sono state acquisite con lo script visto in questo post

Per calcolare la differenza ho usato il seguente script
------------------------------------------------
import pickle
import numpy as np
import Image

posizione = 0
accumula = 0

f = open("3.txt")
data1 = pickle.load(f)
f.close

f = open("4.txt")
data = pickle.load(f)
f.close
accumula = data - data1

img = Image.new('L', (480,640), "black")
pixels = img.load()

for i in range(img.size[0]):
for j in range(img.size[1]):
pixels[i,j] = accumula[posizione]
posizione = posizione + 1

img2 = img.rotate(270)
img2.save("3-4.png")

print np.histogram(accumula,[-3000,-100,-10,10,100,3000])
------------------------------------------------

Questa e' l'immagine di differenza
E' subito evidente che le maggiori differenze sono ubicate nei punti in cui c'e' la maggior distanza tra due pixel vicini

Mappa delle differenze test 1


La distribuzione di frequenza indica che per il 92.6% la differenza di distanza misurata e' compresa tra -1/+1 cm. Un altro 5.7% delle differenze e' compresa tra -10/+10 cm
Per maggiore dettaglio il 75% delle misure ha differenza 0


Un altro esempio

Mappa delle differenze Test 2

in questo caso il 77% dei punti mostra differenza di 0 mm con il 93% dei punti con differenza inferiore a 1 cm.


Un terzo esempio

Mappa delle differenze Test 3

anche qui il 76% dei punti mostra differenza di 0 mm con il 92.4% dei punti con differenza inferiore a 1 cm.




In buona sostanza il sensore di Kinect lavora molto bene su scene piatte mentre dove ci sono oggetti su piani a distanza differente con bruschi salti di distanza l'errore diventa sensibile