如何在Matlab中使用多线性函数?

3

多线性函数是指它在每个变量上都是线性的。例如,x1+x2x1-x4x3就是一个多线性函数。要处理它们需要适当的数据结构和算法,以实现快速赋值、分解和基本运算。

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


1
在文档中快速搜索“多线性”只能找到统计工具箱中的条目。如果我错了,请原谅我,但这不是线性代数的特殊情况吗?而 MATLAB 对此有很好的支持,不是吗? - wakjah
2
@wakjah - 抱歉,完全不是这样。这就像说当我们做散点图时使用图论一样。是的,函数在某种意义上是线性的,而且涉及到代数。但是线性代数是一个非常特殊的研究领域,与问题没有交互作用。 - user85109
1个回答

1

不,没有那么多。

例如,interp2和interpn有“linear”方法,这些方法实际上与您描述的相似。但这大约是提供的极限。对于这种形式的更一般的函数没有任何东西。

无论如何,这类函数有一些显着的局限性。例如,在应用于彩色图像处理时,它们通常是一个非常糟糕的选择,因为它们对图像中的中性色产生了影响。其他的函数形式在这里被强烈推荐。

当然,总有符号工具箱可以进行因数分解等操作,但该工具不是速度恶魔。

编辑:(其他函数形式)

我将使用双线性形式作为示例。这是诸如Photoshop之类的工具在选择双线性插值时使用的方案。在四个像素组成的正方形区域内,我们有以下形式:

f(x,y) = f_00*(1-x)*(1-y) + f_10*x*(1-y) + f_01*(1-x)*y + f_11*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路径上。这是立方体的对角线。问题是当您插值带有中性渐变的图像时,当渐变沿着对角线穿过一个立方体后,在颜色空间转换后的结果中将看到从中性到某种非中性颜色移动的渐变。遗憾的是,人眼非常能够看到与中性的差异,因此这种行为非常重要。(顺便说一下,这就是彩色喷墨打印机内部发生的事情,因此人们确实关心它。)
选择的替代方案是将单位正方形分解为一对三角形,共享边沿着主对角线。现在,在三角形内部和沿着那条边上进行线性插值,插值函数纯粹是该共享边的端点的函数。
在三维空间中,同样的事情发生了,只不过我们使用单位立方体的六个四面体来进行分解,所有这些四面体都共享立方体的主对角线。这种差异确实非常重要,可以大大减少你的中性梯度与中性色之间的偏差。事实证明,眼睛并不那么敏锐,无法感知其他梯度的偏差,因此其他路径上的损失并不会对我们造成太大的伤害。中性色是至关重要的,我们必须尽可能准确地再现颜色。
因此,如果您使用所谓的3D查找表定义的映射进行颜色空间插值,这就是协定的插值方法(由国际色彩联盟ICC制定)。

你能解释一下语句“这里强烈推荐使用其他函数形式”吗?可以举些例子吗? - hhh
1
如果我开始举例子,那会变得很冗长,因为我接下来需要解释为什么它们更受欢迎。我会尽力而为。 - user85109
我无法理解的一件事是如何实现不同的操作,比如翻译。现在,齐次坐标(第8页这里)可以将翻译转换为一个简单的矩阵乘积,其中引入了一个新的虚拟维度。这是有道理的,因为矩阵乘积就足以实现大多数操作——我还没有考虑如何实现分解:也许可以通过对不同因素进行排序来完成数据结构的某种方式,有什么想法吗? - hhh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接