Math 关于dx的离散数值导数>;1.
如何为d/d(n*x)运算符生成模具 我正在写一个程序,需要计算图像中的线导数。如果我们想要计算关于d/dx的最简单导数近似值,我们可以运行以下操作:Math 关于dx的离散数值导数>;1.,math,opencv,image-processing,numerical-methods,Math,Opencv,Image Processing,Numerical Methods,如何为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+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]
然而,这里我没有使用来自图像[x+1]和图像[x+2]的信息,因此导数近似可以大大改进。如何生成使用此信息从而更准确的模具?根据我对您问题的理解,我建议propoise以所需分辨率(例如除以3)生成二次采样图像,然后应用原始导数计算方法。子采样程序应首先在图像上应用低通滤波器(例如,使用方框或高斯模糊)来进行适当的抗失真处理。两个建议:
- 首先,一般来说,使用中心计算。因此,高阶一阶导数是
0.5*(image[x+1]-image[x-1])
- 其次,使用链公式推导“关于3x”。在其最简单的形式中,形式上,
,这意味着df/dy=df/dx*dx/dy
简而言之,就是除以3dImage/d(3x)=dImage/dx*(1/3)