Skip navigation

Tónusgörbék

Feladata

Fotószerkesztő alkalmazásokban rendszerint megtalálható a tónusgörbével megadható pont-operáció lehetősége. Itt egyszerűen arról van szó, hogy néhány értékhez megadjuk az új elvárt értéket, a köztes értékek pedig egy matematikai képlettel kerülnek kiszámításra. A 0 és 255 értéknek célszerű konkrét értéket adni, rendszerint ezek változatlanok maradnak.

A köztes értékek meghatározásához legegyszerűbb a lineáris eset, amikor egyes szakaszokkal kötjük össze a definiáló pontokat. Átmenet függvényeknél hasznos, ha nem tartalmaznak éles váltásokat, ezt küszöbölhetjük ki spline-ok ("simább" átmenetet képző függvények) használatával. A példánkban a B-Spline-okat választjuk.

Mindegyik esetre igaz, hogy a [0, 255] tartományból nem vezethet ki az eredmény. A spline-ok esetén ez akkor is előfordulhat, ha minden pontpárt a [0, 255] intervallumban adtunk meg, ezért szükséges az eredmény vágása.

A spline-ok esetén fokszámtól függően megadható a minimálisan megadandó alappontok száma:

  • lineáris esetben elegendő kettő,
  • kvadratikus (másodfokú) B-Spline esetén legalább 3,
  • köbös (harmadrendű) B-Spline esetén legalább 4 kell.

A minimálisnál többet természetesen megadhatunk mindegyik esetben.

Lineáris és köbös B-Spline átmenet függvények

Az első esetben 6 pontot adtunk meg az alábbiak szerint:

point_list = [(0, 0), (50, 30), (80, 70), (140, 160), (200, 220), (255, 255)]

A diagramokon ezek vörös színű kitöltött körrel jelöltek. A lineáris és köbös tónusgörbék ezeken pontosan áthaladnak. A köbös B-Spline folytonosabb átmenetet biztosít.

Megfigyelhetjük, hogy ezek a tónusgörbék a kép sötétebb részeit világosítják, a világosabbak sötétítik.

Eredeti kép:

A lineáris és a köbös spline eredménye között nagy különbséget nem érzékelünk, így csak a lineárisat mutatjuk be:

A második példában az alábbi 5 pontot használjuk:

point_list = [(0, 0), (70, 40), (128,128), (186, 216), (255, 255)]

A lineáris és a köbös között most nagyobb különbség van. A köbös B-Spline tónusgörbe alkalmazásával jobb megjelenésű, kontrasztosabb képet kapunk.

Feladatok

Próbáljuk ki a 04_03_lut_curve.py példaprogramot!

  • A point_list tömb definiálja a tónusgörbét definiáló pontpárokat. Módosítsunk ezen és figyeljük meg a hatást!
  • A createCurveFunc() függvényünk a SciPy 1D interpolációs függvényét paraméterezi fel. A B-Spline típusát a megadott pontpárok száma alapján határozza meg. Kettő esetén lineáris, három esetén kvadratikus, 4 vagy több esetén köbös. A kind paraméter konkrét megadásával ezt felülbírálhatjuk. Próbáljuk is ki!
  • Teszteljük színes és szürkeárnyalatos képekre is a módosítás hatását!
  • Módosítsuk úgy a programot, hogy lehetőségünk legyen a görbe interaktív szerkesztésére! Hozzáadhassunk, elvehessünk definiáló pontokat, a meglévőket "megfogva" átmozgathassuk!