Почему IndexError: индекс 1 выходит за пределы оси 0 с размером 1 - PullRequest
0 голосов
/ 07 октября 2018

Следующий код используется для поиска ключевых точек изображения с учетом координат xy местоположения с переменной «locs» .tp = 256, r = 180, c = 240.Во время отладки я получаю сообщение об ошибке для строки desc [idx-1,] = tmp .

tp = compareX.shape[0]
desc = np.zeros((1, tp))
r = im.shape[0]
c = im.shape[1]
idx = 1
new_locs = np.zeros((locs.shape))


for i in range(1, locs.shape[0]):

    x = math.floor(locs[i - 1, 0])  # keypoint x coordinate
    y = math.floor(locs[i - 1, 1])  # keypoint y coordinate
    #non-maximum suppression 
    if (x - 4) < 1 or (y - 4) < 1 or (x + 4) > c or (y + 4) > r:
        continue

    #save passing coordinates
    new_locs[idx - 1,] = np.array([x, y])

    #Calculate BRIEF descriptor 
    tmp = np.zeros((1, tp))

    x = x-4
    y = y-4
    for j in range(1, tp):
        ax = x + math.floor((compareX[j-1]-1)/patchWidth)
        ay = y + ((compareX[j-1]-1) % patchWidth)
        bx = x + math.floor((compareY[j-1] - 1) / patchWidth)
        by = y + ((compareY[j-1] - 1) % patchWidth)
        if (im[ay, ax] < im[by, bx]).all():
            tmp[0, j-1] = 1
    ***desc[idx-1, ] = tmp***
    idx = idx + 1
locs = new_locs
return locs, desc

1 Ответ

0 голосов
/ 07 октября 2018

Вы установили desc как имеющие размеры 1 x tp (представьте себе, что это 1 строка, tp столбцы).

tp = 5

desc = np.zeros((1, tp))
# array([[ 0.,  0.,  0.,  0.,  0.]])

desc.shape 
# (1, 5)

При нулевой индексации это означает, что ссылка desc[1, ] запрашивает строку 2, когда на оси 0 (ось строки) есть только одна строка.
Вот почему вы получаетеошибка: когда idx == 2, то desc[idx-1, ] == desc[1, ].
Может быть, вы хотите индексировать вместо оси 1?Например, desc[ ,1]*, 1014 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...