Kinect2の録画ソフトを作る(その3)
デプスをきれいにするために、平均を取る
砂岩でできた20cmぐらいの大きさのレリーフを0.5m離れたところから撮影してみます。
計測対象がこれ。
1フレームのデプスがこれ。
10フレームの平均デプスがこれ。
画角がとても広いことが仇になって、このような物体を計測したい場合には空間解像度が足りません。また、デプスの分散の具合は、昔Canestaが買収される前のCanestaセンサーとよく似ています。
平均の計算と標準偏差の計算をして、エッジ部分などの大きく外れたデータをはじくダミーコード
for(int i=0; i<height*height; i++){
// 平均
double sum = 0;
for(int j=0; j<num; j++){
sum += ring_buffer[j][i];
}
ave_buffer[i] = sum/num;
// 分散・標準偏差
double ssum = 0;
for(int j=0; j<num; j++){
ssum += pow(ring_buffer[j][i]-ave_buffer[i], 2);
}
double var = ssum / num;
double sd = sqrt(var);
// 検定
int n=0;
sum = 0;
for(int j=0; j<num; j++){
if(fabs((ring_buffer[j][i]-ave_buffer[i])/(sd/sqrt(num))) <= 1.96){
sum += ring_buffer[j][i];
n++;
}
if(n!=0) ave_buffer[i] = sum/n;
else ave_buffer[i] = 0;
}