3

多线性函数是这样的,它对每个变量都是线性的。例如,x1+x2x1-x4x3 是一个多线性函数。使用它们需要适当的数据结构和算法,以实现快速分配、分解和基本算法。

Matlab 中是否存在一些用于处理多线性函数的库?

4

1 回答 1

1

不,没有那么多。

例如, interp2 和 interpn 具有“线性”方法,正如您所描述的那样有效。但这大约是供应的极限。这种形式没有更一般的功能。

无论如何,这类函数有一些明显的局限性。例如,当应用于彩色图像处理时,它们通常是一个非常糟糕的选择,因为它们对图像中的中性色做了什么。那里强烈优选其他功能形式。

当然,对于因式分解等操作,总是有符号工具箱,但那个工具不是速度恶魔。

编辑:(其他功能形式)

我将使用双线性形式作为示例。This is the scheme that is employed by tools like Photoshop when bilinear interpolation is chosen. 在一组四个像素之间的正方形区域内,我们有形式

f(x,y) = f_00*(1-x)*(1-y) + f_10*x*(1-y) + f_01*(1-x)*y + f_11*x*y

其中 x 和 y 在单位平方 [0,1]X[0,1] 上变化。我在这里把它写成一个函数,由正方形四个角的函数值参数化。当然,这些值在图像插值中作为这些位置的像素值给出。

如前所述,双线性插值在 x 和 y 中确实是线性的。如果您保持 x 或 y 固定,则该函数在另一个变量中是线性的。

一个有趣的问题是沿着单位正方形的对角线会发生什么?因此,当我们沿着点 (0,0) 和 (1,1) 之间的路径走时。由于 x = y 沿着这条路径,用 x 代替那个表达式中的 y,然后展开。

f(x,x) = f_00*(1-x)*(1-x) + f_10*x*(1-x) + f_01*(1-x)*x + f_11*x*x
       = (f_11 + f_00 - f_10 - f_01)*x^2 + (f_10 + f_01 - 2*f_00)*x + f_00

所以我们最终得到一个沿主对角线的二次多项式。同样,如果我们沿着另一个对角线,它的形式也是二次的。因此,尽管这种野兽具有“线性”性质,但它在任何线性路径上都不是真正的线性。它仅沿平行于插值变量轴的路径是线性的。

在三维中,这是我们真正关心颜色空间插值行为的地方,主对角线现在将沿该路径显示三次行为,尽管函数的“线性”名称。

为什么这些对角线很重要?沿对角线会发生什么?如果我们的映射将颜色从 RGB 颜色空间转移到其他空间,那么图像中的中性色沿着路径 R=G=B 存在。这是立方体的对角线。问题是,当您使用中性渐变对图像进行插值时,您会在色彩空间转换后的结果中看到一个渐变,当渐变沿着对角线通过一个又一个立方体移动时,该渐变会从中性颜色变为某种非中性颜色。可悲的是,人眼非常能够看到与中立的差异,因此这种行为至关重要。(顺便说一句,这就是彩色喷墨打印机内部发生的事情,所以人们确实关心它。)

选择的替代方法是将单位正方形分解为一对三角形,共享边沿该主对角线。线性插值现在在三角形内部工作,并且沿着该边,插值纯粹是该共享边的端点的函数。

在三个维度上,同样的事情发生了,除了我们将单位立方体分解成六个四面体,所有这些都共享立方体的主对角线。差异确实非常重要,中性梯度与中性的偏差显着减少。事实证明,眼睛对沿其他梯度的偏差没有那么敏感,因此沿其他路径的损失几乎不会造成太大伤害。至关重要的是中性色,我们必须尽可能准确地再现颜色。

因此,如果您使用通常称为 3-d 查找表定义的映射进行色彩空间插值,这是进行插值的公认方法(由 ICC 同意,国际色彩联盟的首字母缩写词。)

于 2013-03-22T12:44:49.747 回答