summaryrefslogtreecommitdiff
path: root/doc/filters.texi
diff options
context:
space:
mode:
authorTakeshi (Kesh) Ikuma <tikuma@hotmail.com>2022-10-01 21:12:59 -0500
committerPaul B Mahol <onemda@gmail.com>2022-10-22 19:35:44 +0200
commit65f96a965af415300f7533c75940eeae4e3a2287 (patch)
treed32ba737188282a0f9f07b899479ffb20da4d115 /doc/filters.texi
parent993e3a6b54552c59bda076d1568ebce69b566545 (diff)
avfilter/vf_curves: add PCHIP interpolator and interp option
summary: This patch modifies the `curves` filter with new `interp` option to let user pick the existing natural cubic spline interpolation and the new PCHIP interapolation. reason: The natural cubic spline does not impose monotonicity between the keypoints. As such, the fitted curve may vary wildly against user's intension. The PCHIP interpolation is not as smooth as the natural spline but guarantees the monotonicity. Providing both options enhances users experience (e.g., reduces the number of keypoints to realize the desired curve). See the related bug report for the example of an ill-interpolated curve. alternate solution: Both Photoshop and GIMP appear to use monotonic interpolation in their curve tools, which were the models for this filter. As such, an alternate solution is to drop the natural spline and go without the `interp` option. related bug report: https://trac.ffmpeg.org/ticket/9947 (filed by myself) Signed-off-by: Takeshi (Kesh) Ikuma <tikuma@hotmail.com>
Diffstat (limited to 'doc/filters.texi')
-rw-r--r--doc/filters.texi23
1 files changed, 18 insertions, 5 deletions
diff --git a/doc/filters.texi b/doc/filters.texi
index 3186b312d8..bcd19cf931 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -10404,11 +10404,15 @@ By default, a component curve is defined by the two points @var{(0;0)} and
"adjusted" to its own value, which means no change to the image.
The filter allows you to redefine these two points and add some more. A new
-curve (using a natural cubic spline interpolation) will be define to pass
-smoothly through all these new coordinates. The new defined points needs to be
-strictly increasing over the x-axis, and their @var{x} and @var{y} values must
-be in the @var{[0;1]} interval. If the computed curves happened to go outside
-the vector spaces, the values will be clipped accordingly.
+curve will be define to pass smoothly through all these new coordinates. The
+new defined points needs to be strictly increasing over the x-axis, and their
+@var{x} and @var{y} values must be in the @var{[0;1]} interval. The curve is
+formed by using a natural or monotonic cubic spline interpolation, depending
+on the @var{interp} option (default: @code{natural}). The @code{natural}
+spline produces a smoother curve in general while the monotonic (@code{pchip})
+spline guarantees the transitions between the specified points to be
+monotonic. If the computed curves happened to go outside the vector spaces,
+the values will be clipped accordingly.
The filter accepts the following options:
@@ -10452,6 +10456,15 @@ options. In this case, the unset component(s) will fallback on this
Specify a Photoshop curves file (@code{.acv}) to import the settings from.
@item plot
Save Gnuplot script of the curves in specified file.
+@item interp
+Specify the kind of interpolation. Available algorithms are:
+@table @samp
+@item natural
+Natural cubic spline using a piece-wise cubic polynomial that is twice continuously differentiable.
+@item pchip
+Monotonic cubic spline using a piecewise cubic Hermite interpolating polynomial (PCHIP).
+@end table
+
@end table
To avoid some filtergraph syntax conflicts, each key points list need to be