(この記事の文字数: 838)
OpenCVについているcvWatershedはマーカー画像と元画像からWatershed(分水嶺)アルゴリズムを用いて未決定の領域を分割してくれる関数です。ざっくりとしたマスクから細かいマスクを切ってくれれば、マスク作成に使えるんじゃないかと思って試してみました。
こちらが実験に使うソース画像です。
こちらがペイントソフトでざっくりと描いたマーカー画像。黒の領域を自動的に周りのマーカーを元に埋めながら領域分割を行ってくれるようです。
こちらがcvWatershedによって得られた最終的なセグメンテーション画像。
こちらが、ソース、ざっくりマスク、領域分割後のそれぞれの画像を重ねてみたものです。
重ねてみるとよくわかりますが、この画像ではちゃんと境界にそった結果になりました。
Watershedアルゴリズムは中心となるマーカーから徐々に領域を広げていって、ちょうど分水嶺になるような場所を分割点として切るというアルゴリズムのようです。
私はこれに加えてエッジの特徴量も利用しているのかなぁと予想していたんですが、予想通りエッジに沿った輪郭を自動的に形成してくれました。
マスク作成に割と使えそうです。ちなみにこの分割領域から背景をマスキングした画像がこちら。
OpenCVは簡単に実装できるけど精度はイマイチのものが多い気がしますが、この関数はそのまま使えそうで良かったです。
マスク作成用のソフトはいろいろと売られていますが、自作のものをひとつ持っているといろいろと好き勝手にカスタマイズできるので、OpenCVのソースに手を加えてマスク作成用のツールを作っておきたいところです。
追記 ----------------------------------------
最初にこの記事を書いたときに結果の境界がジャギジャギになってしまったと記しましたが、それはWatershedの問題ではなくて別のところのミスがあったためとわかりましたので、この記事の内容は改めて更新させていただきました。
こちらが実験に使うソース画像です。

こちらがペイントソフトでざっくりと描いたマーカー画像。黒の領域を自動的に周りのマーカーを元に埋めながら領域分割を行ってくれるようです。

こちらがcvWatershedによって得られた最終的なセグメンテーション画像。

こちらが、ソース、ざっくりマスク、領域分割後のそれぞれの画像を重ねてみたものです。

重ねてみるとよくわかりますが、この画像ではちゃんと境界にそった結果になりました。
Watershedアルゴリズムは中心となるマーカーから徐々に領域を広げていって、ちょうど分水嶺になるような場所を分割点として切るというアルゴリズムのようです。
私はこれに加えてエッジの特徴量も利用しているのかなぁと予想していたんですが、予想通りエッジに沿った輪郭を自動的に形成してくれました。
マスク作成に割と使えそうです。ちなみにこの分割領域から背景をマスキングした画像がこちら。

OpenCVは簡単に実装できるけど精度はイマイチのものが多い気がしますが、この関数はそのまま使えそうで良かったです。
マスク作成用のソフトはいろいろと売られていますが、自作のものをひとつ持っているといろいろと好き勝手にカスタマイズできるので、OpenCVのソースに手を加えてマスク作成用のツールを作っておきたいところです。
追記 ----------------------------------------
最初にこの記事を書いたときに結果の境界がジャギジャギになってしまったと記しましたが、それはWatershedの問題ではなくて別のところのミスがあったためとわかりましたので、この記事の内容は改めて更新させていただきました。
<<「ソフトウェア開発」の次の記事
コメント(0 件)