[FFmpeg-user] Question about "normalize" filter

Paul B Mahol onemda at gmail.com
Mon Jan 30 00:36:42 EET 2023


On 1/29/23, Michael Koch <astroelectronic at t-online.de> wrote:
> Am 29.01.2023 um 23:07 schrieb Paul B Mahol:
>> On 1/29/23, Michael Koch <astroelectronic at t-online.de> wrote:
>>> Am 29.01.2023 um 22:05 schrieb Paul B Mahol:
>>>> On 1/29/23, Michael Koch <astroelectronic at t-online.de> wrote:
>>>>> Am 29.01.2023 um 19:32 schrieb Paul B Mahol:
>>>>>> On 1/29/23, Michael Koch <astroelectronic at t-online.de> wrote:
>>>>>>> Hello,
>>>>>>>
>>>>>>> if I understood the documentation correctly, the normalize filter
>>>>>>> maps
>>>>>>> the darkest input pixel to blackpt and the brightest input pixel to
>>>>>>> whitept:
>>>>>>> darkest pixel --> blackpt
>>>>>>> brightest pixel --> whitept
>>>>>>>
>>>>>>> However I need a slightly different mapping:
>>>>>>> A black input pixel shall remain black, and the brightest input
>>>>>>> pixel
>>>>>>> shall become white.
>>>>>>> black --> blackpt
>>>>>>> brightest pixel --> whitept
>>>>>>>
>>>>>>> With other words: Just multiply all pixels by a suitable constant.
>>>>>>> Don't
>>>>>>> add or subtract anything.
>>>>>>> Is this possible?
>>>>>>>
>>>>>>> Known workaround: Make sure that the input frame contains a black
>>>>>>> pixel,
>>>>>>> by inserting one in a corner.
>>>>>> Try attached patch.
>>>>> How must I set the options for the desired behaviour?
>>>> Set first strength to reverse of second strength.
>>>> So 1.0 and 0.0 or 0.0 and 1.0
>>> I did try with strength=0:strength2=1 but the output isn't as expected.
>>>
>>> I'm using this input image:
>>> http://www.astro-electronic.de/flat.png
>>>
>>> The pixel values are about 171 in the center and 107 in the top right
>>> corner.
>>> The center to corner ratio is 171 / 107 = 1.6
>>>
>>> In the output image I measure 248 in the center (which is almost as
>>> expected, probably correct because I'm measuring the average of a 7x7
>>> neighborhood), but I measure 122 in the top right corner.
>>> The center to corner ratio is 248 / 122 = 2.03
>>> The corner is too dark.
>>>
>> I checked with oscilloscope filter (s=1:tw=1:t=1:x=0), far left pixels
>> (as they are darkest) and they are not changing (min values are same
>> with and without filter run)
>> With default parameters and just strength(2) set to your values, so
>> the darkest pixels are left  untouched. Did not checked brightest
>> pixels output, but they should be correct too.
>
> But that's not the behaviour I need. All pixels shall be multiplied by
> the same suitable constant, so that the brightest pixel becomes white.
>
> Input center: 171
> Input corner: 107
>
> constant c = 255 / 171 =1.49
> Output center: 171 * c = 255
> Output corner: 107 * c = 160
>

Normalization does not do that and that functionality does not belong
to such filter, it stretches ranges of all pixel values so they reach
maximal possible range.


More information about the ffmpeg-user mailing list