2012-03-10 18 views
1

私は毎日の写真を含む数百万の画像を持っています。私はいくつかの特定の色が存在するもの、例えば、赤とオレンジを選び、形やオブジェクトを無視する方法を見つけようとしています。サイズは重要です(例:少なくとも50x50ピクセル)。Pythonの画像スポット検出

これを達成するための効率的かつ軽量なライブラリはありますか?私はOpenCVがあることを知っていて、それはかなり強力ですが、それはこの仕事のためにあまりにも肥大化するでしょうか?それは比較的簡単な作業ですよね?

おかげ

答えて

1

がライブラリですが、あなたは、単純なしきい値のセグメンテーションアルゴリズムを使用してセグメントは、これらの分野できれば私は知りません。言って、赤い斑点を探したい。画像から赤のチャンネルを抽出し、しきい値を選択し、しきい値未満のピクセルを除去します。結果のピクセルはあなたのスポットです。適切なしきい値を見つけるには、画像の赤色チャンネルのヒストグラムを作成し、そこに谷を見つけることができます。谷の最下点はあなたが使うことができる閾値です。複数の谷がある場合は、1つの谷と2つの山があるまでヒストグラムを滑らかにします。ガウス関数を使用してヒストグラムを平滑化することができます。残りのピクセルからスポットを見つけるには、ラベリングアルゴリズムを使用して、ラベリングアルゴリズムが生成したグラフ内の接続されたコンポーネントを探します。はい、それは簡単です。 :)

2

確かにOpenCVでもこれを行うことができますが、Python Imaging Library PILを使用して、最小サイズでイメージセットの小さなブロックをトリミングするイメージを反復処理する関数を作成し、マッチング基準に対する耐性を示す。 (未テスト擬似コード)の線に沿って何か:

import Image 

im = Image.open("test_picture.png") 
for y in xrange(image_height - block_height): 
    for x in xrange(image_width - block_width): 
     block = im.crop(x, y, x + block_width, y + block_height) 
     if colour_test(block): # test for match 
      return True 

その非常に簡単block.getcolors()を使用して画像の色域情報を取得するので、あなたは簡単にcolour_test()関数を書くことができます。

+3

OpenCVとPILの代わりに、[Mahotasパッケージ](http://luispedro.org/software/mahotas)があります。私はコンピュータビジョンの開業医であり、個人的にはPIL、scikits.image、OpenCVは嫌いですが、それぞれには特定のことがあります。 Mahotasは純粋にscipy.ndimageデータ型に基づいており、多くの状況で便利です。私が見つけた唯一の問題は、PNG画像を扱うときに追加のライブラリ[PyPNG](http://code.google.com/p/pypng/)が必要になることがありました。 – ely

+0

@EMS:なぜPyPNGが必要ですか? PNGがマホタによって正しく開かれていないのですか?私はちょうどマホタがPNGを扱う方法を変えました(昨日リリースされたバージョン以来、それはimreadパッケージを使用しています)。うまくいかない画像がある場合は、私にメールを送ってください。 Tx – luispedro

+1

@EMS:私はマホタを書いた、btw – luispedro

関連する問題