Perl 从基于点的平滑曲线(RGB曲线类型)获取所有值表的模块/脚本

Perl 从基于点的平滑曲线(RGB曲线类型)获取所有值表的模块/脚本,perl,math,curve,Perl,Math,Curve,我想根据特定点为输入/输出曲线从0到255生成一个值表,并使该曲线平滑 这与我们在编辑带有RGB曲线的图片亮度时使用的基本相同 e、 g.我将定义点0,0;128,104 ; 255255,我将得到从0到255的所有值,其中128104左右是平滑的(非线性的)。我最终将能够配置曲线的平滑程度 我可以对它进行编程,但这似乎有点痛苦,我很确定这样的东西已经作为一个模块或脚本存在了 谢谢大家! 编辑: 本杰明W.的答案产生以下代码的结果: require Math::Spline; my @x =

我想根据特定点为输入/输出曲线从0到255生成一个值表,并使该曲线平滑

这与我们在编辑带有RGB曲线的图片亮度时使用的基本相同

e、 g.我将定义点0,0;128,104 ; 255255,我将得到从0到255的所有值,其中128104左右是平滑的(非线性的)。我最终将能够配置曲线的平滑程度

我可以对它进行编程,但这似乎有点痛苦,我很确定这样的东西已经作为一个模块或脚本存在了

谢谢大家!

编辑:

本杰明W.的答案产生以下代码的结果:

require Math::Spline;

my @x = (0, 64, 128, 204, 255);
my @y = (0, 12, 64, 224, 255);

$spline = Math::Spline->new(\@x,\@y);
for( my $a = 0 ; $a < 256 ; $a++ ){
    print("$a\t".$spline->evaluate($a)."\n");
}
require Math::Spline;
my@x=(0,64,128,204,255);
my@y=(0,12,64224255);
$spline=Math::spline->new(\@x,\@y);
对于(我的$a=0;$a<256;$a++){
打印($a\t..$spline->evaluate($a)。“\n”);
}

平滑连接点可以通过计算分段多项式的方法来实现。对于Perl,有一个模块

对于您的示例(稍微修改以使“弯曲”更清晰),大致如下所示:

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:

您正在寻找类似的产品吗?如果是这样,应该是有用的。这是答案!:)请发布它,我会选择它!谢谢:)太好了。哈,当你添加图表时,我正在修补我的;)绘图仪的不错选择!