- 締切済み
2値画像の一致度判定プログラム教えてください。
2枚の画像データ(白黒2値画像、ファイル形式は何でもよい、サイズ同じ)を読み込みピクセル単位で比較して、それらの画像がどのくらい一致しているかを数値で判断するサンプルコードをC言語でどなたか教えてください。お願いします。 例えば、次のような2枚の画像があったとします。 画像A 画像B ■□■□■□ □■□■□■ □■□■□■ ■□■□■□ ■□■□■□ □■□■□■ □■□■□■ ■□■□■□ 実行結果「画像Aと画像Bは0%一致しています。」
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
DIBの場合ですが、既出の通りで、1バイト当たりに8ピクセル分のデータを詰め込んでいる上(1バイト8ビット前提のお話)、折り返す1ライン辺りが4の倍数でなければならないなど、一見単純に見えて、結構面倒だったりもします。 恐らく以下で計算出来た筈です。 static LONG CalcScanLineByte(const LONG w, const WORD bpp) { return (((bpp * w) + 31) / 32) * 4; } //横幅1ピクセル、1ビット(モノクロ)イメージのスキャンバイト数 int scanLine = CalcScanLineByte(1, 1);
- yama5140
- ベストアンサー率54% (136/250)
>実行結果「画像Aと画像Bは0%一致しています。」 なんか違うような・・。 実際に、添付に示すとおり、質問者様の画像Aと画像Bを作ってみました。 ・ちょっと見、「画像Aと画像Bは、100%一致しています。」といいたくなります。 >ピクセル単位で比較して、それらの画像がどのくらい一致しているかを数値で判断すると・・ 画像Aは、画像Bと 0%一致しています、となり、 画像Aは、画像Cと50%一致しています、となります。 ↑このことを「判断するサンプルコードをC言語でどなたか教えてください」でよいのなら、 (BMPの例ですが・・) http://www14.big.or.jp/~ken1/tech/tech12.html を参考にしてください。 なお、16と256色での説明ですが、「白黒2値画像」の場合は、データ8ビットがそのまま8ピクセルに対応します。 バイナリモードで読み込んで、ビット単位で比較するだけかと・・。 添付図のように、「判断する」ことにあまり意味があるとは思えませんが、 プログラムを勉強する上では、よろしいかと・・。
画像AとBを先頭ピクセルから比較していって合計を画像サイズで割ればいいんでは? int sum=0; for(int y=0;y<image_height;y++){ for(int x=0;x<image_height;x++){ if (imageA[x][y]==imageB[x][y])sum++; } } int anser = sum/image_size; こんな感じ
- saru1234
- ベストアンサー率37% (223/593)
なぜそんなモノを知りたいのですか?