画像の差異?差分?を求める方法について

解決


マンタロウ  2006-09-27 12:45:28  No: 23397  IP: 192.*.*.*

画像のマッチング処理というのでしょうか?二枚の画像を重ね合わせた時に
その二枚で違う部分を検出するための処理方法が探しても差異や差分といった
言葉が適切でないためかなかなか見つからないのですが
どこか参考になるDelphiのサイトやコンポーネントなどありますでしょうか?
よろしくお願いします

編集 削除
もにゃ  2006-09-27 15:01:30  No: 23398  IP: 192.*.*.*

画像の間違い探しをするようなもので、単純に見た目で判断するのであれば
Scanlineを使って1ピクセルずつ引き算するだけです。
より高速に行い結果だけ見れればよいなら、BitBltで引き算する方法とかもあります。

編集 削除
マンタロウ  2006-09-27 16:36:38  No: 23399  IP: 192.*.*.*

ありがとうございます
BitBlt関連で検索してみたのですが、関係するのが出てきません。
どのようなキーワードで検索すればいいでしょうか?

編集 削除
カフェ  2006-09-27 17:07:32  No: 23400  IP: 192.*.*.*

http://www.sm.rim.or.jp/~shishido/pdif.html

ここのページに比較方法の1例が載っています。
このページは1ファイル内で上下左右との色の差を見ていますが、
これを2ファイルの同位置ピクセルで比較するようにすれば、どれくらい
差があるのか計上できるのではないでしょうか?

2つのファイルの大きさが違っている場合は

http://www.sm.rim.or.jp/~shishido/fnckakudai.html

を参考に両ファイル共にやや小さく、同じサイズにしてから比べて見ると
良いのではないでしょうか?

趣旨が違ってましたらごめんなさい。

編集 削除
もにゃ  2006-09-27 17:18:22  No: 23401  IP: 192.*.*.*

この程度の技術だと、サンプルとして公開する人は居ないんでしょう。
testA,testB.bmpはサイズが同じで、元画像が同じ。
testBにはtestAに落書きをして別名保存したもの。

procedure TForm1.Button1Click(Sender: TObject);
var
  bmpA:TBitmap;
begin
  bmpA:=TBitmap.Create;
  bmpA.LoadFromFile('testA.bmp');
  BitBlt(Canvas.Handle,0,0,bmpA.Width,bmpA.Height,bmpA.Canvas.Handle,0,0,SRCCOPY);
  bmpA.LoadFromFile('testB.bmp');
  BitBlt(Canvas.Handle,0,0,bmpA.Width,bmpA.Height,bmpA.Canvas.Handle,0,0,SRCINVERT);
  bmpA.Free;
end;

編集 削除
マンタロウ  2006-09-27 17:51:03  No: 23402  IP: 192.*.*.*

もにゃさん、カフェさんありがとうございます。

>この程度の技術だと、サンプルとして公開する人は居ないんでしょう
この程度の技術だとしても知らないとすごく難しく考えてしまいますね。

助かりました。ありがとうございます^^
お二人に感謝します^^

編集 削除