Paradigm Shift Design

ISHITOYA Kentaro's blog.

OpenCVとMIST

ちと思うところあって、OpenCVMISTを使ってごにょごにょしている。
研究室の森君がC++使いということもあって、色々教えてもらいながら手習い中。


C++なんて7年ぶり!?佐賀ゼミ(なちぃ)でマリオのまがい物を作って以来だ。
C#をこの半年使ってきたので、できればC#でプログラムは書きたい。なので、森君にC++/CLIというものがあるのを教わって、MISTとOpenCVをラップしたDLLを作ってみた。
すごく簡単。
うーん。しかし、7年前に手探りでやっていた時よりずっと楽にプログラムが書けるのは、きっと成長したんだ!とか。多分VisualStudioが進化したんだね…Managedな型やクラスが使えるのはかなり楽。


…deleteとかReleaseとか。いまだにC++ナ人たちは頑張ってるんだね。


まぁそれはそれとして、OpenCVでopencv.jp - OpenCV: マッチング(Matching)サンプルコード -OpenCVのcvMatchTemplate実装について調べてみた - I CAN ’CAUSE I THINK I CAN!あたりを参考にプログラムを書いていたんだけれど、similalityというかprobabilityというかそういう係数がMatchした領域に対して取得できないので、複数のテンプレートが同じ領域にマッチした時にどちらを優先していいのかわからない問題があった。


ので森君お勧めのMISTに乗り換えるべく、
Tutorial/Practice1 – MIST Project
を参考にactive_searchを実装してみた……が普通にmist/active_search.hとかあるし。
3時間ぐらい無駄にした。あるならあると。
で、結果からいうと使い物にならないくらい遅い。「高速」とあるが、VCのCLIでたたくもんじゃないらしい。あまりにも遅いのでどうしようかと思案中。


ところでMISTは、矩形の描画がなかったり、イメージの読み込み時にフォーマットを意識しなきゃいけなかったりと、色々基本的な機能が抜けている気がする。
森君曰く
「MISTは画像処理ライブラリですから」
だそうだけれども、それならば、なおのことOpenCVや他の画像ライブラリと連携する機能がほしかった。OpenCVのIplImageとarray2が透過的に利用できるようになっていたら、かなりプログラムが楽になるし、すっきりする。
ま、あまり望むべくもないが。


とにかく、そういうわけでMISTはC++/CLI+C#な環境で使うには向いていないということが分かったので、OpenCVのTemplateMatchでsimilalityを取るのと、テンプレートのスケーリングをするようなプログラムを書いてみようかなと思う*1


あ、あと、ADCから加入完了のご連絡が来ていた。

*1:というか、マッチのアルゴリズムを自分で実装しろという噂もちらほらと