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

时间:2013-03-22 11:32:24

标签: matlab math

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

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

1 个答案:

答案 0 :(得分:1)

不,不是那么多。

例如,interp2和一个interpn都有'线性'方法,这些方法可以有效地描述。但这是关于提供的限制。而这种形式的更一般功能没有任何内容。

无论如何,这类功能有一些显着的局限性。例如,正如应用于彩色图像处理一样,它们通常是一个非常差的选择,因为它们对图像中的中性做了什么。其他功能形式在那里是非常优选的。

当然,总有象征工具箱用于分解等操作,但该工具不是速度恶魔。

编辑:(其他功能形式)

我将使用双线性形式作为示例。当选择双线性插值时,这是Photoshop等工具所采用的方案。在一组四个像素之间的正方形区域内,我们有

形式
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生存。这是立方体的对角线。问题是当您使用中性渐变插值图像时,您会在颜色空间转换后看到结果中的渐变,当渐变沿对角线移动通过一个接一个的立方体时,颜色空间转换从中性颜色移动到某些非中性颜色。可悲的是,人眼很容易看到中立的差异,所以这种行为至关重要。 (顺便说一句,这就是你的彩色喷墨打印机内部发生的事情,所以人们会关心它。)

选择的替代方案是将单位正方形剖析成一对三角形,沿着主对角线具有共享边缘。线性插值现在在三角形内部工作,并且沿着该边缘,插值纯粹是该共享边缘的端点的函数。

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

因此,如果使用通常称为3-d查找表定义的映射进行颜色空间插值,则这是进行插值的商定方式(ICC同意,国际色彩联盟的首字母缩略词。)< / p>