0

すべて同じサイズで、すべて黒で書かれた記号の一連の画像があります。それらはすべて、単色の背景、背景色にかなり単純 (+、-、​​x、/、1-9) です。ときどき緑、ときどき青、ときどき赤に変わりますが、常に均一な色です。

これらの画像を、記号が黒で背景が常に白の白黒画像に変換しようとしています。

画像を比較してサインの重複を見つけることができるようにしています。

それでは、PILを使用してグレースケール変換を行う方法。

そして、比較を行うためのより良い方法はありますか?

ありがとう

4

3 に答える 3

1

だから、単純に白黒に変換する

black_and_white = im.convert('1')

ああ、あなたも使うことができますim.getcolors(maxcolors)

http://effbot.org/imagingbook/image.htm - ドキュメントはこちら

画像が実際に 2 色しかない場合は、 を使用するim.getcolors(2)と、このリストに 2 つのアイテムしか表示されず、画像内のそれらを白と黒の色に置き換えることができます。

于 2012-11-11T19:45:17.450 に答える
1

これが私がすることです:

  • 画像の色の中央値を計算します。色が本当に均一である場合は、正しくセグメント化できるはずです (画像をしきい値処理するときに、黒/白の色を反転しないように注意してください)。それ以外の場合は、画像のカラー ヒストグラムに対して 2 平均法アルゴリズムなどのより堅牢な方法を使用します。
  • 符号比較については、2D相互相関を使用します(scipyとopenCVには、そうするための便利な方法がたくさんあります)。いくつかのヒント: 2 つの画像の違いを定量化するにはどうすればよいですか?
于 2012-11-11T20:00:44.293 に答える
1

scipy.ndimageこれらの 2 つの Python ライブラリを参照するとskimage、このような単純な画像比較を簡単に処理できるようになります。
両方のライブラリで何ができるかを簡単に説明します。

>>> from scipy.ndimage import find_objects,label
>>> import scipy.misc          
>>> img=scipy.misc.imread('filename.jpg')  
>>> labeled,number=label(img) # (label) returns the lebeled objects while  
                              # (number) returns the numer ofthe labeled signs  
>>> signs=find_objects(labeled)  #this will extract the signs in your image  
#once you got that,you can simply determine  
# if two images have the same sign using sum simple math-work.  

ただし、上記のコードを使用するには、ラベル メソッドが機能するように背景を黒にする必要があります。skimage

>>> import skimage.morphology.label  
>>> labeled=skimage.morphology.label(img,8,255) #255 for the white background
                                                #in the gray-scale mode  
#after you label the signs you can use the wonderful method  
#`skimag.measure.regionprops` as this method will surely  
# help you decide which two signs are the same.
于 2012-11-14T00:11:19.663 に答える