一个模块/脚本,用于从基于点的平滑曲线获取所有值的表格(RGB曲线类型的东西)

时间:2015-08-01 02:50:11

标签: perl math curve

我想基于特定点为0到255的输入/输出曲线生成一个值表,并使该曲线平滑。

在使用RGB曲线编辑图片的亮度时,我们使用的基本相同。

e.g。我会定义点0,0; 128,104; 255,255我会得到0到25​​5之间的所有值,在128,104附近有一些平滑(非线性)。我最终能够配置该曲线的平滑程度。

我可以对它进行编程,但它似乎有点痛苦,而且我非常确定这样的东西已经作为模块或脚本存在。

谢谢!

修改

Benjamin W。的答案使用以下代码生成以下结果:

Target

gnuplot curve from this code

1 个答案:

答案 0 :(得分:3)

可以通过spline interpolation平滑地连接点,您可以在其中计算分段多项式。对于Perl,有模块Math::Spline

对于您的示例(略微修改以使"弯曲"更好地可见),它大致如下所示:

use strict;
use warnings;
use feature 'say';
use Math::Spline;

my @x = (0, 210, 255);
my @y = (0, 124, 255);
my $spline = Math::Spline->new(\@x, \@y);

my @x_interp = (0 .. 255);
my @y_interp;
for my $x_i (@x_interp) {
    push @y_interp, $spline->evaluate($x_i);
}

say "$x_interp[$_]\t$y_interp[$_]" for (0 .. 255);

输出可以通过管道传输到文件并绘制,例如使用gnuplot: spline