恥ずかしがらずにバンドワゴンに飛び乗る:-)
MathematicaでWaldoを見つけるにはどうすればよいですか とフォローアップ RでWaldoを見つけるには 、新しいpythonユーザーとしてpythonはRよりもこれに適しているようで、MathematicaやMatlabの場合のようにライセンスについて心配する必要はありません。
以下の例のように、単純にストライプを使用するだけでは機能しません。このような難しい例に対応できるように、単純なルールベースのアプローチを作成できれば興味深いでしょう。
[machine-learning]タグを追加しました。元のスレッドでGregory Klopperによって提唱された制限付きボルツマンマシン(RBM)アプローチなどのMLテクニックを使用する必要があると考えているためです。いくつかの Pythonで利用可能なRBMコード がありますが、これは開始するのに適した場所かもしれませんが、そのアプローチには明らかにトレーニングデータが必要です。
2009 IEEE International Workshop on MACHINE LEARNING FOR SIGNAL PROCESSING(MLSP 2009) で Data Analysis Competition:Where's Wally? が開催されました。トレーニングデータは、MATLAB形式で提供されます。そのウェブサイト上のリンクは死んでいるが、データは( Sean McLoone によって取られたアプローチのソースとともに)==同僚が見つかります here (SCMリンクを参照) 。1つの場所から始めるようです。
これが mahotas の実装です
from pylab import imshow
import numpy as np
import mahotas
wally = mahotas.imread('DepartmentStore.jpg')
wfloat = wally.astype(float)
r,g,b = wfloat.transpose((2,0,1))
赤、緑、青のチャネルに分割します。以下の浮動小数点演算を使用する方が良いため、上部で変換します。
w = wfloat.mean(2)
w
は白いチャンネルです。
pattern = np.ones((24,16), float)
for i in xrange(2):
pattern[i::4] = -1
縦軸に+ 1、+ 1、-1、-1のパターンを作成します。ウォリーのシャツです。
v = mahotas.convolve(r-w, pattern)
赤マイナス白で畳み込みます。これはシャツがどこにあるかに強い反応を与えます。
mask = (v == v.max())
mask = mahotas.dilate(mask, np.ones((48,24)))
最大値を探し、それを表示できるように拡張します。次に、領域または関心を除く画像全体をトーンダウンします。
wally -= .8*wally * ~mask[:,:,None]
imshow(wally)
そして私たちは !
テンプレートマッチングを試し、最も類似度が高いものを削除してから、機械学習を使用してさらに絞り込むことができます。これも非常に難しく、テンプレートマッチングの精度により、すべての顔または顔のような画像が返される場合があります。一貫してこれを行うことを希望する場合は、機械学習以上のものが必要になると思います。
多分あなたは問題を二つの小さなものに分けることから始めるべきです:
これらはまだ取り組むべき2つの非常に大きな問題です...
ところで、私はc ++を選択してCVを開きます。これにははるかに適しているようです。
これは不可能ではありませんが、試合の成功例は実際にはないため、非常に困難です。多くの場合、複数の状態があります(この場合、find walleysの図面の例)、複数の画像を画像調整プログラムに送り、それを隠れマルコフモデルとして扱い、推論にビタビアルゴリズムのようなものを使用できます( http://en.wikipedia.org/wiki/Viterbi_algorithm )。
それが私がそれに取り組む方法ですが、あなたがそれに複数の画像を持っていると仮定して、それが学習できるように正しい答えの例を与えることができます。写真が1つしかない場合は、別の方法を使用する必要があると思います。
これが解決策です うまく機能するニューラルネットワークを使用します。
ニューラルネットワークは、Wallyが画像のどこに表示されるかを示す境界ボックスでマークされたいくつかの解決済みの例でトレーニングされます。ネットワークの目標は、トレーニング/検証データから予測されるボックスと実際のボックスの間のエラーを最小限に抑えることです。
上記のネットワークでは、Tensorflow Object Detection APIを使用してトレーニングと予測を実行しています。
私はほとんど常に目に見える2つの主要な機能があることを認識しました:
だから私はそれを次のようにします:
縞模様のシャツを検索:
「シャツ」が複数ある場合、つまり正の相関のクラスタが複数ある場合は、濃い茶色の髪など、他の特徴を検索します。
茶色の髪を検索