一个模块/脚本,用于从基于点的平滑曲线(RGB 曲线类型的事物)中获取所有值的表
Posted
技术标签:
【中文标题】一个模块/脚本,用于从基于点的平滑曲线(RGB 曲线类型的事物)中获取所有值的表【英文标题】:A module/script to get the table of all values from a points based smooth curve (RGB curves type of thing) 【发布时间】:2015-08-01 02:50:10 【问题描述】:我想根据特定点为从 0 到 255 的输入/输出曲线生成一个值表,并使该曲线平滑。
基本上和我们用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 的东西吗?如果是这样,Math::Spline 应该很有用。 这就是答案! :) 请张贴,我会选择它!谢谢 :) 太好了。 哈,当你添加图表时,我正在修补我的;)绘图仪的不错选择! 【参考方案1】:平滑连接点可以通过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:
【讨论】:
以上是关于一个模块/脚本,用于从基于点的平滑曲线(RGB 曲线类型的事物)中获取所有值的表的主要内容,如果未能解决你的问题,请参考以下文章