module/script 从基于点的平滑曲线(RGB 曲线类型)中获取所有值的 table
A module/script to get the table of all values from a points based smooth curve (RGB curves type of thing)
我想根据特定点为从 0 到 255 的 input/output 曲线生成 table 个值,并使该曲线平滑。
这和我们用RGB曲线编辑图片的亮度基本一样
例如我会定义点 0,0 ; 128,104; 255,255,我会得到从 0 到 255 的所有值,并且在 128,104 左右有一些平滑(非线性)。我最终将能够配置该曲线的平滑程度。
我可以对它进行编程,但似乎有点痛苦,而且我很确定这样的东西已经作为模块或脚本存在了。
谢谢!
编辑:
来自 Benjamin 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");
}
通过spline interpolation, where you calculate a piecewise polynomial. For Perl, there is the module Math::Spline.
可以顺利连接点
对于您的示例(略微修改以使 "bend" 更清晰可见),它大致如下所示:
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:
我想根据特定点为从 0 到 255 的 input/output 曲线生成 table 个值,并使该曲线平滑。
这和我们用RGB曲线编辑图片的亮度基本一样
例如我会定义点 0,0 ; 128,104; 255,255,我会得到从 0 到 255 的所有值,并且在 128,104 左右有一些平滑(非线性)。我最终将能够配置该曲线的平滑程度。
我可以对它进行编程,但似乎有点痛苦,而且我很确定这样的东西已经作为模块或脚本存在了。
谢谢!
编辑:
来自 Benjamin 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");
}
通过spline interpolation, where you calculate a piecewise polynomial. For Perl, there is the module Math::Spline.
可以顺利连接点对于您的示例(略微修改以使 "bend" 更清晰可见),它大致如下所示:
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: