OpenCVSharp - eiichiromomma/CVMLAB GitHub Wiki
OpenCVの.Net Frameworkラッパー。C#は勿論の事IronPythonやC++/CLIで使える。
作者のgithubのwikiにC#での要点が載っているのでC++ APIをC++/CLIに翻訳すると使える。
OpenCVSharpの配布ファイルのOpenCVを含めdll一式を作成している実行形式ファイルと同じフォルダに置けば使える。(OpenCVのdllはパスを通した場所に置いても良い) あとは#usingでdllを参照指定する。
MATLABで作られてたアインシュタイン+FFTのアレ。動画も試したかったのでカメラの画像を使う。
ポイントは下記の通り
- C++ I/FでのMatのAtの代わりにMat::Indexerを使う
Mat chkMask = gcnew Mat(padded->Size(), MatType::CV_32F);
Mat::Indexer<float>^ negid = chkMask->GetGenericIndexer<float>();
for (int y = 0; y < chkMask->Rows; y++){
for (int x = 0; x < chkMask->Cols; x++){
negid[y, x] = (float)Math::Pow(-1, x + y);
}
}
- MATLABやnumpyのようなfftshiftは存在しないので原画像に[-1,1]の市松模様を乗算して最高周波数から減衰させることで代用している
流れは下記の通り
- 原画像の実部に(-1)^(x+y)を乗算(虚部は全部ゼロ)
- DFT
- 周波数ドメインでフィルタ処理
- IDFT
- 実部は(-1)^(x+y)が乗算された状態なので再度(-1)^(x+y)を乗算