SLIC(Simple Linear Iterative Clustering) 再現実装
スーパーピクセルを生成するSLIC(元論文)(2012年)の実装です。
セグメンテーション手法の1つ。各ピクセルの色や特徴の類似度から複数のピクセルをまとめたスーパーピクセルを生成。k-meansをスーパーピクセル生成に応用した手法。
- RGB表色系からLab表色系に変換
- k個の重心を画像に均等配置(kはユーザーが指定)
- 勾配に基づいて重心位置を調整
- 最大イテレーション数もしくはマンハッタン距離で計算した重心移動量が閾値以下になるまで以下の処理を続ける
- 画像全体ではなく、局所的な範囲で重心とピクセルの距離に基づくk-meansを適用。ただし、距離計算は色と位置、スーパーピクセルの大きさを考慮する。
- クラスタに含まれる全てのピクセルの色と位置の平均値から新たな重心を計算し、重心を移動
-
再現実装 slic.py
主にPythonとNumpyを用いて実装 -
OpenCVを用いた実装 slic_cv.py
Qiita:OpenCVのスーパーピクセルを参考に実装
解説資料のpdfを公開しました 解説資料
ざっくりとした解説をZennに公開しました スーパーピクセル SLIC を学んでみた
conda env create --file env.yml
- Python: 3.8.13
- Numpy: 1.23.0
- OpenCV: 4.5.5
- RGBからLabに変換する際に並列処理からnp.vectorizeに変更。約1.15倍高速になる
【RGB表色系からLab表色系に変換】
【SLIC】