おぺんcv

画像処理エンジニアのブログ

Stixel Computationを実装してみた multi-layer編

はじめに

以前Stixel Computationを実装してみたで紹介したStixelですが
今回はその発展形である、Multi-Layered Stixelを実装してみました

概要

Stixelとは、Daimlerが研究しているステレオカメラによる障害物検出の手法です
画像を幅5~10ピクセル程度の細長い棒に区切って、そこからさらに障害物の領域を検出します
以前紹介したStixel計算手法では、区切られた1つの列からは1つのStixel(最も手前側にあるもの)
しか検出できませんでしたが、Multi-Layered Stixelでは複数のStixelを検出可能になりました

デモ

物体上に出てる棒状のものがStixelです
以前のStixelとは違い、ガードレールの奥にいる車両のStixelも検出できています

www.youtube.com

アルゴリズム解説

ざっくり説明するとMulti-Layered Stixelの計算は
画像の各列を路面(ground)、物体(object)、空(sky)のいずれかのセグメントに分類する問題です
列を3つのセグメントに分割する組み合わせは色々と考えられますが、各セグメントに対し

  • Data項:セグメントがあるクラスに属しているとき期待される視差値と実際の視差値の誤差
  • Prior項:セグメントの割り当て方に関する先験情報

からなるコスト関数を定義し、これらの和が最小となる分割を求めます
最小化問題を効率的に解くために動的計画法が用いられます

さらなる詳細は[1]の3 The Multi-Layered Stixel Worldを参照下さい
数式の展開や実装方法など、かなり細かく解説してあります

おわりに

参考文献は著者の博士論文のようで、非常に読み応えがありました
なかなか内容が理解できず、3回くらいの挫折を経て何とか実装に至りました
また実装ができても当初は処理がめちゃめちゃ重く
inline化やテーブル化などの高速化を頑張りました

Stixel検出後の処理として、Stixelの追跡やグループ化などの処理があるようです
これらもいつか実装できればと思っています