[解決済み] 写真に写った紙の角を検出するアルゴリズム
質問
写真に写っている請求書や領収書、紙の角などを検出するのに最適な方法は何ですか?これは、OCR の前に、その後の遠近感の補正に使用するものです。
私の現在のアプローチでは
RGB > Gray > Canny Edge Detection with thresholding > Dilate(1) > Remove small objects(6) > clear boarder objects > pick larges blog based on Convex Area. > [corner detection - Not implemented].
この種のセグメンテーションを処理するための、より堅牢な「インテリジェント」/統計的アプローチがあるに違いないと思わずにはいられません。多くの学習例はありませんが、おそらく 100 枚の画像を集めることができるでしょう。
より広いコンテキスト。
私はプロトタイプを作成するためにmatlabを使用しており、OpenCVとTesserect-OCRでシステムを実装することを計画しています。これは、この特定のアプリケーションのために解決しなければならない、いくつかの画像処理問題の最初のものです。そのため、私は自分自身のソリューションをロールバックし、画像処理アルゴリズムに再び慣れ親しみたいと考えています。
私がアルゴリズムに処理させたいいくつかのサンプル画像はここにあります。もし、この課題に取り組みたいのであれば、大きな画像は次の場所にあります。 http://madteckhead.com/tmp
(ソース
madteckhead.com
)
(ソース
madteckhead.com
)
(ソース
madteckhead.com
)
(ソース
madteckhead.com
)
最良の場合、これは与える。
(ソース
madteckhead.com
)
(ソース
madteckhead.com
)
(ソース
madteckhead.com
)
しかし、他のケースでは簡単に失敗します。
(ソース
madteckhead.com
)
(ソース
madteckhead.com
)
(ソース
madteckhead.com
)
たくさんの素晴らしいアイデアを事前にありがとうございました SOが大好きです!
EDIT: ハフ変換の進捗状況
Q: コーナーを見つけるためにハフ線をクラスタリングするアルゴリズムは何でしょうか? 回答からのアドバイスに従って、私はハフ変換を使用し、線を選び、それらをフィルタリングすることができました。私の現在のアプローチは、かなり粗雑なものです。私は、インボイスが常に画像と15度以上ずれていると仮定しています。この場合、線については妥当な結果が得られます(下記参照)。しかし、角を推定するために線(または票)をクラスタリングする適切なアルゴリズムがまったくわかりません。ハフ線は連続的ではありません。また、ノイズの多い画像では、平行線が存在する可能性があるので、何らかの形で、線の原点からの距離の測定基準が必要です。何かアイデアはありますか?
(ソース
madteckhead.com
)
どのように解決するのですか?
私は、今年の初めにこれに取り組んでいたマーティンの友人です。これは私の初めてのコーディング プロジェクトで、ちょっと急いでいたので、コードにはいくつかの...解読が必要です...。 私は、あなたがすでにやっていることを見てから、いくつかのヒントを与え、そして明日の休日に私のコードを整理します。
最初のヒント
OpenCV
と
python
は素晴らしいので、できるだけ早くそちらに移動してください。
小さなオブジェクトやノイズを除去する代わりに,canny の拘束を下げて,より多くのエッジを受け入れるようにし,最大の閉じた輪郭を見つけます(OpenCV では
findcontour()
を簡単なパラメータで指定します.
CV_RETR_LIST
白い紙の上にある場合はまだ苦労するかもしれませんが、間違いなく最良の結果を提供していました。
については
Houghline2()
トランスフォームでは
CV_HOUGH_STANDARD
に対して
CV_HOUGH_PROBABILISTIC
を与えると
rho
と
テータ
の値で、極座標で線を定義し、それに対してある許容範囲内で線をグループ化することができます。
私のグループ化はルックアップ テーブルとして機能し、ハフ変換から出力された各線に対して、ρとθのペアが得られます。これらの値がテーブル内の値のペアの 5% 以内であれば、それらは破棄され、その 5% 以外であれば、テーブルに新しいエントリが追加されました。
そうすると、平行線または線間の距離の分析をより簡単に行うことができます。
お役に立てれば幸いです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン