今回は画像特徴量の一つであるLBP(Local Binary Pattern)特徴を計算するプログラムを書いてみました。
LBPは1994年に発表された画像特徴量で、中心画素と周辺画素の画素値の関係性を元に算出される特徴量です。
計算の手段は以下のようになります。
ある注目画素に関し、周辺8画素が注目画素よりも輝度値が大きいか小さいかを元に0、1で示します。この周辺8画素という数がミソで、0 or 1が8bit分で表現できるため、ちょうど1byte(0~255)のレンジに値が収まります。
このような計算方法で得られる特徴量をLBP(Local Binary Pattern)と呼び、比較的照明変化などに強い特徴量であると言われています。
また、上記の説明で完結するように、他の特徴量と比べると非常にシンプルな印象を受けます。実装もそんなに難しくありません。
このような特徴量をベースにして、あらかじめ抽出したい対象(例えば人物など)のLBP特徴を計算しておき、同じような特徴を示す場所を探すことで画像中からの物体検出などにも応用することが可能です。
それでは、早速コードなどを載せていきます。
目次
動作環境
・OS : Windows10(64bit)
・Visual Studio 2015 Community
・OpenCV 2.4.11
(上記全て環境構築済の状態でビルド)
今回はOpenCVは環境済の状態でスタートするので、OpenCVの環境構築は以下の記事などを参照してください。
過去記事①:Nugetを使ってOpenCVの環境構築(Visual Studio 2015)
過去記事②:Visual Studio 2015でOpenCV 3.4環境構築(Windows10)
ソースコード
画像の端での処理の制御がめんどくさかったため、画像全体に1pixelのパディングを入れてからLBPを計算する形で実装しています。
実行結果
以下の画像が結果です。上が入力画像で、下がLBP特徴の画像です。
実行結果は以下です。1600×1066のサイズで24msでしたが、実装はあまり計算時間を意識せずに組んでしまったので、もっと効率的な書き方はありそうです。
まとめ
Local Binary Patternの計算をOpenCVとC++のプログラムとして実装してみました。次はLBPを用いた物体抽出プログラムや、他の特徴量に関するプログラムも組んで、理解を深めてみたいです。