Am 14.10.2021 um 13:29 schrieb Michael Koch:
Am 14.10.2021 um 13:23 schrieb Paul B Mahol:
On Thu, Oct 14, 2021 at 1:18 PM Michael Koch
<astroelectro...@t-online.de>
wrote:
Am 14.10.2021 um 13:11 schrieb Paul B Mahol:
On Thu, Oct 14, 2021 at 1:08 PM Michael Koch <
astroelectro...@t-online.de>
wrote:
Am 14.10.2021 um 13:01 schrieb Paul B Mahol:
On Thu, Oct 14, 2021 at 12:59 PM Michael Koch <
astroelectro...@t-online.de>
wrote:
Am 14.10.2021 um 12:53 schrieb Paul B Mahol:
On Thu, Oct 14, 2021 at 12:29 PM Michael Koch <
astroelectro...@t-online.de>
wrote:
Am 14.10.2021 um 12:07 schrieb Paul B Mahol:
Sorry but I'm not on windows, so I can not use your script.
Then try the below (slightly improved) version. It would
become much
simpler with variables:
ARRAY_H = pow(2,ceil(log(ceil(W*10/9))/log(2)))
ARRAY_V = pow(2,ceil(log(ceil(H*10/9))/log(2)))
The test image contains wavelengths from 4 to 8 (in the
center) to
16
pixels per linepair.
The filter wavelength is independant of input size. You can
change
the
size in the first command (but it must be 1:1 aspect ratio,
otherwise
hstack would fail)
Since when hstack fails because of different aspect ratio?
Because I first make the left half of the test image, then
transpose
it
and then hstack them together
The fftfilt examples do of course work with any aspect ratio.
I think you do not understand what aspect ratio really means.
width / height
Doesn't all this introduces aliasing if not using power of 2 width and
height square dimensions?
I'm not sure if I understand what you mean. Do you see a significant
difference if you make the input size 250x250 or 256x256?
it did for first test.pngĀ you sent
This is the command line for the lowpass filter, where the filter
freqency isn't a function of input size. The constant "8" is the filter
wavelength in pixels per linepair.
ffmpeg -i test.png -vf
scale=2*iw:2*ih,fftfilt=dc_Y=0:dc_U=0:dc_V=0:weight_Y='lte(hypot(X/pow(2,ceil(log(ceil(W*10/9))/log(2))),Y/pow(2,ceil(log(ceil(H*10/9))/log(2)))),1.0/8)':weight_U=1:weight_V=1,scale=iw/2:ih/2
-y lowpass.png
With two new variables for the FFT array size
ARRAY_H = pow(2,ceil(log(ceil(W*10/9))/log(2)))
ARRAY_V = pow(2,ceil(log(ceil(H*10/9))/log(2)))
the command line could be simplified to:
ffmpeg -i test.png -vf
scale=2*iw:2*ih,fftfilt=dc_Y=0:dc_U=0:dc_V=0:weight_Y='lte(hypot(X/ARRAY_H,Y/ARRAY_V),1.0/8)':weight_U=1:weight_V=1,scale=iw/2:ih/2
-y lowpass.png
It's possble to simplify even more by defining
X_REL = X / ARRAY_H
Y_REL = Y / ARRAY_V
Then the command line is
ffmpeg -i test.png -vf
scale=2*iw:2*ih,fftfilt=dc_Y=0:dc_U=0:dc_V=0:weight_Y='lte(hypot(X_REL,Y_REL),1.0/8)':weight_U=1:weight_V=1,scale=iw/2:ih/2
-y lowpass.png
By the way, fftfilt also has another problem. If the image contains the
highest possible frequency (pixels are black, white, black, white and so
on), this can't be filtered out with a lowpass filter. I think that's
because of the YUV subsampling. As a workaround I did scale the image up
before filtering and scale down after filtering.
Michael
_______________________________________________
ffmpeg-user mailing list
ffmpeg-user@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-user
To unsubscribe, visit link above, or email
ffmpeg-user-requ...@ffmpeg.org with subject "unsubscribe".