【发布时间】:2015-10-19 05:07:14
【问题描述】:
从具有递减步长的迭代图像模式搜索中,我有一个“质量”数组。由于搜索模式的性质,该数组未完全填充。在第一次迭代中,我使用步长 10,找到最佳位置,然后搜索 +-10 XY 范围以找到真正的最佳位置。因此,大多数阵列每 10 个插槽填充一次,并且有一个小的“最佳”区域被密集填充。现在我想绘制这个数组,并希望通过每 10 个插槽使用一次数据在需要的地方“插值”该图。现在要进行搜索,我用一个巨大的值初始化数组。我所有的测量值都变小了,后来我使用了np.argmin(q) 函数。这对搜索很有效,但对于绘图却很糟糕。绘图的动态范围丢失了。
以下是旧版本代码的示例,该代码执行详尽但不必要的长搜索:
这是我通过优化搜索得到的结果:
这是执行绘图的一段代码。 (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 ?那会允许最小搜索吗?和/或它是否允许绘图仪跳过未定义的条目?
那么初始化/绘图的最佳方法是什么,以便搜索有效并且绘图看起来不错?
谢谢, 格特
更新@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])
但结果仍然损坏。
最好, 格特
【问题讨论】:
标签: python numpy matplotlib