OpenCVで顕著性(Saliency)を求めてみる

概要

OpenCVopencv_contribに入っているsaliencyモジュールをを使って画像の顕著性(Saliency)を求める方法と、使ってみた結果を紹介します。

はじめに

この記事はOpenCV Advent Calendar 2016の23日目の記事です。

(視覚的)顕著性とは人の注視の引きつけやすさを示す指標のことです。また、画像の各ピクセルにたいして注視の度合いを推定したものは顕著性マップと呼ばれています。画像の顕著性マップが求まると、例えばサムネイル表示などのための画像のクロップや、顕著性の高い領域を強調させるような色変換などができるようになります。身近なところでいうと、モバイル版Twitterではタイムラインで表示する際には画像をクロップしていますが、おそらくSaliencyを基にクロップ領域を決定していると思われます(確かめた訳ではありません)。

今回は、OpenCVopencv_contribに入っているsaliencyモジュールを使って、画像の顕著性を求めてみます。 たくさんの写真を使って、自動クロップによるスライドショーや写真コラージュの作成、注目領域を強調する写真の自動色変換ができたらいいなぁと思い、OpenCVのsaliencyをとりあえず使ってみることにしました。

OpenCV Sailency の使い方

ビルド方法は opencv_contribに記載されているのでそちらをご参照ください。

OpenCVでは現在4つの顕著性を求めるアルゴリズムが実装されていますが、cv::saliency::Saliencyクラスを用いてそれらを共通のAPIで使うことができるようになっています。 指定した画像の顕著性マップは次のように求めることができます。

...
cv::Mat image = cv::imread("test.png");
std::string saliency_algorithm = "FINE_GRAINED";   
cv::Mat saliencyMap;
cv::Ptr<cv::saliency::Saliency> saliencyAlgorithm = cv::saliency::Saliency::create( saliency_algorithm ); 
saliencyAlgorithm->computeSaliency( image, saliencyMap );
...

基本的な使い方は公式のサンプルコードが参考になります。 github.com

現在OpenCVのsailencyモジュールには、下記4つのアルゴリズムが実装されています(2016.12.21現在)。

  1. SPECTRAL_RESIDUAL*1
    顕著性マップを求めるアルゴリズム

  2. FINE_GRAINED*2
    顕著性マップを求めるアルゴリズム

  3. BING*3
    物体がありそうな複数の矩形領域を算出するアルゴリズムBINGのプロジェクトページ

  4. BinWangApr2014*4
    動画の顕著性マップを求めるアルゴリズム

アルゴリズム別結果比較

OpenCVで実装されている上記1-3のアルゴリズムに加えて、Ming-Ming ChengさんのSaliency検出のオリジナルコード*5の結果を記載します。 Ming-Ming ChengさんのSaliencyプログラムは、以前から筆者が顕著性を求めるならコレが一番いいなぁと個人的に思っていたものです。なお、Ming-Ming ChengさんのオリジナルSaliency検出はビルドが簡単で使いやすいです。

saliency_results

おわりに

OpenCVopencv_contribに入っているsaliencyモジュールを使って顕著性を求める方法とその結果を紹介しました。 用途によって欲しい結果も変わるため、OpenCVに複数のアルゴリズムが実装されたことで簡単に複数アルゴリズムを比較できるのはいいなと思いました。 BINGはOpenCVに入っている学習済みモデルを使ったのですが、結果を見てみると過検出ぎみで今回の画像ではちょっと主観に合わないかなと思いました。 今後の課題として、BINGのオリジナルコードがMing-Ming Chengさんの同じリポジトリに入っているので、こちらも試したいと思います。

*1:X. Hou and L. Zhang. Saliency detection: A spectral residual approach. In Proc. CVPR, 2007.

*2:S. Montabone and A. Soto. Human Detection Using a Mobile Platform and Novel Features Derived from a Visual Saliency Mechanism. Image and Vision Computing, vol.28, pp.391-402, 2010.

*3:M.-M. Cheng, Z. Zhang, W.-Y. Lin, and P. H. S. Torr. BING: Binarized normed gradients for objectness estimation at 300fps. In Proc. CVPR, 2014.

*4:B. Wang and P. Dudek. A fast self-tuning background subtraction algorithm. In Proc. CVPRW, 2014.

*5:M.-M. Cheng, G.-X. Zhang, N. J. Mitra, X. Huang, and S.- M. Hu. Global Contrast based Salient Region Detection. IEEE TPAMI, vol. 37, no. 3, pp.569-582, 2015.