2016-09-02 28 views
0

私は、sklearn、skimageを使用してpython 2.7、openCV version 3でスライディングウィンドウを実装しています.HOG検出器を適用してオブジェクトをローカライズします。Python OpenCV Sliding Windowオブジェクト検出

HOGセットアップがうまく機能します。私がスライディングウィンドウを適用しない場合は、すべて正常に動作します。

スライディングウィンドウのサイズは128x128で、特徴ベクトルの長さは15876です。トレーニングセットのサイズは579474ですが、800x600画像でトレーニングされています。

これを明確な方法で直接処理する質問は何もありませんでしたが、実際には私は困惑しています。私はこの問題に取り組む多くの論文も見ていない。

clf = joblib.load(model_path) 
# load the image and define the window width and height 
image = imread(args["image"], flatten=True) 
(winW, winH) = (128, 128) 

# loop over the image pyramid 
for resized in pyramid(image, scale=1.5): 
    # loop over the sliding window for each layer of the pyramid 
    for (x, y, window) in sliding_window(resized, stepSize=32, windowSize=(winW, winH)): 
     # if the window does not meet our desired window size, ignore it 
     if window.shape[0] != winH or window.shape[1] != winW: 
      continue 

     fd = hog(window, orientations, pixels_per_cell, cells_per_block, visualize, normalize) 
     pred = clf.predict(fd) 
     if pred == 1: 
      print("found, found, found, found, found") 

私はそれを描く場合はスライディングウィンドウは細かい視覚化する、それだけで、予測関数です:

私のコードはこれです。ウィンドウフィーチャをトレーニングフィーチャと比較する方法

ありがとうございました!

敬具、

フレッド

+0

更新:同じ長さの配列を取得するためにゼロで試してみましたパディングが、それは、私ならば正常に動作され(作業から予測因子を停止set fd = hog(image ..ウィンドウの代わりにimage .. また、1セルあたりのピクセル数や1ブロックあたりのセル数などを変更しようとしました。* 2しかし、アンパックする値が多すぎるというエラーが表示されます。ウィンドウをあらかじめ変更しておくことはできません。後で変更することはできません。 –

+0

更新:セルごとにピクセルを変更しようとしましたが、動作しますが、問題は結果のベクトル長wiあなたが必要とするもの。私の場合、訓練された長さは574924のようなものです。ウィンドウサイズに比例して1つのセルまたはピクセルあたりのピクセル数を変更すると、イメージサイズが自動的に解決されます。 –

答えて

1

私はこの答えがあると思う:

だけでウィンドウサイズと同じ大きさの画像を訓練します。あなたがデータを失っているように見えるかもしれませんが、大きな画像でテストしてください。これがうまく動作するためには、前記対象オブジェクトはウィンドウサイズに収まる必要がある。

私は270x200でトレーニングをしており、次に270x200のウィンドウを2.7K X 2K(同じアスペクト比)以上でスキャンします。

それは混乱している他の誰のために、このように動作します:)

フレッド