из итеративного шаблона изображения с уменьшением размера шага У меня есть «качественный» массив. Из-за характера шаблона поиска массив не заполняется полностью. На первой итерации я иду с шагами 10, нахожу лучшее место и там ищу диапазон +10 XY, чтобы найти истинное лучшее место. Таким образом, у большинства массивов есть каждый 10-й слот, и есть небольшая «лучшая» область, которая плотно заполнена. Теперь я хочу построить этот массив и хочу, чтобы график был «интерполирован» там, где это необходимо, используя данные каждые 10-й слот. Теперь для выполнения поиска я инициализирую массив с огромным значением. Все мои измерения меньше, и позже я использую функцию np.argmin(q)
. Это отлично подходит для поиска, но для заговора это плохо. Динамический диапазон графика теряется.Участок малонаселенного массива 2d numpy
Вот пример из старой версии коды, что делает исчерпывающие, но излишне долго искать:
И вот что я получаю с оптимизированным поиском:
Вот фрагмент кода, который делает графики. (q - матрица качества для построения)
fig= plt.figure(1)
im= plt.imshow(q[::-1], cmap='rainbow', interpolation='none', extent=[-search_size,search_size,-search_size,search_size])
fig.savefig(pfn(img_fn), bbox_inches='tight')
Проблема может указывать на инициализацию массива. Опять же, как я делаю минимальный поиск Я делаю это:
q = np.empty(shape=(2*search_size,2*search_size))
q.fill(+1e20)
q_min = 1e20
for xs in range(-search_size,+search_size,search_step):
for ys in range(-search_size,+search_size,search_step):
img_shift = np.zeros_like(img)
img_shift[mom(ys):non(ys), mom(xs):non(xs)] = img[mom(-ys):non(-ys), mom(-xs):non(-xs)]
d = np.absolute(img_shift - prev_img)[search_size:-search_size,search_size:-search_size]
q[ys+search_size,xs+search_size] = np.sum(d)
if q[ys+search_size,xs+search_size] < q_min : q_min= q[ys+search_size,xs+search_size]
#print '1st iter try : %+3d %+3d %6.3f %6.3f' % (xs, ys, q[ys+search_size,xs+search_size], q_min)
idxmin = np.argmin(q)
dy,dx = np.unravel_index(idxmin, q.shape)
dx= dx-search_size
dy= dy-search_size
print '1st iter best : dx= %+3d dy= %+3d' % (dx , dy)
Затем следует еще один цикл с search_step = 1
.
Возможно ли инициализировать массив, то есть NaN
? Это позволит минимальный поиск? И/или это позволит плоттеру прыгать через неопределенные записи?
Итак, что является лучшим способом для инициализации/построения графика, чтобы поиск работал, и графики выглядели хорошо?
Спасибо, Герт
Update @Nix G-D
Усреднение терпит неудачу. Сначала я попробовал код в соответствии с рекомендацией.
q_int = pd.DataFrame(q).interpolate(method='linear', axis=0).values
fig= plt.figure(1)
im= plt.imshow(q_int[::-1], cmap='rainbow', interpolation='none', extent=[-search_size,search_size,-search_size,search_size])
Однако 2D-интерполяция не удалась. (По крайней мере, как указано в сюжете)
Я пытался добавить код для выполнения X и Y интерполяции.
q_int = pd.DataFrame(q).interpolate(method='linear', axis=0).values
q_int = pd.DataFrame(q_intx).interpolate(method='linear', axis=1).values
fig= plt.figure(1)
im= plt.imshow(q_int[::-1], cmap='rainbow', interpolation='none', extent=[-search_size,search_size,-search_size,search_size])
Но результаты все еще были повреждены.
Бест, Герт
Update @Nix G-D Усреднение терпит неудачу. См. Выше, добавьте к вопросу. –