如何生成d/d(n*x)操作符的模板?
我正在写一个程序,需要在图像中计算线导数。如果我们想计算关于d/dx的最简单的导数近似值,我们可以运行以下操作:
diff[x] = -1.0 * image[x] + image[x+1]
如果我想更精确地计算导数,我可以增加模板的大小,并可能重新计算为:
diff[x] = -3./2 * image[x] + 2*image[x+1] - 1./2 * image[x+2]
我一直在用有限差分法来求这些系数。
现在假设我想对d/d(3*x)求导,我可以简单地将原始模板拉伸成这样:
diff[x] = -1.0 * image[x] + image[x+3]
然而,这里我没有使用来自image[x+1]和image[x+2]的信息,因此导数近似可以大大改进。我怎样才能生成一个将使用这些信息并因此更准确的模板?
根据我对你的问题的理解,我建议以所需的分辨率(例如除以3)生成一个下采样图像,然后应用你原来的导数计算方法。子采样过程应该通过首先在图像上应用低通滤波器(例如使用框或高斯模糊)来进行适当的抗锯齿化。
两个建议:
-
首先,通常使用居中计算。因此,高阶一阶导数为
0.5*(image[x+1]-image[x-1])
-
第二,利用链式公式推导出"with respect to 3x"。最简单的形式是,
df/dy = df/dx*dx/dy
也就是dImage/d(3x) = dImage/dx*(1/3)
简单来说,就是除以3。