I'm trying to vectorize a sliding window search for object detection. So far I have been able to use numpy broadcasting to slice my main image into window sized slices that I have stored in the variable all_windows
seen below. I have verified that the actual values match so I'm happy with it up to that point.
The next part is where I'm having trouble. I'd like to index into the all_windows
array as I call the patchCleanNPredict()
function so that I can pass each window into the function in a similarly vectorized format.
I was trying to create an array called new_indx that would contain the slice indices in a 2d array, e.g. ([0,0], [1,0], [2,0]...) but have been running into problems.
I'm hoping to end up with an array of confidence values for each window. The code below works in python 3.5. Thanks in advance for any help/advice.
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