• ベストアンサー

OpenCvsharpについて。

OpenCvsharpについて。 現在OpenCvsharpを使って画像の類似度を計算するプログラムを作ろうと思っております。 現在サンプルについてくる画像のヒストグラムを描写するプログラムを改造しようと思っている段階なのですが、0~255の段階に分けられたヒストグラムの各要素を取り出して、その各距離を足し合わせたものが画像の類似度になると思うのですが、プログラム中にヒストグラムの値を表しているものがどれか分かりません。 どなたか、OpenCVsharpのヒストグラムに関するプログラムを使ったことがある人で分かる方がいましたら、是非回答お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

OpenCVSharpは使ってないですが、OpenCVのサンプルプログラムはあります http://opencv.jp/sample/histogram.html#hist_distance CV#はOpenCVへのラッパーになっているので、ここで使われている構造体や関数に対応するクラスや関数があるはずです。

関連するQ&A

  • C#における正規化について教えて下さい

    現在大学でプログラミングをやっている大学4回生です。 使用言語はC#で、ライブラリ関数としてOpenCvSharpを使用しています。 今現在、類似画像検索機能を実装しようとしているのですが、なかなかうまくいきません。 特徴量は今のところカラーヒストグラムのみでやっています。 流れとしては、 入力画像を読み込み64色に減色した後、順にカラーヒストグラムを算出して要素数が64の配列に格納しています。 ちなみにint型で定義しています。 扱っている画像は900*1200ぐらいサイズから、1800*2700など大きいサイズも多く含まれています。 配列の中は単純にその色の画素数になっていますので、かなりの数になります。 また、画像のサイズの違いによってヒストグラムの合計値にも差がでてきてしまいます。 そこで、それぞれのヒストグラムに正規化を行い、0から任意に指定した最大値までの値で出力し、 比較を行えるようにしたいのですが、どのように正規化を行うのがいいのでしょうか。 正規化できた後は、正規化した2つのヒストグラムをHistogram Intersectionを用いて比較し、類似度を求めようと考えています。 Histogram Intersectionを使うためには正規化を行わないと無理があるのではと思ったので(汗)。 これが1番の理由です... C++等でのやり方はいくつか見つけたのですが、私の力ではそれをC#で使用できるように翻訳することもできなさそうなので... 手法の方はできるだけ詳しく教えていただけると幸いです。 よろしくお願いします!

  • ヒストグラム類似度による画像のマッチング処理

    現在、C言語で画像のマッチング処理をして、画像の類似度を調べる必要が出てきました。 そこで、とりあえずヒストグラムの最大値を1として平均化して、ヒストグラム値を取得した二つの画像を用意。 その同じ画素値どうしのヒストグラムの値の差分(絶対値)をとり、それをRGBの1~256まで繰り返して全部合計。 その合計値が一番低かった画像が似た画像である。 という適当なアルゴリズムを作ってみたのですが、上手くいきませんでした。 何か良いアルゴリズムをご存知の方はいないでしょうか? 類似度といっても、ぱっと見の全体的な色が似てさえいればいいので、画像の詳細が似ている必要はありません。 どちらかといえば、処理速度は速いほうがいいです。

  • プログラムについて。

    プログラムについて。 現在類似画像検索についてのプログラムをOpenCvを用いて作っています。RGBのヒストグラムを作り、それを比較することで類似度を表そうとしているのですが、以下のプログラムに一番外側のfor文を追加するとエラーが起こり止ってしまいます。 for( k=1 ; k < 4 ; k++ ){ ←これがエラーの原因   for (i = 0; i < sch; i++) { dst_img2[i] = cvCreateImage (cvSize    (src_img[k]->width,src_img[k]->height), src_img[k]->depth, 1); } cvSplit (src_img[k], dst_img2[0], dst_img2[1], dst_img2[2], dst_img2[3]); // ヒストグラムを計算,正規化して,距離を求める for (i = 0; i < sch; i++) { cvCalcHist (&dst_img1[i], hist1, 0, NULL); cvCalcHist (&dst_img2[i], hist2, 0, NULL); cvNormalizeHist (hist1, 10000); cvNormalizeHist (hist2, 10000); tmp = cvCompareHist (hist1, hist2, CV_COMP_BHATTACHARYYA); dist += tmp * tmp; } dist = sqrt (dist); } ちなみにdistには、2つの画像のヒストグラムがどれだけ離れているかという距離が入ります。わかりずらいプログラムで申し訳ありませんが是非分かる方がいらっしゃったら回答お願いします。

  • 2枚の画像間の色ヒストグラム距離の計算方法について

    2枚の画像間のカラーヒストグラム距離の計算方法で悩んでおります。 今2枚の画像があって、カラーヒストグラムを求めます。2つのヒストグラムを各ビンごとに比較して距離を計算すると、例えば青一色の画像と水色一色の画像の距離と青一色の画像と赤一色の画像の距離は等しくなってしまいます。普通の感覚と同じように、前者の距離の方が後者の距離より近くなるような計算方法はありませんでしょうか? 距離というのは画像間距離です。 よろしくお願い致します。

  • 人事考課のアウトプット値の計算方法

    既存のサンプルに頼らず実情に沿った考課表の作成を検討しています。 具体的には、インプットするいくつかの考課項目(1~5段階)があり、これに対して、各個人の評価を例えば、0.9~1.1の範囲程度でアウトプットして、この値を変動給に乗じて毎月の給与に反映させるというものです。5段階のうち3が標準だとすれば、すべて3だとアウトプットされる値は1、つまりプラスマイナス0となります。 偏差値を使わず、あくまでも個人の絶対値を出すもので、計算式は比較的単純だと思います。このような計算方法のサンプル(EXCEL)や、もしくは類似していて、より良い方法があれば紹介してください。ありがとうございます。

  • MATLABの初歩?

    最近始めた画像処理。 MathWorksから提供されたサンプルプログラム。 MATLABから画像を読み込みヒストグラムを計算しようとすると 「関数’imhist’(タイプ'unit8'の入力引数)が未定義です」 と表示されます。 ちなみに、 ・image pressing ・image Acquisition などは評価版です。 対処方法をご教授いただける方いらっしゃいますか?

  • 類似度 ユークリッド距離とコサイン尺度の統合

    類似楽曲検索を作ろうと考えています。 ある楽曲の音響信号の特徴量と似た楽曲を検索するシステムです。 検索するにあたって、ある3つの特徴量(A,B,C)を使うとします。 AとBの特徴量はコサイン尺度を用いて類似度を計算、 Cはユークリッド距離で計算し、最終的に一つの類似度を計算したいと考えているのですが どのような方法がありますか? 例えばすべてをコサイン尺度で計算すれば、 類似度=cos(Ai,Aj)+cos(Bi,Bj)+cos(Ci,Cj)   (cos(Ai,Aj)は楽曲iとjの特徴量Aにおけるコサイン尺度) のように和を類似度として使えると思うのですが、 コサイン尺度(-1から1までの値をとる)とユークリッド距離は(0以上の値をとる)を使う場合、単純に加算しただけではうまくいきません。 正規化、無次元化?をすればいいのでしょうが、具体的な方法がわかりません。 どなたかアドバイスお願いします。

  • 2013VB.net 不思議なimportsエラー

    OpenCvSharpというライブラリを 既存のVB.netプロジェクトに組み込みたいのですが、上手く動かせません。 Nuget にて 17'11/17版 OpenCVSharp3 をインストールしました。 (その時、正常に追加したとメッセージがでました。) Imports OpenCvSharp を記載することができ、エラーもでないのですが、 ビルドをすると、緑の波線とともに以下メッセージが出力します。 「インポート "OpenCvSharp" で指定された名前空間または型が、パブリック メンバーを含んでいないか、または見つかりません。 名前空間または型が定義されていて、少なくとも一つのパブリックを含んでいることを確認してください。 また、インポートされた要素名がエイリアスを使用していないことを確認してください。」 VB.net で「Windowsフォームアプリケーション」指定の空のプログラムを作り、同様の手順でWEBCAMの画像(動画)を取得するソフトは 何のエラーもなく動作します。 (ちなみにX86でもX64でも問題なく動きます。) 「インポートされた要素名がエイリアスを使用していないことを確認してください。」とありますが、 既存のコードで使っている要素名と、今回インポートした要素名の間でなにか不具合がおこっているのでしょうか。 ビルドする前には、実際にインテリジェンス機能がはたらいていて、 Dim img = Cv2.ImRead("c:\cube.jpg") ... などと、エラーなしで記載することができます。 ビルドすると、途端にインテリジェンス機能がはたらなくなり、 宣言されていないことになってしまいます。 お詳しい方、当問題解決についてご教示いだけないでしょうか。

  • 面粗度に付いて

    現在、サンプルを作る際に面粗度の値が分からず、大変困っております。 3.2μmRyは、?Raになるのでしょうか。 その計算方法は? 何方かお分かりになる方、教えてください。 宜しくお願いします。

  • PDF画像の変換方法

    質問させていただきますっ!! すでにあるPDF画像を読み込んで、JPG画像として吐き出すプログラムをPHPで行いたいのですが、可能でしょうか? 例:)sample.pdf(読み込み) -> プログラム -> sample.jpg(吐き出し) 自分で調べたのですが、見つからず・・・(探し方が悪いとはおもいますが。。。) 企画段階なので、できるか否かが欲しいです!! どうかご返答お願い致します!!!

    • ベストアンサー
    • PHP