Python + OpenCVで顕著性 (saliecy) マップを実装

Python + OpenCVで顕著性 (saliecy) マップを実装

2018-12-144 min read

目次

  1. 概要
  2. 顕著性マップ
  3. opencvに用意されている3つの顕著性検出アルゴリズム
  4. static-saliency
  5. 注意点
  6. 参考

概要

Python + OpenCV の saliencymap で顕著性マップを表示するサンプルを紹介します。

顕著性マップ

ざっくり言うと、

人が視覚的注意の仕組からすると、画像・映像の中でどの部分を注視しやすいかを画像情報から計算するもの
です。 自動作成を行うために用いられることの多い3つの重要度マップ手法 | https://news.mynavi.jp/article/computer_vision-44/

OpenCVに用意されている3つの顕著性検出アルゴリズム

OpenCVに用意されているsaliency機能 ※ 画像をクリックで拡大

OpenCVのsaliencyモジュールには3つの形態があります。

  • Static saliency : 画像から検出するもの
  • Motion saliency : 動画のフレームに依存するもの
  • Objectness
https://docs.opencv.org/3.4.2/d8/d65/group__saliency.html

Static saliency

上記で触れた「Static saliency」うちの以下の2つを紹介します。

cv2.saliency.StaticSaliencySpectralResidual_create()
cv2.saliency.StaticSaliencyFineGrained_create()

StaticSaliencySpectralResidual_create()

import cv2

if __name__ == "__main__" :
    image = cv2.imread("./img/src.jpg")
    
    saliency = cv2.saliency.StaticSaliencySpectralResidual_create()
    (success, saliencyMap) = saliency.computeSaliency(image)
    saliencyMap = (saliencyMap * 255).astype("uint8")

    if success is True:
        cv2.imshow("Image", image)
        cv2.imshow("Output", saliencyMap)
        cv2.waitKey(0)

StaticSaliencyFineGrained_create()

import cv2

if __name__ == "__main__" :
    image = cv2.imread("./img/src.jpg")

    saliency = cv2.saliency.StaticSaliencyFineGrained_create()
    (success, saliencyMap) = saliency.computeSaliency(image)

    if success is True:
        cv2.imshow("Image", image)
        cv2.imshow("Output", saliencyMap)
        cv2.waitKey(0)

注意点

上記の実装はOpenCV3.4系のものです。3.3系の不具合があるようです。

参考

https://www.pyimagesearch.com/2018/07/16/opencv-saliency-detection/

https://docs.opencv.org/3.4.2/d8/d65/group__saliency.html

Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項