4

タスクはドキュメントのイメージを撮り、別の 'セクション'を囲む直線を利用してイメージを別のドキュメントに分割してさらに解析することです。異なる 'セクション'のサイズは、ページごとに完全に可変です(数千ページに対応しています)。文書がレイアウトされているかの文書の画像上のエッジを検出し、セクションを別々の画像にカットするにはどうすればよいですか?

例:

Example Doc

画像解析/操作が私には全く新しいものであるここで、これらのイメージの1がどのように見えるかの画像です。これまで私はScikit画像のエッジ検出アルゴリズムを使って 'ボックス'を見つけようとしましたが、それらの座標を使って画像をカットしたいと考えていました。しかし、私が試した2つのアルゴリズム(Canny、Hough)は、高感度ではテキストの行を「エッジ」としてピックアップし、低感度では必要な行をピックアップしません。ボックスを自分で検出するためにカスタムと低レベルを書くことができますが、これは解決された問題であると仮定しなければなりません。

私のアプローチは適切な方向に向いていますか?ありがとうございました!

+0

はあなたにもいくつかの実際の入力画像を持っていますか?あなたが示すものは、その概念を説明するのに便利です。実際には現実のインプットで作業する必要があります。 –

+1

実際の入力画像を追加しましたが、解析対象の文書はさまざまなソースからのものです。フォーマット全体のフォーマットは常に似ていると予想されますが、ラインサイズ、言語、テキストフォーマットなどは変更される傾向があります。 – migsvult

+0

これは、スキャナやカメラで取得した画像ではなく、コンピュータで生成された画像のようです。 (どのようにすべての線が完全に水平/垂直であるかで判断する)それはすべての入力がどのようになるのだろうか?もしそうなら、それは間違いなくタスクを容易にします。 –

答えて

1

あなたはどのOpenCVの答えを取得していないようですので、私はちょうど、コマンドラインでのターミナルでImageMagickを、と試していました。 ImageMagickはほとんどのLinuxディストリビューションにインストールされており、macOSとWindowsでは無料で利用できます。このテクニックはかなり簡単にOpenCVに適応していますので、それがあなたのために働くならば、それを移植することができます。

私の最初のステップは、スキャンアーチファクトをノイズから取り除くために5x5ボックスフィルタとスレッショルドを80%にすることでした(おそらく、私はモフォロジーの使用を計画していたためですが、最後にはしませんでした)。

convert news.jpg -depth 16 -statistic mean 5x5 -threshold 80% -negate z.png 

enter image description here

私はその後"連結成分分析"を通って、(2000ピクセルの下で)あまりにも小さい面積ですべてのブロブを破棄することを実行しました:

​​

出力

Objects (id: bounding-box centroid area mean-color): 
    110: 1254x723+59+174 686.3,536.0 901824 srgb(0,0,0) 
    2328: 935x723+59+910 526.0,1271.0 676005 srgb(0,0,0) 
    0: 1370x1692+0+0 685.2,712.7 399651 srgb(0,0,0) 
    2329: 303x722+1007+911 1158.0,1271.5 218766 srgb(0,0,0) 
    25: 1262x40+54+121 685.2,140.5 49820 srgb(255,255,255) 
    109: 1265x735+54+168 708.3,535.0 20601 srgb(255,255,255) 
    1: 1274x64+48+48 675.9,54.5 16825 srgb(255,255,255) 
    2326: 945x733+54+905 526.0,1271.0 16660 srgb(255,255,255) 
    2327: 312x732+1003+906 1169.9,1271.5 9606 srgb(255,255,255) <--- THIS ONE 
    421: 403x15+328+342 528.6,350.1 4816 srgb(255,255,255) 
    7: 141x23+614+74 685.5,85.2 2831 srgb(255,255,255) 

フィールドは最初の行に表示されますが、興味深いものは2番目(ブロックの形状)と4番目のフィールド(ブロブ領域)です。あなたが見ることができるように、11行がありますので、画像に11個のブロブが見つかりました。第2フィールドのAxB+C+Dは、幅がAピクセル、長さがBピクセル、左上角がCピクセル、画像の左端がDピクセル、下から上に向かって小さいピクセルを意味します。

2327: 312x732+1003+906を開始し、その1以上の四角形を描画している、のは、私は矢印でマークされている1を見てみましょう:

convert news.jpg -fill "rgba(255,0,0,0.5)" -draw "rectangle 1003,906 1315,1638" oneArticle.png 

enter image description here

あなたは新しいにその記事をトリミングしたい場合画像:

convert news.jpg -crop 312x732+1003+906 article.jpg 

enter image description here

我々は他のすべてのボックスに描く場合は、我々が得る:

enter image description here

+0

いい仕事です。 OpenCVでは、小さなブロブを、それらの階層に基づいて輪郭を見つけることによって破棄することができます。同様の結果が得られます。 –

関連する問題