マルチカメラモジュールについて調査中

システムによっては、複数台のカメラを接続する必要がある。
そのために、次の条件が必要になる

- 複数台のカメラを接続できる電気的なインタフェースを持つこと
- その複数台の電気的なインタフェースから信号を読み取れること
- そのOSでカメラドライバが認識されること
- 実際に画像が取得できること

通常は、こういった部分をすでに用意されている環境でカメラを使っているので、自分でカメラシステムを構築しない限り考えなくてすむ。

### 複数台のカメラシステムを組むときに考えなくてはならなくなること
- それらのカメラは、常時カメラ画像を取得しなければならないものであるかどうか。
- カメラの画像の画像サイズ・フレームレートはいくらであるのか。
- カメラでの転送データはどのようなデータ形式なのか。
- 複数台のカメラは同期している必要があるのかどうか。
- 遅延はどのようであるのか
- タイムスタンプは入っているのかどうか。
- リアルタイム性はどの程度必要か。
    - リアルタイム性を必要としないほどシステムは構築しやすい。
- 複数カメラの画像を独立に処理できるか。
    - 複数カメラの画像を独立に処理できるときは、システムの構築が楽になる。
    - 例： 

##### 起こりがちな問題点
- 画像サイズとデータ定式・フレームレートの組み合わせでは、そのインタフェースで規定されている転送レートを超えてしまう。
    - 対策例：YUV422などのデータ形式を用いる。
    - 対策例：jpegなどの圧縮済みデータを転送する。(エンコード・デコード処理が加わることで、レイテンシが増える。)
- jpeg画像への圧縮にすると、エンコード・デコードの時間だけ遅くなってしまう。
    - 他にも、圧縮ノイズが画像認識・画像処理の際に悪さすることがある。
- 同期していないカメラ画像は、ステレオカメラ処理ができない。
    - だから、市販されているステレオカメラは同期がとれるようになっている。
    - 同期されていないカメラからは、整合性のある解釈ができないことがある。
- 遅延は、リアルタイム性を必要とするアプリケーションにおいて悪さをする。
    - 遅延がどの程度発生しうるのかのワーストケースを見積もること。
- タイムスタンプの入っていない画像・それに基づく検出結果は、判断に使えない場合がある。
    - リアルタイムの動作を期待するものの場合、必ずタイムスタンプを利用すること。
- データのコピーが発生しまくることが、システムを遅くする。
    - 画像データの転送にCPUを介在させないこと
      

##### 複数台のカメラシステムを組むときのCPUボード側の問題点
- 複数台のカメラを受け取れるインタフェースを持っているか、データ転送を受けきれるかは、CPUボード側の問題でもある。
- そのため、CPUボード側の問題を切り離して、マルチカメラ側だけを議論しても価値を持たない。


https://www.e-consystems.com/jp/nvidia-cameras/jetson-agx-orin-cameras/ar0821-4k-hdr-gmsl2-camera-jp.asp


![Screenshot from 2023-12-13 12-13-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/770a11cd-3853-f472-f9fe-c4207678b0db.png)
[引用元](https://www.e-consystems.com/jp/nvidia-cameras/jetson-agx-orin-cameras/ar0821-4k-hdr-gmsl2-camera-jp.asp)

- 6つのカメラモジュールを接続できる例
- GMSL2 カメラである。
- 同軸ケーブルの長さを伸ばせる。


[e-CAM130A_CUXVR - Four Synchronized 4K Cameras for NVIDIA® Jetson AGX Xavier™](https://www.e-consystems.com/jp/nvidia-cameras/jetson-agx-xavier-cameras/four-synchronized-4k-cameras-jp.asp
)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/8b2cbc50-3057-1b48-8617-42b99d2a2d90.png)

![Screenshot from 2023-12-13 12-20-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/0ce9895f-f2bc-b005-67ce-03ae820aea07.png)

> Linux camera driver (V4L2) for 13.0 MP MIPI CSI-2 camera module
> Micro-Coaxial Cable Length : 30 cm (1 m**)

なので、標準では30cmしか引き伸ばしできない。


#### 複数台のカメラから物体検出をする例

https://developer.nvidia.com/blog/implementing-real-time-multi-camera-pipelines-with-nvidia-jetson/


### 画像を別々に処理できる場合なら
案：　複数のRaspberryPiによる接続と検出処理
- 検出結果だけをRaspberryPiから送信する。
- メインのボードでそれらを受け取って、結果を統合する。
利点：
- カメラの受け口をRaspberryPiの数だけ増やせる。
- 受信したカメラ画像をそれぞれのRaspberryPiで処理できるので負荷を分散できる。
- RaspberryPiとメインのボードはEthernetで接続すればよいので、接続が簡単になる。
- 送信する内容が検出結果だけになるので、処理が簡単になる。
欠点：
- 入力数に応じてRaspberryPiの台数が増える。

## 参考複数のビデオストリームの場合
- 複数台のカメラからの人検出は監視カメラのモニタリングシステムなどで実現されている。
- 必要に応じてそういったものを参考にすること。
- NVIDIAのソリューションによっては1台のPCもしくは1台のJetson で、複数カメラに対して同時に物体検出を動作させている例がある。

