2009-05-05 14 views
6

これはかなり広い質問です。同一ではないが非常に似ている2つの写真を撮るためにどのツール/ライブラリが存在し、それらの間の具体的な違いを特定するか?ほぼ同じ2枚の写真の違いを調べる

私のガールフレンドが清掃され、友人を飲んで、ロックバンドを演奏している長い週末の前に、金曜日に写真を撮るのが一例です。二日後、私はソファーの二番目の写真を撮ります。照明は同じで、ソファは1ミリメートル移動していない、私は固定された場所で三脚を使用します。

画像の差分を生成するためにどのツールを使用できますか、または差分の3番目のヒートマップ画像を使用できますか? .NET用のツールはありますか?

答えて

1

CodeProjectのAndrew Kirillovのarticleをご覧ください。彼は、コンピュータビジョンライブラリAForge.NETを使用して動作を検出するC#アプリケーションを作成しました。 AForge.NETのWebサイトには、動き検出のための2つのフレームの違いのdiscussionがあります。

5

これは、画像の形式と圧縮に大きく依存します。しかし、一日の終わりに、あなたはおそらく2つのラスタを取り、それらをピクセルごとに比較しています。

Perceptual Image Difference Utilityをご覧ください。

+0

リンクをありがとう、私はそれが私がやっていることの良いジャンプオフポイントであるかどうかを確認するために間違いなく演奏されます。 – STW

1

興味深い質問です。私はあなたを特定のライブラリに紹介することはできませんが、あなたが求めているプロセスは基本的に動き補償の最小のケースです。これは、MPEG(MP4、DIVXなど)ビデオがビデオを非常によく圧縮するために管理する方法です。これらのモーション補償アルゴリズムの実装方法については、MPEGを参照してください。

もう1つ注意してください。 JPEG圧縮はブロックベースの圧縮です。 MPEGが提供するメリットの多くは実際にブロック比較を行うことです。あなたの画像の大部分(背景を言う)がある画像から次の画像まで同じである場合、それらのブロックは変更されません。これは、比較する必要のあるデータ量をすばやく減らす方法です。

+0

これは私が決して考えなかったことですが、偉大な点です – STW

+0

あなたは、前のイメージのコピーから短いクリップを組み立てて、後のイメージをコピーすることさえできます。 MPEGで圧縮して、結果を分析してください;-) – RBerteig

2

通常、ほとんど知覚されない小さな違いをすべて確認する最も明白な方法は、ピクセルデータをXORすることです。照明がわずかに異なっていても、あまりにも多すぎるかもしれません。ピクセルデータの差分(減算)は、違いが微妙であるかどうかによって、探しているものよりも多くなる可能性があります。

+0

私はそれを必ず実行しなければなりません。私のスキルレベルでゼロから開発することができるアプローチのほうがおそらく1つでしょう。 – STW

+1

これらのアプローチを実際にコーディングする前に、レイヤーラスターグラフィックスエディターのレイヤー合成モードを見てみましょう。 Paint.NETは私が考えているものですが、それは基本的なバイナリピクセル演算です。したがって、すべての実装は同じでなければなりません。 – bsneeze

2

開始場所の1つは、IMなどの豊富な画像処理ライブラリです。 IMlabツールを使って対話的に演算子を操作したり、CやC++から直接呼び出したり、本当にまともなLuaバインディングを使ってLuaからそれを動かすことができます。これは、ビットマップ上での幅広い操作と、拡張可能なファイル形式のライブラリをサポートします。

意図的に何も移動していない場合でも、フレーム間で良好なサブピクセル品質のアラインメントを得るには、SIFTなどのアルゴリズムを使用することをお勧めします。 を望んでいない限り、カメラは固定されたものとして扱われ、ソファの動きも検出されます。

+0

それはまさに私が恐れることと望んでいた答えの両方です。私はCやC++やLuaの開発者ではありませんが、これは私の足/胴体/頭部/シュノーケルを濡らすための楽しいプロジェクトのようです。私はおそらく私の頭の上にあるだろうが、私はそれがシュノーケルに言及した理由だと思う。 – STW

+1

あなたが泳いでいるなら、あなたはそのコンパニオン・ライブラリーのCDとIUPを見たいと思うだろう。 CDはビットマップ(またはスクリーン)で描画するための汎用キャンバスを提供し、IUPは移植可能なUIフレームワークを提供します。リンクはIMLabページにあります。公式のメーリングリスト、ユーザーウィキ、または必要なときにあの重要なシュノーケルとして役立つタグ付きの "lua"には、www.lua.orgにたくさんのLuaヘルプがあります。 ;-) – RBerteig

2

私の会社が作成するツールキット(DotImage)を使用して、この無料の.NETアプリケーションを作成しました。それは非常に単純なアルゴリズムを持っていますが、コードを演奏したい場合はオープンソースです.DotImageのコピーを購入したくない場合は、アルゴリズムを.NET Imageクラスに適合させることができます。

http://www.atalasoft.com/cs/blogs/31appsin31days/archive/2008/05/13/image-difference-utility.aspx

0

だけ使用します。新しいイメージングクラスを作成し、新しいビットマップ()x 2を作成し、各ピクセルのR & G & Bの値を確認すると、差分を求めるときにA(アルファ/透明度)値を見ることもできます。

また、getPixel(y、x)メソッドを使用すると非常に遅くなる可能性があります。イメージ全体(あまりエレガントではありません)を取得する別の方法があります。または類似の何か、画像/ビットマップのクラスを見て&彼らは本当にあなたが必要なすべてのものを読むいくつかのtutes &あなたがしなければ、第三者に行くのは難しいです。

+0

ps:もっとリソースが必要な場合は私に電子メールを送ってください/このヘルプでは、私はこのクラスで私の人生の2年間を過ごしました:) –

関連する問題