image segmentationについての覚え書き
Image segmentationについて軽く調べたのでまとめておく。
Image segmentationには大きく分けて2つの種類がある
1. semantic segmentation
画像内をいくつかの小領域に分割する手法。
画像内に映る被写体ごと
に分割を行う。
2. superpixel 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に対してエッジを保持したまま平滑化を行う手法という捉え方をしていたけどこう言う使い方もあるんですね。なるほどです。
Mean shift pixel cluster - File Exchange - MATLAB Central
Mean Shift Segmentation in Matlab | Shawn Lankton Online
Matlabを使った実装が多いけどOpenCVにも入ってるみたいなので、これを使えばPythonでもやれるはず。
superpixel segmentationのためのデータセット
UCバークレーが公開しているBSDS500というデータセットがあった。このデータセットを使っている論文を探すと色々見つかるかも知れない。
UC Berkeley Computer Vision Group - Contour Detection and Image Segmentation - Resources
ただし、segmentationの他にedge detectionのためにも使われているデータセットなので、edge detectionの論文も多く引っかかってくる。