4

私は中国の系図からの画像をいくつか持っていますが、それらをプログラムで分類できるようにしたいと思います。一般的に、一方のタイプの画像は主に行ごとのテキストを含み、もう一方のタイプはグリッドまたはチャート形式である場合があります。

写真の例

質問:(比較的)簡単な方法はありますか?Pythonの経験はありますが、画像処理の知識はほとんどありません。他のリソースへの方向性も高く評価されています。

ありがとう!

4

2 に答える 2

3

グリッド線の少なくとも一部が正確にまたはほぼ正確に垂直であると仮定すると、かなり単純なアプローチが機能する可能性があります。

PILを使用して、画像内のピクセルの半分以上がしきい値よりも暗いすべての列を検索しました。

コード

import Image, ImageDraw # PIL modules

withlines = Image.open('withgrid.jpg')
nolines   = Image.open('nogrid.jpg')

def findlines(image):
    w,h, = image.size
    s = w*h
    im = image.point(lambda i: 255 * (i < 60))   # threshold
    d = im.getdata()      # faster than per-pixel operations

    linecolumns = []

    for col in range(w):
        black = sum( (d[x] for x in range(col, s, w)) )//255
        if black > 450:
            linecolumns += [col]

    # return an image showing the detected lines
    im2 = image.convert('RGB')
    draw = ImageDraw.Draw(im2)        
    for col in linecolumns:
        draw.line( (col,0,col,h-1), fill='#f00', width = 1)

    return im2

findlines(withlines).show()
findlines(nolines).show()

結果

説明のために検出された垂直線を赤で表示

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

ご覧のとおり、4本のグリッド線が検出され、本の左側と右側、および中央を無視するように処理されているため、目的のタイプで誤検知が発生することはありません。

これは、上記のコードを使用して黒い柱を検出し、端または中央に近い柱を破棄できることを意味します。黒い柱が残っている場合は、それを「その他の」望ましくないクラスの画像として分類します。

于 2012-10-30T16:51:22.683 に答える
0

AFAIK、これを解決する簡単な方法はありません。これらの種類の画像を分類するには、かなりの量の画像処理と基本的な機械学習が必要になります(100%成功しない場合でも)

別の注意:

これは機械学習の手法を使用するだけで解決できますが、最初にいくつかの画像処理手法を探し始めて、画像を両方の画像に適切な違いがある形式に変換することをお勧めします。このためには、fftについて読み始めるのが最善です。その後、いくつかのデジタル画像処理技術を見てみましょう。これらを十分に理解していると感じたら、パターン認識について読むことができます。

これは提案されたアプローチの1つにすぎませんが、これを実現する方法は他にもあります。

于 2012-10-30T15:58:53.980 に答える