Перекрывающиеся скользящие окна поверх изображения

Моя цель состоит в том, чтобы скользящее окно скользило по изображению с перекрывающимися шагами, чтобы я мог запускать классификатор в каждом окне и определять, есть ли там интересный объект.

Для этого мне нужно убедиться, что

  • окна, которые я извлекаю для классификации, действительно делают по всему изображению, и
  • возьмите верхнюю и левую координаты каждого скользящего окна на исходном изображении.

Следуя отсюда: Скользящее окно - как получить расположение окна на изображении?

и на основе этого кода для раздвижных окон:

https://github.com/keepitsimple/ocrtest/blob/master/sliding_window.py#blob_contributors_box

Я делаю следующее, учитывая, что winh и winw — это ширина и высота скользящего окна, а размер окна — (winh, winw):

grid_h_max =(imgheight/winh)
grid_w_max= (imgwidth / winw)
win = sliding_window(img, window_size, shiftSize=None, flatten=False) 
for h in range (grid_h_max): 
    for w in range (grid_w_max): 
        win = windows[h,w]
        grid_pos = (h,w), (winh, winw)) 
        t, b, l, r = get_win_pixel_coords(grid_pos, window_size)

Это работает просто отлично - дает мне скользящие окна, а также координаты для каждого окна. Но я не получаю перекрывающиеся скользящие окна.

Итак, если мой размер шага равен 10, а мое первое окно начинается с (сверху слева): (0,0), то мое второе окно должно быть (0, 10).

Но в приведенном выше коде мое второе окно (0, 60).

Ранее я использовал этот код:

windows = sw.sliding_window(image1, window_size, step_size, flatten=True) 
    for w in windows:
        # and then I grabbed each w and printed it out

И это давало мне все скользящие окна, включая перекрывающиеся окна. Однако в этом методе я не смог получить верхнюю и левую координаты каждого скользящего окна.


person user961627    schedule 23.12.2014    source источник
comment
Для эффективного создания скользящих окон вы можете использовать этот код sites.google.com/site/christophlampert/publications/   -  person Bharat    schedule 24.12.2014
comment
может ли он работать с python?   -  person user961627    schedule 24.12.2014


Ответы (1)


Ну вот я и понял в чем дело.

Этот код не вызывал перекрытий:

grid_h_max =(imgheight/winh)
grid_w_max= (imgwidth / winw)
win = sliding_window(img, window_size, shiftSize=None, flatten=False) 

Разделение всех размеров изображения на размеры окна, очевидно, даст неперекрывающиеся результаты.

Чтобы получить правильное количество окон для каждого измерения, я просто позволяю функции slide_window сообщать мне, сколько окон по вертикали и горизонтали:

win = sliding_window(img, window_size, shiftSize=None, flatten=False) 
grid_h_max = win.shape[0]
grid_w_max = win.shape[1]

Это снова дало мне около 5000 окон.

person user961627    schedule 24.12.2014