Visual Saliency を求める

概要

Visual Saliency(視覚的顕著性)とは、画像中で人間の視覚的注意を引きやすい領域を示す指標である。本手順では、OpenCV contrib の saliency モジュールに含まれる StaticSaliencyFineGrained クラスを使い、入力画像から Saliency マップを生成する C++ プログラムをビルド・実行する。

目次

関連する外部ページ

サイト内の関連情報

前提条件

手順

OpenCV の saliency モジュールは opencv_contrib に含まれており、標準の OpenCV 本体だけではビルドされない。opencv_contrib を含めてビルドしたOpenCV環境を用意した上で、次のサンプルプログラムを作成する。

  1. ソースファイルを作成する

    以下の内容で saliency_demo.cpp という名前のファイルを作成する。StaticSaliencyFineGrained クラスを使い、入力画像の Saliency マップを計算して表示する。

    #include <opencv2/core/utility.hpp>
    #include <opencv2/saliency.hpp>
    #include <opencv2/highgui.hpp>
    
    using namespace cv;
    using namespace cv::saliency;
    
    int main(int argc, char** argv)
    {
        if (argc != 2)
            return -1;
    
        Mat image = imread(argv[1]);
        if (image.empty())
            return -1;
    
        Mat saliencyMap;
        Ptr saliencyAlgorithm = StaticSaliencyFineGrained::create();
    
        if (saliencyAlgorithm->computeSaliency(image, saliencyMap))
        {
            imshow("Original Image", image);
            imshow("Saliency Map", saliencyMap);
            waitKey(0);
        }
    
        return 0;
    }
    
  2. ビルド

    ◆ Linux でのビルド手順例(pkg-config を使う場合)

    g++ -std=c++17 -o a.out saliency_demo.cpp $(pkg-config --cflags --libs opencv4)
    
  3. 使ってみる
    wget https://www.kkaneko.jp/sample/lena_std.jpg
    ./a.out lena_std.jpg