サイズやパターンサイズに関係なく、.Net C#を使用して、2つの画像を比較し、画像内のパターンを認識するにはどうすればよいですか?また、画像処理からこれを行うために使用されるアルゴリズムはどれですか?
8 に答える
スケール不変特徴変換、テンプレートマッチング、およびハフ変換を参照してください。すばやく不正確な推測は、色のヒストグラムを作成して比較することかもしれません。画像が十分に複雑な場合は、複数の画像セットを区別できる場合があります。
問題を簡単にするために、R、G、およびBに3つのバケットがあると仮定します。完全に白い画像には(R、G、B)に(100%、100%、100%)があります。完全に赤い画像は(100%、0%、0%)になります。複雑な画像には、(23%、53%、34%)のようなものがあります。その(R、G、B)空間内のポイント間の距離をとると、どちらが「近い」かを比較できます。
私は画像認識の専門家ではありません。C# で記述され、画像認識を行うAForgeライブラリに出くわしたことがあります。多分それは助けることができます...
画像マッチングと画像認識の技術は大きく異なる場合があります。最初のタスクでは、SIFT を利用するか、RGB などに基づいて独自の距離関数を手作りすることができます。認識のために、使用できる膨大な量の機械学習手法があり、より一般的な手法には、Adaboost、SVM、およびその他のハイブリッド ニューラル ネットワーク手法が含まれます。この分野には関連する研究論文が不足しているわけではありません。グーグルはあなたの友達です。
パターン認識を検索します。名前以外はほとんど知りませんでした。
警告:それがあなたが望むものであるならば、それは知られている最も難しい「現実世界」のプログラミング問題の1つです。
ジンマラ、あなたはここで非常に広範な質問をしました。これらのトピックに関する文献には、文字通り何千もの論文があります。正解はなく、画像の比較には多くの未解決の問題があるため、単純な解決策でうまくいくことは期待できないでしょう (状況が非常に単純で制約されている場合を除きます)。
絞り込めば、お役に立てるかもしれません。
あなたはこれを探しているかもしれません
System.Drawing.Bitmap sourceImage = (Bitmap)Bitmap.FromFile(@"C:\SavedBMPs\1.jpg"); System.Drawing.Bitmap template = (Bitmap)Bitmap.FromFile(@"C:\SavedBMPs\2.jpg"); // テンプレート マッチング アルゴリズムのインスタンスを作成 // (類似度のしきい値を 92.5% に設定)
ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0.921f);
// find all matchings with specified above similarity
TemplateMatch[] matchings = tm.ProcessImage(sourceImage, template);
// highlight found matchings
BitmapData data = sourceImage.LockBits(
new Rectangle(0, 0, sourceImage.Width, sourceImage.Height),
ImageLockMode.ReadWrite, sourceImage.PixelFormat);
foreach (TemplateMatch m in matchings)
{
Drawing.Rectangle(data, m.Rectangle, Color.White);
MessageBox.Show(m.Rectangle.Location.ToString());
// do something else with matching
}
sourceImage.UnlockBits(data);
サイズが 50x50 の 1024x768 の画像を処理するのに約 6 秒かかることを警告します。enter code here
テンプレート マッチング、EmguCV、OpendotnetCV、Aforge.net でこれを行うことができます
スケール不変特徴変換(SIFT)はあなたが探しているものかもしれません。ただし、理解または実装するのは簡単ではありません。