church_archive_script/Programs/doc/_sources/functions/video/convolution.rst.txt
2023-11-29 16:12:35 +00:00

85 lines
3 KiB
ReStructuredText

Convolution
===========
.. function:: Convolution(vnode clip, float[] matrix[, float bias=0.0, float divisor=0.0, int[] planes=[0, 1, 2], bint saturate=True, string mode="s"])
:module: std
Performs a spatial convolution.
Here is how a 3x3 convolution is done. Each pixel in the 3x3
neighbourhood is multiplied by the corresponding coefficient in
*matrix*. The results of the nine multiplications are added together,
then this sum is divided by *divisor*. Next, *bias* is added, and the
result is rounded to the nearest larger integer. If this integer
result is negative and the *saturate* parameter is False, it is
multiplied by -1. Finally, the result is clamped to the format's range
of valid values.
*clip*
Clip to process. It must have integer sample type and bit depth
between 8 and 16, or float sample type and bit depth of 32. If
there are any frames with other formats, an error will be
returned.
*matrix*
Coefficients for the convolution.
When *mode* is "s", this must be an array of 9 or 25 numbers, for
a 3x3 or 5x5 convolution, respectively.
When *mode* is not "s", this must be an array of 3 to 25 numbers,
with an odd number of elements.
The values of the coefficients must be between -1023 and 1023
(inclusive). The coefficients are rounded to integers when
the input is an integer format.
This is how the elements of *matrix* correspond to the pixels in
a 3x3 neighbourhood::
1 2 3
4 5 6
7 8 9
It's the same principle for the other types of convolutions. The
middle element of *matrix* always corresponds to the center pixel.
*bias*
Value to add to the final result of the convolution (before clamping
the result to the format's range of valid values).
*divisor*
Divide the output of the convolution by this value (before adding
*bias*).
If this parameter is 0.0 (the default), the output of the convolution
will be divided by the sum of the elements of *matrix*, or by 1.0,
if the sum is 0.
*planes*
Specifies which planes will be processed. Any unprocessed planes
will be simply copied.
*saturate*
The final result is clamped to the format's range of valid values
(0 .. (2**bitdepth)-1). Therefore, if this parameter is True,
negative values become 0. If this parameter is False, it's instead
the absolute value that is clamped and returned.
*mode*
Selects the type of convolution. Possible values are "s", for square,
"h" for horizontal, "v" for vertical, and "hv" or "vh" for both
horizontal and vertical.
How to apply a simple blur equivalent to Avisynth's Blur(1):
.. code-block:: python
Convolution(matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1])
How to apply a stronger blur equivalent to Avisynth's Blur(1.58):
.. code-block:: python
Convolution(matrix=[1, 1, 1, 1, 1, 1, 1, 1, 1])