ステレオカメラの重箱の隅


ステレオカメラについての記載を増やしてきたから、ステレオカメラの使い方で、重箱の隅をつつくような話をしようと思う。

## うまくいくはずとうまくいくの間

- 従来の代表的なアルゴリズムでは
    - 欠損点を生じる。
    - 輝度の変化が少ない領域の視差が十分に出ない。
    - つながっている物体が視差画像で見たときにちぎれることがある。 


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/5bfaffb1-e81f-055c-6dab-62b612c6f3d1.png)
[引用元](https://www.semanticscholar.org/paper/Disparity-Map-Adjustment%3A-a-Post-Processing-Vieira-Soares/2e8ef99ca05842ea22f762d4fc029aeaaf95b1f4/figure/4)

### ステレオ計算を破綻させやすいハードウェア要因
・動きのある対象をローリングシャッターのカメラで撮影する。
・左右のカメラのゲイン設定が共通していない。
　オートゲインが左右のカメラで別々に動いていると、左右のカメラでゲイン設定が違ってしまうことが起こりうる。
　そうすると、輝度ベースでパターンマッチングをして視差を出しているアルゴリズムでは、視差に大きな誤差をもたらすことがある。
・偽色を発生させるRGBカメラ。
　Bayer配列のカラーフィルターを用いてRGBを撮影しているカメラでは、デモザイク処理で、各画素に対してRGB画像を作っている。
　そのため、輝度値や色が急激に変化している箇所で、偽色を生じる。
　偽色を生じたRGB画像をグレースケール化しても、もともとグレースケールで撮影したものに及ばない。
　ステレオ計測ではサブピクセルの単位で、ステレオ平行化のためのパラメータを決定したり、ステレオ計測時に視差の算出も行う。
　だから、ステレオ計測を主目的にする場合には、グレースケール用のイメージセンサを使うことだ。
・広角のカメラほど、ステレオキャリブレーションが難しくなる。
・温度要因や力学的な理由で、ステレオカメラの配置が変わってしまう。


### ステレオ計測を失敗させやすい被写体要因
これは、ランダムパターンを照明を投射してステレオ計測する機種での説明です。そうでない機種では、計測が困難な状況が拡大します。

```
以下の特徴を持つワークは、計測が困難な場合があります。
・ 透明物体
・ 鏡面物体
・ 高光沢物体
・ 黒色物体
・ 濃色物体
・ 表面形状が複雑な物体
・ 高速な移動物体
・ 1cm 以下の小型物体
・ 柵などの同じ模様が連続している被写体
```
[引用元](https://industry.ricoh.com/-/Media/Ricoh/Sites/industry/support/fa_camera_lens/download/pdf/SV-M-S1_PS_Rev1.03.pdf)

ランダムパターンを照射しない状況で、計測困難になりやすい状況
・テクスチャのない平坦な部分

Q: テーブルに置かれたワイングラスを、３次元計測する必要はあるだろうか？

白ワインの入った透明なワイングラスを手に取る。それは、ヒトの視覚にとって簡単だ。
しかし、ステレオ計測するにも、tof(time of flight)で計測するにも、困難な状況だ。(注３)


#### 撮影環境を制御できるとき
- 照明のあて方を工夫して、輝点となる反射を生じないようにする。
- 国際画像機器展などの展示会の出展業者の中には、マシンビジョンの撮影条件のノウハウを持っている業者もある。


## 算出可能な最小のdepthは何10 cmですか。(注１）
- ステレオカメラでも、算出可能な最小のdepthという制限がある。
- 近距離ほど視差(disparity)が大きくなる。
- ステレオマッチングの際に左画像と右画像の位置ずれ（＝視差）の最大値を想定して、マッチングの位置を算出します。
- そのため、計算時の想定の範囲を超えてまで、視差を算出できなくなります。
- それに対応して、深度(depth)が算出できなくなります。
- ステレオ計算の時間を現実的な範囲に収めるため、大きすぎる視差（近距離すぎる対象物）の距離を算出できないというのは、視差計算に基づく制約です。


## 反射の影響は、偏光板によって低減できる。(注２)

- 通常光は、s偏光とp偏光とが混じっている。
- 透明物体との界面での光の反射率は、s偏光とp偏光で違っている。s偏光の方が反射率が大きい。
- そのため反射光の中にはs偏光の比率が高い。
- s偏光を吸収する向きに偏光板をおくと、反射光の中のs偏光成分がカットされる。
- その結果、偏光板越しの光の中では、反射光が大幅にカットされる。
- 参考URL [偏光の反射](https://www.gen.t-kougei.ac.jp/physics/Virtual-LW/11/01/01.html)

## 深層学習
前に書いたように、ステレオ計測にも深層学習の影響が及んでいる。
ステレオカメラ付属のライブラリの中で、深層学習を用いたアルゴリズムを採用しているのがある。

#### 例: Stereolabs
```
DEPTH TECHNOLOGY: Neural Stereo Depth Sensing 
```

Youtube [ZED SDK Neural Depth Sensing](https://www.youtube.com/watch?v=80C-ciNMPx0)

>StereoLabs　ZED2
DEPTH RANGE　0.3 - 20 m (1 to 65 ft)
[引用元](https://www.stereolabs.com/products/zed-2)

#### 例:NVIDIA
[NVIDIA Docs Hub  NVIDIA Isaac AMR Isaac SDK  Stereo Depth DNN](https://docs.nvidia.com/isaac/archive/2020.1/packages/stereo_depth/doc/sddnn.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/6407c979-9ce3-0a7e-2425-161775261409.png)
[引用元](https://docs.nvidia.com/isaac/archive/2020.1/packages/stereo_depth/doc/sddnn.html)

https://github.com/NVIDIA-AI-IOT/redtail/tree/master/stereoDNN

[ステレオカメラの領域にも深層学習が及んできている](https://qiita.com/nonbiri15/items/72be0f44a7cea2c3b397)

## ステレオ計測に対する解説記事
- [コンピュータビジョン　3次元計測（奥行き計測）](https://vislab.jp/hiura/lec/cv/3d.pdf)
- [チュートリアル資料　物体認識の基礎と研究事例（3D 的認識）](http://isl.sist.chukyo-u.ac.jp/wp-content/uploads/2021/05/ObjectRecognition-byHashimotoLab-3D.pdf)

## 追記：コンパクトな3Dカメラの比較の記事

表には、誤記とかあるかもしれないので、注意してください。
Intel Realsense D405, OAK-D-SR, Zed X Minの３つが比較されています。


[The Evolution of Short-Range Stereo Cameras: A Comparative Analysis](https://medium.com/@muhammadsamiuddinrafayf18/the-evolution-of-short-range-stereo-cameras-a-comparative-analysis-cd8a60265b11)


### 比較実験記事

- [3Dカメラ 8種類を 様々な環境で比較しました 【その① 屋外編】](https://www.tegakari.net/2020/09/3dcamera_compare_1/)
- [3Dカメラ 8種類を 様々な環境で比較しました 【その② 屋内編】](https://www.tegakari.net/2020/09/3dcamera_compare_2/)

- [A Quick Comparison of the Orbbec and RealSense 3D Cameras](https://opencv.org/blog/a-quick-comparison-of-the-orbbec-and-realsense-3d-cameras/)
極端な違いがでてくる条件
- モニタ上に写り込んだ反射
- 外光の影響を受ける領域
- 0.3 mの距離にある並行な白い壁
これらが２つの3Dカメラで撮影されている。

## 追加情報

> 先日、「ロボットは透明な物体やキラキラ物体の認識が苦手」としばらく前の説明をそのまま言っていた人がいたのでこちらとか張っておきます

https://x.com/kmoriyama/status/1829395342217081162
からの引用

<iframe width="560" height="315" src="https://www.youtube.com/embed/J5QaEE4mY3k?si=WCwHnR0iuPFlsrND" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

<iframe width="560" height="315" src="https://www.youtube.com/embed/Y6SO76d8vZo?si=8HuB36IvK7HP3jIN" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

### 注１

###### 算出可能な最小の深度の値を気にしなくていいのは、次のような場合だ。
 - 利用条件が固定してあり、算出可能な最小の深度よりも近くに、物体（人を含む）がないと断言できる場合。
 - 超音波センサによって、物体が近くにあることを検知できる場合
 - ぶつかっても、なんの問題も生じない場合
 
 それ以外の場合には、移動するロボットならばぶつかる心配をする必要があるし、
 ロボットのアームが何かぶつかる心配をしなくちゃいけない。
 
###### ステレオカメラでの至近距離をなんとかする方法
 Depth-Anything を使うこと。
 そうすると、左カメラの視野にはあるが、右カメラの視野に入っていない近距離の画像領域に対して、
 視差を求めてくれる（ただし、スケーリングは未定）。
これを用いることで、ステレオカメラの弱点の一つを解消できる。 
 
 
### 注２
###### 偏光フィルタの入ったステレオカメラが市販されている。
StereoLabsはZED2iのカメラを市販している。
[ZED2iの仕様書](https://cdn.sanity.io/files/s18ewfw4/staging/c059860f8fe49f3856f6b8da770eb13cc543ac2c.pdf/ZED%202i%20Datasheet%20v1.2.pdf)

ここに、ZED2iとして売られている４種類の仕様の違いが書かれている。
２種類の焦点距離、偏光フィルタの有無の２種類の組み合わせで、４通りである。

偏光フィルタを後付けすることはできないので、最初から偏光フィルタありを選ぼう。
![Screenshot from 2024-10-25 11-01-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/72857372-f039-75c5-e0cb-4d457f3311a0.png)

### 注３
###### 透明物体をどう取り扱うか
透明物体は、どの種類の3Dカメラにとっても苦手な対象物だ。
ToFは、光を透過してしまうので、屈折光の到達して戻ってきた場合の距離を返す。
透明物体の表面でのわずかな反射光は無視される。

深層学習以前のアプローチでは：
輝度ベースでの対応点の比較に基づいており、
透明物体を扱えることは、はなから期待していないロジックになっている。

深層学習以降のロジックでは：
学習済みのモデルによっては、半透明の物体などについての状況が改善してきている。
以下のX(=旧twitter)には、そのような例が記載されている。
https://x.com/KWaragai60816/status/1843848221204033733


### 注４
###### grascaleの広角のステレオカメラ

以下の3Dカメラは、grascaleの広角のステレオカメラをも持っている。

解説記事：
[Xvisio DS80](https://qiita.com/nonbiri15/items/5fdb9962bbdc76274d90#xvisio-ds80)

DFOV 150 度
HFOV 130 度
VFOV 74 度
Mono, Global shutter, 80 mm baseline
とある。

[日本の代理店](https://www.mouser.jp/ProductDetail/Xvisio/DS80?qs=T%252BzbugeAwjiHXY1tYb5LFw%3D%3D&srsltid=AfmBOooR4tNxF4NBMnOahlz8pqJLiy0yEaZWEg0e8j7bzrzG2amAt3aR)