6

そのため、私はしばしば、インテリジェントでないCanon多機能で巨大な両面スキャンジョブを実行します。これにより、JPEGの巨大なフォルダが残ります。PILを使用して画像のフォルダーを分析し、空白ページのスキャンを検出して削除のフラグを立てることを検討するのは非常識ですか?

フォルダのクロールとフラグ付けの部分を除外すると、次のようになります。

  • 画像がグレースケールであるかどうかを確認してください。これは不確実であると推定されます。
  • もしそうなら、色合いの支配的な範囲(背景色)を検出します。
  • そうでない場合は、明るい灰色に限定して、支配的な範囲の色合いを検出します。
  • 画像全体の何パーセントが上記の色合いで構成されているかを判断します。
  • タイプ、書き込み、または画像を含むページを適切に検出するしきい値を見つけてください。
  • おそらく、しきい値の精度を上げるために、一度に画像のフラグメントをテストします。

これは一種のエッジケースであることは知っていますが、PILの経験がある人なら誰でもいくつかの指針を貸すことができますか?

4

3 に答える 3

13

これは、マホタミルクを使用した代替ソリューションです。

  1. まず、2つのディレクトリを作成positives/negatives/ます。ここで、いくつかの例を手動で選択します。
  2. unlabeled/残りのデータはディレクトリにあると仮定します
  3. ポジティブとネガティブのすべての画像の特徴を計算する
  4. 分類器を学ぶ
  5. ラベルのない画像でその分類子を使用する

以下のコードでは、jugを使用して複数のプロセッサで実行できるようにしていますが、言及されているすべての行を削除してもコードは機能しますTaskGenerator

from glob import glob
import mahotas
import mahotas.features
import milk
from jug import TaskGenerator


@TaskGenerator
def features_for(imname):
    img = mahotas.imread(imname)
    return mahotas.features.haralick(img).mean(0)

@TaskGenerator
def learn_model(features, labels):
    learner = milk.defaultclassifier()
    return learner.train(features, labels)

@TaskGenerator
def classify(model, features):
     return model.apply(features)

positives = glob('positives/*.jpg')
negatives = glob('negatives/*.jpg')
unlabeled = glob('unlabeled/*.jpg')


features = map(features_for, negatives + positives)
labels = [0] * len(negatives) + [1] * len(positives)

model = learn_model(features, labels)

labeled = [classify(model, features_for(u)) for u in unlabeled]

これはテクスチャ機能を使用します。これはおそらく十分ですが、必要にmahotas.features応じて他の機能を試すことができます(または試してみてくださいmahotas.surf。ただし、さらに複雑になります)。一般に、スキャンが非常に制御されていない限り、探している種類のハードしきい値で分類を行うのは難しいことがわかりました。

于 2011-03-31T20:14:22.183 に答える
5

最初の試行として、画像フォルダーをファイル サイズで並べ替えます。1 つのドキュメントからのすべてのスキャンが同じ解像度である場合、白紙のページは、白紙でないページよりもファイルが確実に小さくなります。

スキャンしているページ数はわかりませんが、数が十分に少ない場合は、これで簡単に修正できます。

于 2011-03-25T09:30:23.520 に答える
3

考慮すべきいくつかの非 PIL 固有の提案:

印刷物または文書のスキャンには、コントラストの高いシャープなエッジがたくさんあります。メジアン フィルター (ノイズを減らすため) のようなものと、それに続くある種の単純なエッジ検出は、空白ページから実際のコンテンツを区別するのにうまく機能する可能性があります。

一度にフラグメントをテストすることは、精度が向上する可能性があるだけでなく、多くのページで早期にあきらめるのに役立つ可能性があるため便利です。おそらくほとんどのスキャンは白紙ではないので、通常は白紙でないページを白紙でないものとして識別する単純なチェックから始める必要があります。ページが空白である可能性があると表示されている場合にのみ、さらに詳しく調べる必要があります。

イルミネーションまたはページ自体が不均一な場合は、image = image-filter(image)どこfilterで何らかの非常に広範な平滑化を行うかのようなことから始めたいと思うかもしれません。これにより、支配的な色合いを特定する必要性が減り、支配的な色合いがページ全体で均一でない場合に対処できます。

于 2011-03-24T23:14:35.367 に答える