砂漠のデータ分析

機械学習 / 画像処理 / 自然言語処理

image segmentationについての覚え書き

Image segmentationについて軽く調べたのでまとめておく。

Image segmentationには大きく分けて2つの種類がある

1. semantic segmentation

画像内をいくつかの小領域に分割する手法。
画像内に映る被写体ごとに分割を行う。

2. superpixel segmentation

画像内をいくつかの小領域に分割する手法。
画像内で、色/距離などが似た集団毎に分割を行う。

semantic segmentationの手法

  • インターネット上で見つけたまとめ

【ディープラーニング】 セマンティックセグメンテーション手法のまとめ - 旅行好きなソフトエンジニアの備忘録

Semantic segmentation

Semantic Segmentationのサーベイ - takminの書きっぱなし備忘録

  • Facebookが公開しているsemantic segmentationのライブラリ。

Facebook、Deep learningベースのコンピュータビジョン物体検出アルゴリズム「Detectron」をオープンソース化。活用した研究論文も多数公開済み | Seamless

基本的にsemantic segmentationはDeeplearningでやってる研究が多い。

superpixel segmentationの手法

scikit-imageによく手法がまとまっている。 解説とともに実装も手軽に試せて最高。

Comparison of segmentation and superpixel algorithms — skimage v0.14dev docs

様々な手法が提案されており、実行速度やsegmentationの結果などが大分異なる。

とりあえず高速な手法が必要な場合は、Realtime + superpixel segmentationみたいなキーワードで調べると良さげ。

よく見かける手法として、SLICという手法がある。 論文は読んでないが、画像内のピクセル同士を距離を説明変数にしてK-Meansでクラスタリングしているようだ。

色はK-Meansの説明変数として使うのでマルチチャンネルの画像も使える。

さらに、次元を1つ上げて動画に対してSLICを行う事も可能で、そうすると、複数の画像にまたがるsuperpixelが得られ、物体追跡に応用する事ができるようである。

イメージとしては、写真を積み上げて3次元の物体にしたあと、クラスタリングによって3次元のsuperpixelを得るような感じだろうか?(想像でしゃべってます)

superpixel segmentationに関連する話題

関連する領域としてNormalized Cutという手法もあるみたいだけど理解していない。

Normalized Cut — skimage v0.14dev docs

Mean shift

Mean shiftを使ったsegmentationを行っている事例も見かける。 自分は、Mean shiftに対してエッジを保持したまま平滑化を行う手法という捉え方をしていたけどこう言う使い方もあるんですね。なるほどです。

f:id:sabaku2017:20180128165151p:plain

Mean shift pixel cluster - File Exchange - MATLAB Central

f:id:sabaku2017:20180128165630j:plain

Mean Shift Segmentation in Matlab | Shawn Lankton Online

Matlabを使った実装が多いけどOpenCVにも入ってるみたいなので、これを使えばPythonでもやれるはず。

OpenCVのエッジ保持平滑化フィルタ - Qiita

superpixel segmentationのためのデータセット

UCバークレーが公開しているBSDS500というデータセットがあった。このデータセットを使っている論文を探すと色々見つかるかも知れない。

UC Berkeley Computer Vision Group - Contour Detection and Image Segmentation - Resources

ただし、segmentationの他にedge detectionのためにも使われているデータセットなので、edge detectionの論文も多く引っかかってくる。