- - PR -
画像の比較
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-11-30 17:25
2枚の画像があって,お互いがどれだけ類似しているかというプログラムを作成しているのですが,上手く正答率が出てくれません。
Dim X, Y As Long Dim i, j, k, l, stepsize As Long Dim col1, col2 As Long stepsize = 1 k = 0 l = 0 X = 0 For j = 0 To ny Step stepsize For i = 0 To nx Step stepsize k = i l = j col1 = Picture1.Point(i, j) ←1枚目の画像(bmp) col2 = Picture3.Point(k, l) ←2枚目の画像(bmp) If col1 = col2 Then X = X + 1 End If Next i Next j Y = X / 76800 * 100 ←正答率(320*240の画像なのでこのような式) Label1.Caption = Y というプログラムを作成してみたのですが,0%になってしまいました。 本当に初歩的なことを聞いているとは思うのですが,ご教授頂ければ幸いです。 宜しくお願い致します。 | ||||
|
投稿日時: 2005-11-30 17:54
これ何のソース?
言語は。 | ||||
|
投稿日時: 2005-11-30 18:19
これの定義が曖昧で、何をされているのかが判りません... Label1.Caption とありますので、言語はおそらく VB6 以前だと思いますが、 バリアント型を使っているという意識はあるのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-11-30 18:23
XがLong、つまり整数なので、想定される最大値の76800で割るとその時点で0になっちゃうから。 つまり、Y=1/2*2が0になっちゃうのと同じ。 オーバーフロー(Longの最大値を越えてしまう)心配がなさそうなので、 Y=X*100/76800 にすれば良いんじゃないかな。 まぁ、更に約分して Y=X/768 とすると、オーバーフローがどうとか考えなくてもすみそうだけど。 | ||||
|
投稿日時: 2005-12-01 14:22
返信有難うございます。 これはVB6.0です☆ | ||||
|
投稿日時: 2005-12-01 14:32
返信有難うございます。 変数は全て型宣言したと思ったんですが,バリアント型になっていたんでしょうか?ちょっと変更してみます。 定義は,2枚の画像(2値化されているので白or黒のみ)を比較するんですけど,比較の仕方はそれぞれの画像の同じ座標位置の画素を一つ一つ比較していって,同じならフラグを立てる。そして,最終的にはそのフラグの数を利用してどれだけ類似しているかを計算で出したいのですが,,, この説明で理解出来ますでしょうか?文章書くのが下手ですみません。 | ||||
|
投稿日時: 2005-12-01 14:34
ご教授有難うございます。早速試してみたところ0ではなくなりました。しかしまだプログラム的に違うところがあるようなので頑張ってみたいと思います。 | ||||
|
投稿日時: 2005-12-01 14:57
PictureBoxコントロールのPointメソッドを使用しているのであれば、
MSDNライブラリを見ると画像の1ドット当りのRGB値を返しているわけ ではないようですね。 Pointメソッドの使用例からするとコントロールのWidth、Heightを 使用すればできそうですね。 |