Do pewnego algorytmu potrzebuję zastosować funkcję, która na postawie wartości wejściowej wypluje odpowiednio zmodyfikowaną wartość wyjściową. Wejściem i wyjściem ma być liczba z zakresu <0,255>
, czyli po prostu UInt8
. Chodzi o to, że im bliżej minimum lub maksimum skali (0
lub 255
), tym bardziej wartość wejściowa ma się ”zbliżyć” do minimum lub maksimum. Czyli inaczej pisząc, im bliżej wartości granicznej, tym wychylenie ma być większe, a im bliżej środka — 127
— tym mniejsze.
Nie wiem czy wam to coś powie, ale nabazgrałem wykres ilustrujący działanie takiej funkcji:
Chciałbym taką funkcję zastosować na składowej koloru (obraz w skali szarości), w algorytmie przypominającym wyostrzanie. W efekcie piksele o odcieniach zbliżonych do czarnego staną się czarne lub bardzo bliskie czerni (mocno osłabione), a te o odcieniach zbliżonych do bieli staną się białe lub bardzo bliskie bieli.
Co więcej, dobrze by było, gdyby taka funkcja pobierała na wejściu nie tylko wartość składowej koloru (wejściowy UInt8
), ale też parametr określający stopień wzmocnienia/osłabienia — czyli inaczej pisząc, kształt wykresu. Np. im wyższa wartość tego parametru, tym bardziej wygięta krzywa. Dla dużej wartości parametru, wykres powinien być mocno wygięty, dla wartości centralnej średnio wygięty, a dla zerowej płaski, co będzie tożsame z brakiem modyfikacji wartości wyjściowej:
Niestety nie mam bladego pojęcia jak taką funkcję napisać — dupa ze mnie nie matematyk. Próbowałem zastosować nieparzystą funkcję potęgową i odpowiednio ją przerobić dla danego zakresu wartości, ale nic mi z tego nie wyszło.
Doradzicie jak się za to zabrać? Pomysły mi się skończyły… :D