x軸はグレースケールの色と最頻値との差の絶対値、y軸は画像の外周を中心に円にした時の中心からの距離。下図の右下を切り離したいので、別のクラスタリング手法を使う必要がありそう。
しかし、OpenCVにはk-meansしか用意されていないので、sklearnを入れてみた。色々なクラスタリング法が使えて面白い。ただ、遅いからサンプル数を間引かないといけないけども。
- スペクトラルクラスタリングはメモリが大量に必要とのことで断念。
- Ward法はk-meansと似た結果でダメだった。
- DBSCANは良さげに見えるけど、今回のケースでは不可能。
- 凝集クラスタリングで良い結果を得られた。
クラスタ数増やしたら一応上手く行ったけど、安定した方法では無さげ。さてどうするかな。外れ値検出とか? アウトラインフラグメント化とか?