Я пытаюсь прорисовать раздвижные окна для поиска объектов. До сих пор мне удалось использовать numpy-трансляцию, чтобы нарезать мое основное изображение на фрагменты размера окна, которые я сохранил в переменной «all_windows», которая видна ниже. Я подтвердил, что фактические значения соответствуют, поэтому я доволен этим до этого момента.Как вызвать функцию на срезах векторного скользящего окна?
Следующая часть, где у меня проблемы. Я хотел бы индексировать в массив «all_windows», поскольку я вызываю функцию patchCleanNPredict(), чтобы я мог передавать каждое окно в функцию в аналогично векторизованном формате.
Я пытался создать массив с именем new_indx, который бы содержал индексы среза в массиве 2d, например ([0,0], [1,0], [2,0] ...), но были сталкиваясь с проблемами.
Я надеюсь получить массив значений доверия для каждого окна. Код ниже работает в python 3.5. Заранее благодарим за любую помощь/совет.
import numpy as np
def patchCleanNPredict(patch):
# patch = cv2.resize()# shrink patches with opencv resize function
patch = np.resize(patch.flatten(),(1,np.shape(patch.flatten())[0])) # flatten the patch
print('patch: ',patch.shape)
# confidence = predict(patch) # fake function showing prediction intent
return # confidence
window = (30,46)# window dimensions
strideY = 10
strideX = 10
img = np.random.randint(0,245,(640,480)) # image that is being sliced by the windows
indx = np.arange(0,img.shape[0]-window[1],strideY)[:,None]+np.arange(window[1])
vertical_windows = img[indx]
print(vertical_windows.shape) # returns (60,46,480)
vertical_windows = np.transpose(vertical_windows,(0,2,1))
indx = np.arange(0,vertical_windows.shape[1]-window[0],strideX)[:,None]+np.arange(window[0])
all_windows = vertical_windows[0:vertical_windows.shape[0],indx]
all_windows = np.transpose(all_windows,(1,0,3,2))
print(all_windows.shape) # returns (45,60,46,30)
data_patch_size = (int(window[0]/2),int(window[1]/2)) # size the windows will be shrunk to
single_patch = all_windows[0,0,:,:]
patchCleanNPredict(single_patch) # prints the flattened patch size (1,1380)
new_indx = (1,1) # should this be an array of indices?
patchCleanNPredict(all_windows[new_indx,:,:]) ## this is where I'm having trouble