マスク画像の自動作成、難易度高し…途中経過
途中経過。
前回でぶち上げたテーマ「マスク画像の自動作成」について、OpenCVのセグメンテーションという分類を中心に探っている。
ぶっちゃけ難易度高すぎた。精度が出なくて「手描きの方がマシでしょ!」って感じのものしか作れない。ううぅぅ
その中でも、
GrabCut(グラフカット)というアルゴリズムを使うと、画像にもよるが自動で背景と前景をそこそこ上手い具合に切り分ける。
GrabCutの参考として
- GrabCutを使った対話的前景領域抽出 — OpenCV-Python Tutorials 1 documentation
- 画像の前景を分離する -- GrabCutアルゴリズム - Emotion Explorer
- 【OpenCV】GrabCutの使い方【セグメンテーション】 - iPX社員によるブログ
などなど。
3つ目のサイトのコードは説明がなく分かりにくいが、実行すると画像が表示されたウィンドウが立ち上がり、前景(対象物)をマウスにより矩形(くけい。長方形のこと)で囲んだり、grabcutで計算して切り分け上手く行っていないポイントにマウスで色を着けたり対話式にやり取りしながら再計算で手直し等の機能がついている。
OpenCVはマウス描画用ライブラリも備えている。びっくりだ。
GrabCutの他には、輪郭を検出するもの
【Python】OpenCVで輪郭の検出 – findContours(), drawContours()
watershed(分水嶺)
【Python】OpenCVでWatershedアルゴリズムと物体のセグメンテーション
その他、閾値で2値分類する大津法など幾つかの手法を組み合わせて背景を消そうとするものがほとんどのようだが、
ハサミで下手くそに切り抜いて貼っつけた雑な掲示物みたいな合成画像になって、やはり精度が…
下記のサイトはOpenCVとpytorchという機械学習ライブラリを組み合わせて高精度の背景分離がされている。
Deep Learningで背景削除をしてみる - Fusic Tech Blog
これぐらい出来れば文句ないのだけど。