6

私は過去2日間投稿と例を調べてきましたが、私が試し、広範囲にテストしたすべてのスニペットは、少なくとも私の目的ではまったく役に立たないことが証明されています。

私がやりたいのは、壁や紙から撮影された黒いベクトル記号(スキャンが不十分な画像に似た品質)を比較し、同じまたは類似の記号の電子版(ローカルに保存され、写真と比較して)。添付の2つの画像をご覧ください。最初のきれいな画像(参照画像)はシンボルのデータベースバージョンであり、2番目の画像は私がiPadで写真を撮った一枚の紙に描いたくだらない絵です。

参照画像

テスト画像

手順を次のようにしたかったのです。

  • 2つの画像が読み込まれ、ここで見つけたこのトリミングアルゴリズムの修正バージョンを使用してトリミングされます:PILを使用した画像のトリミング。「しきい値」の値が50、「自明性」の値が20(リンクされたスクリプトのパラメーター)の場合、これらの画像に良い結果が得られることがわかりました。
  • 次に、画像のサイズが同じサイズに変更され、比較されます

比較のために、私はさまざまな提案されたアプローチを試しましたが、これまでのところ結果はひどいものです。テストした画像よりもランダムな画像で実際に良い比較結果を得ることができます。実際の画像、それらのエッジ(ImageFilter.CONTOURまたはImageFilter.FIND_EDGESの「filter」関数で作成)、ピクセルベースの比較に基づいてRMS差の比較を試しましたが、これまでのところオンラインで見つけたものはありません(絶え間ないグーグルにもかかわらず)またはここStackOverflowで私にまともな結果を与えました。

問題はテスト画像のノイズの多い背景にあると思いますが、それを証明することはできませんでした。これらの画像のエッジからベクトルの輪郭を取得し、それらを単なる画像としてだけでなく画像ベクトルとして比較する方法があるかどうか誰かが知っていますか?私のくだらない絵にもかかわらず、これらの2つの画像はかなり類似しており、それから良い比較を得ることができるはずです。

4

5 に答える 5

5

より良い応答を得るには、アプリケーションの範囲をより適切に制限する必要があります。これがあなたを助けるかもしれない何かです。あなたの「くだらない描画」入力は、それが強いエッジを持っているという意味であなたが提供したものと常に似ていると思います、そしてそれに存在する色は無関係です。簡単な方法で問題を解決する(または、より良い方法で解決策に近づく)には、スケール不変の記述子の観点から両方の画像を記述する必要があります。

私の見解:両方の画像を2値化し、両方の内部の連結成分(CC)の数を数え、無関係なサイズのCCを破棄します(中央値から遠すぎる、平均、標準偏差に関連するなど、あなたが決定します)。画像を他の入力からより適切に区別するために、2番目のステップを補足することもできます。つまり、アプローチを強力にするほど、より多くの判別記述子が必要になります。ある時点で、SVMやその他の機械学習手法の使用を検討することもできます。

したがって、2値化のステップ:形態学的勾配を実行し、弱い勾配を破棄します。入力が投稿されたものと類似している場合、これは非常に簡単です。強度60のしきい値で得られるものは次のとおりです(入力が[0、255]の範囲にあると仮定しています)。

ここに画像の説明を入力してください ここに画像の説明を入力してください

私はすぐに90までの範囲のしきい値を試しましたが、それらはすべてこれらの画像で機能しました。これらの切り抜きは簡単で、背景とオブジェクトを塗りつぶすこともできます。

ここに画像の説明を入力してください ここに画像の説明を入力してください

これで、連結成分を白で抽出し、それらの分析を行うことができます。この場合、最も簡単なことはそれらを数えることです。これらの入力では、「完璧な」画像で12、「悪い」画像で14が得られます。しかし、「悪い」ものには、サイズ1の2つのコンポーネントがあり(それぞれに1つのピクセルしかない)、これらは簡単に削除されます。接続されたコンポーネントを比較する方法は他にもたくさんありますが、これで始められることを願っています。これらのタスクのコードが必要な場合は、それを含めることができます。

于 2012-12-01T21:15:39.830 に答える
1

PILを使用してこれを具体的に行う方法はわかりませんが、自己学習に役立ついくつかの優れた実例を紹介できます(これは画像処理にとって重要な作業です!)。

良い例はDeTeXifyです。これは、マウスで描画されたシンボルを既知のシンボルの大規模なライブラリ(この場合、植字プログラムLaTeXで作成できるシンボル)と照合するプログラムです。フロントエンドとバックエンドの両方のソースコードが利用可能です。

もう1つの例は、ShapeCatcherです。

...いわゆる「形状コンテキスト」を使用して、2つの形状間の類似点を見つけます。形状間の類似性の概念を記述する強力な数学的方法である形状コンテキストは、SergeBelongieとJitendraMalikによって最初に提案された機能記述子です。

形状コンテキストに関する無料で入手可能な研究論文は、Berkeleyサイトにあります。

于 2012-11-30T15:01:12.627 に答える
0

線をグラフのエッジとして、交差点をノードとして視覚化すると、たとえ1つが醜くても、コンピューターはそれらが同じ符号であることがわかるはずです。レベルで遊んで白と黒を取得してから、隣接する黒いスポットを分析してみてください。

于 2012-11-30T14:11:58.173 に答える
0

SIFTと呼ばれる方法があります。OpenCVはそれを使用し、PythonOpenCVにも実装があります。実装はOpenCVのSURFであり、さまざまな質問や例を見つけることができ、うまく機能します。この質問には例があります。

(追加の参照としてこの回答を投稿する)

于 2012-12-03T11:05:59.093 に答える
0

私はこれがすでに答えられていることを知っています、しかし多分誰かがまだこれを見つけるでしょう。

受け入れられた答えとは異なり、私は2値化を実行するために勾配を処理せず、代わりに大津の2値化を調べます。これは、すべての画像に非常に暗い領域と非常に明るい領域のみが含まれている場合にうまく機能するはずです。これは、画像のヒストグラムで2つのピーク(1つはすべての明るいピクセル、もう1つはすべての暗いピクセル)を探し、次に2つのピークの間。

于 2017-06-13T18:28:04.943 に答える