## 車載分野のマルチカメラの利用例
![Screenshot from 2023-12-22 16-16-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/70a676a4-5b53-5bf3-48cc-7e81edfe7d27.png)
[引用元](https://global.honda/jp/tech/Multi-View_Camera_System_MVCS/)
運転席よりもさらに前方の位置から180度の視野のカメラを利用することで、見通しの悪い場所での安全を確保しやすくなります。


## ステレオ計測のマルチカメラ化
- ステレオ計測だと欠損点が多数生じてしまうので、それを補うようにマルチカメラ化のアプローチが存在する。
#### [マルチカメラシステム ― 2 個から 60 個のカメラを使ったシステム-](https://www.google.com/search?q=%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AB%E3%83%A1%E3%83%A9+%E3%82%B9%E3%83%86%E3%83%AC%E3%82%AA%E8%A8%88%E6%B8%AC&oq=%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AB%E3%83%A1%E3%83%A9%E3%80%80%E3%82%B9%E3%83%86%E3%83%AC%E3%82%AA%E8%A8%88%E6%B8%AC&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIKCAEQABiABBiiBDIKCAIQABiiBBiJBdIBCTgyNzZqMGoxNagCALACAA&sourceid=chrome&ie=UTF-8#ip=1:~:text=%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AB%E3%83%A1%E3%83%A9%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E9%81%AE%E8%94%BD%E3%81%AB%E9%A0%91%E5%81%A5%E3%81%AA3%E6%AC%A1%E5%85%83%E5%BD%A2%E7%8A%B6%E8%A8%88%E6%B8%AC%E6%89%8B%E6%B3%95)


#### [マルチカメラ 3D センシングによる 360 度ステレオビジョンのプロトタイプを開発](https://www.hitachi.co.jp/New/cnews/month/2022/10/1020d.pdf)

![Screenshot from 2023-12-19 16-12-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/9be0b320-e519-2fdc-ab20-9df4cac826a6.png)
[引用元](https://www.hitachi.co.jp/New/cnews/month/2022/10/1020d.pdf)
車載の広角カメラの組み合わせで、各方位へのステレオ計測を可能にしている。


#### 多視点カメラ
１つの対象物に対して複数の視点から撮影するのは、多視点カメラと呼ばれる。

多視点カメラというキーワードで検索してください。


# Jetsonを利用したJetson プラットフォーム
[NRU-110V Series: 8x GMSL車載カメラおよび10Gイーサネット対応NVIDIA® Jetson AGX Xavier™ エッジ AIプラットフォーム](https://www.neousys-tech.com/ja/product/feature/gmsl-camera/nru-110v-nvidia-jason-embedded-platform-gmsl-camera)

-------------------

マルチビューステレオ（multiview stereo）というキーワードも使われます。

## [multi-view-stereo のGithub上のリポジトリのリスト(Starの多い順)](https://github.com/topics/multi-view-stereo)
上記のリンクをご覧ください。

## Github [Meshroom](https://github.com/alicevision/Meshroom)
>Meshroom is a free, open-source 3D Reconstruction Software based on the AliceVision Photogrammetric Computer Vision framework.
Learn more details about the pipeline on AliceVision website.

Youtube [Meshroom: Open Source 3D Reconstruction Software](https://www.youtube.com/watch?v=v_O6tYKQEBA)

## Github [COLMAP](https://github.com/colmap/colmap)

> COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) pipeline with a graphical and command-line interface.


## OpenMVS
github https://github.com/cdcseacave/openMVS

![Screenshot from 2023-12-22 15-50-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/1e397b22-9419-0c42-b4e2-97f79bb07a05.png)
[引用元](github https://github.com/cdcseacave/openMVS)
#### 日本語での解説記事　[OpenMVS：Multi-View Stereoによる3次元復元ライブラリ](https://blog.negativemind.com/2016/06/03/openmvs/)


## github [SimpleRecon: 3D Reconstruction Without 3D Convolutions](https://github.com/nianticlabs/simplerecon)

![teaser-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/00a15d76-1f2c-9f55-5cda-bfd2bdb00226.png)


## [MultiViewSteroNet](https://github.com/robustrobotics/multi_view_stereonet)
> MultiViewStereoNet is a learning-based method for multi-view stereo (MVS) depth estimation capable of recovering depth from images taken from known, but unconstrained, views. Unlike existing MVS methods, MultiViewStereoNet compensates for viewpoint changes directly in the network layers.

Youtube [MultiViewStereoNet: Fast Multi-View Stereo Depth Estimation](https://www.youtube.com/watch?v=sGq_HNo_FaI)


## github [DeepViewAgg [CVPR'22 Best Paper Finalist 🎉]](https://github.com/drprojects/DeepViewAgg?tab=readme-ov-file)
pdf [Learning Multi-View Aggregation In the Wild for Large-Scale 3D Semantic Segmentation](https://arxiv.org/pdf/2204.07548.pdf)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/a4472d84-5c20-3303-89ea-bb2729de4c49.png)


## SfM-MVS（Structure from Motion - Multi-View Stereo）
pdf [UAV空撮画像における3次元モデリング（SfM/MVS）ソフトウェアの形状特性比較](http://www.jsprs-w.org/meetings/data/w0099_kitagawa.pdf)

pdf [②３次元空間モデリングシステムの構築 －廉価に３次元空間をモデル化する技術の開発](https://www.gsi.go.jp/common/000138335.pdf)

#### github https://github.com/FlagArihant2000/sfm-mvs


#### [OpenDroneMap](https://www.opendronemap.org/)
- ドローンの分野は、SfM, MVSの両方が用いられる分野だ。次のように書かれている。
``` 
ODM turns simple 2D images into:
Classified Point Clouds
3D Textured Models
Georeferenced Orthorectified Imagery
Georeferenced Digital Elevation Models
```


## MATLAB [複数のビューからの structure from motion](https://jp.mathworks.com/help/vision/ug/structure-from-motion-from-multiple-views.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/d9e6d913-4aaa-a416-401a-490248968ca5.png)

これらの画像から、点群と、それぞれの視点位置とを算出する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/31e464e7-1adc-5bdd-bc42-29a969aaef35.png)

---------------------------
## 車載関係の分野でのマルチビューの記事
[Teslaはカメラを使ってどのように世界を認識しているか](https://zenn.dev/turing_motors/articles/cf9f5a230ceb57)

この記事は、参考になりました。
Transformerベースの物体検出が、マルチカメラでどのように扱われているのかを概観を知ることができます。