2016-09-02 3 views
0

Я реализую скользящее окно в python 2.7, openCV версии 3, используя sklearn, skimage, чтобы применить детектор HOG для локализации объекта.Python OpenCV Скользящее окно Обнаружение объекта

Установка 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

Update: Пробовал заполняется нулями, чтобы получить тот же массив длины, но что останавливает предсказатель от работы (который работает отлично, если я set fd = hog (image .. вместо окна. Также попытался изменить пиксели на ячейку и ячейки на блок, например * 2. Но тогда вы получите сообщение об ошибке слишком много значений для распаковки. Поэтому подумайте, что они взяты из и не может быть изменено позже. –

+0

Обновление: Пробовал менять пиксели на ячейку снова, и это действительно работает, но проблема заключается в том, чтобы сопоставить полученную длину вектора wi что вам нужно. В моем случае обученная длина - это что-то вроде 574924. Кажется, что изменение пикселей на ячейку или ячейки на блок пропорционально размеру окна: размер изображения автоматически также дает вам решение. –

ответ

1

Я думаю, что у меня есть ответ на этот вопрос:

Просто натренировать изображения тех же размеров, как размер окна. Может показаться, что вы теряете данные, но затем проверяете более крупное изображение. Чтобы это хорошо работало, целевой объект должен соответствовать размеру окна.

Итак, я тренируюсь по 270x200, затем сканирую окно 270x200, скажем, 2.7K X 2K (такое же соотношение сторон).

как это работает, для кого-то, кто запутался :)

Фред

Смежные вопросы