cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

Kinect2の録画ソフトを作る(その3)

デプスをきれいにするために、平均を取る

 砂岩でできた20cmぐらいの大きさのレリーフを0.5m離れたところから撮影してみます。

計測対象がこれ。

 

f:id:cvl-robot:20140228183952j:plain

 

1フレームのデプスがこれ。

f:id:cvl-robot:20140228184001j:plain

 

10フレームの平均デプスがこれ。

f:id:cvl-robot:20140228184018j:plain

 

画角がとても広いことが仇になって、このような物体を計測したい場合には空間解像度が足りません。また、デプスの分散の具合は、昔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;

  }