watershedによる領域分割


少し前の記事でGmicのcolorizeが便利そうでしたので、Gmic内のスクリプトを読みながらopencvで似たようなことをやってみました。

Gmicはsourceに含まれているgmic_def.gmicに処理手順が書かれているため、同じことができるんじゃないか…と思ったのですが、なかなか難しいかも。

pyopencv2を使ってwatershedを中途半端に実装してみた例

gmic_def.gmic内のスクリプトによると、__x_colorize内でpotential mapというのを生成し、それを領域分割時に参照しているようなので、まずはここの処理と同等のものを作ってみることにしました。

ラインアート処理部なので、

  1. [Layer1] blur 0.05%
  2. [Layer1] normalize 0.0 〜 1.0
  3. [Layer1] Layer1に対して blur 0.5% したものを[Layer2]に出力
  4. [Layer1] pow(べき乗計算) 10
  5. [Layer1] normalize 0.0 〜 1.0
  6. [Layer2] normalize 0.3 〜 1.0
  7. [Layer1] と [Layer2] を min 合成

といった処理をこんな感じに読みかえ。

ガウシアンフィルタのパラメータを理解していないため、数値は適当です。

 plotしてみる。

 watershed…だめかも。

 potential map

 

塗り分け処理を行っている部分も移植しないとあんまり意味がなかったり。

OpenCVを直接使用するのは初めてだったけど、Python用のライブラリも含まれているのでありがたかった。

MacOSX用のMakefileの生成にはCMakeが必要なのですが、以下のオプションのチェックを外しておきました。

  • BUILD_SHARED_LIBS
  • BUILD_TESTS
  • WITH_1394
  • WITH_FFMPEG

参考:http://blogs.wcode.org/2014/10/howto-install-build-and-use-opencv-macosx-10-10/

Render color map, Manage replace color mode, Render base image, Render viewの部分が理解できないと絶望的かも。

このページへのリンクやツイートによる共有はご自由にどうぞ