Pixelová grafika je bežne využívaná pre fotografie z hľadiska dobrej kvality voči veľkosti. Najpoužívanejšie formáty sú .jpg (JPEG) či .png. Výhodou .png je možnosť zachovania priehľadnosti pozadia a výhodou .jpg je dobrá kompresia, vďaka čomu máte veľkú fotografiu uloženú v relatívne malom balíku dát. Problém u pixelovej grafiky nastáva, ak máte obrázok, či fotografiu a chcete ju zväčšiť. Pri štandardnom zväčšení cez program typu Skicár docielite rozostrenie, nakoľko zväčšenie spôsobí zväčšenie pixelu na viac pixelov, nevyhladzuje hrany a tým vzniká kockatý obrázok.
Sú aj alternatívne spôsoby a to napríklad prevedenie .jpg do .svg, teda vektorového formátu, ktorý bude obrázok definovať krivkami, tvarmi - matematicky. Vektorový formát ale pri svojom vytváraní zníži kvalitu pôvodnej .jpg fotografie a rovnako tak sa zníži aj kvalita sekundárneho prevedenia (konverzie) .svg na .jpg. Nevýhodou u .svg formátu v takomto prípade bude aj veľkosť, ktorá bude niekoľko-násobná oproti .jpg.
Aby sme sa vyhli viacnásobnej konverzii, musíme použiť metódu na vyhladenie hrán, napríklad algoritmus, ktorý zníži degradáciu fotografie na prijateľnú úroveň. Samotné zväčšenie obrázka sa tak zrealizuje v jednom kroku. Preto si dnes porovnáme rôzne algoritmy pre zväčšenie fotografie dostupné v MATLAB-e a tiež metódy, ktoré ponúkajú on-line nástroje, či nástroj operačného systému Windows. Vo výsledku si porovnáme aj odchýlku od pôvodného obrázku.
Originálny (referenčný) obrázok, ktorý použijeme bude zo zdroja:
https://img.ephoto.sk/images/content/articles/d3701d1ed8051f5a4ff5648aa7ffff4dc8e5cb84.jpg, ktorý je z blogu
https://www.ephoto.sk/fotoskola/clanky/o-fotografii/:

Tento obrázok má rozlíšenie 870 x 489 px. Obrázok nie je dostatočne veľký, napríklad pre pozadie pracovnej plochy. Preto budeme realizovať zväčšenie 2-násobné (1740 x 978 px) a aj 4-násobné (3480 x 1956 px) pre citeľné preukázanie rozdielu medzi použitými metódami, či algoritmami zväčšenia.
Pre to, aby ste videli skutočnú kvalitu obrázku si ho musíte otvoriť v reálnej veľkosti. Otvorte si ho pravým kliknutím myši s otvorením obrázka na novej karte. Obrázky v článku sú prispôsobené šírke stránky na 620 px, čo môže skresľovať kvalitu, keďže je obrázok zmenšovaný na stránku a tým sa môže relavívne zlepšiť jeho čitateľnosť.
Skicár
Jednoduchý editor obrázok v operačnom systéme Windows, vhodný len pre najzákladnejšie operácie. Myslel som si, že Skicár používa najjednoduchší algoritmus - "Nearest Neighbor" pre upscaling obrázkov, kde pôvodný pixel len preberie farbu susedného pixelu a tak dochádza z dôvodu nevyhladenia hrán ku kockovitému priebehu. Takto to aj bolo, ale v skorších verziách Windowsu. Dnes už Skicár používa "edge-aware adaptívnu interpoláciu", čím vyhladzuje aj hrany a výsledný obrázok je blízky originálu.
Originál

2x Zväčšenie - "edge-aware adaptívna interpolácia"

4x Zväčšenie - "edge-aware adaptívna interpolácia"

Photopea
Online nástroj ako ekvivalent Photoshopu. Umožňuje jednoduché, ale aj zložité operácie s obrázkami, podporuje mnoho formátov importu i exportu. Pri zväčšení obrázka máme na výber celkom 3 metódy, ktoré vieme použiť za predpokladu zapnutej funkcie Resample, keďže sa bude meniť počet pixelov a tie je potrebné prepočítať.
K dispozícii sú aj základné algoritmy, napr. "Nearest Neighbor" pre jednoduché zväčšenie, presne to, čo umožňuje Skicár ešte vo Windowse XP. Výber metódy realizujeme skrz hornú záložku, kde vyberieme Obraz --> Veľkosť obrazu, alebo cez klávesovú skratku Alt + Ctrl + I (ako Igor). Zobrazí sa kontextové okno s aktuálnou veľkosťou obrázka, jeho DPI a tiež možnosť výberu príslušného algoritmu.
Originál

2-násobné zväčšenie - "Nearest Neighbor"

4-násobné zväčšenie - "Nearest Neighbor"

Ďalšie dva algoritmy umožňujú dosiahnutie vyhlazovania. Je tu dostupný "Bilinear", ktorý funguje na princípe bilineárnej interpolácie, ktorá využíva celkom 4 susedné pixely, ktoré priemeruje (vážený priemer) a ich hodnotu nastavuje na pixel. To zaručí lepší prechod a menej kockovaný priebeh v porovnaní so zväčšovaním obrázku skrz "Nearest Neighbor" algoritmus.
Originál

2-násobné zväčšenie - "Bilinear"

4-násobné zväčšenie - "Bilinear"

Posledným algoritmom, ktorý Photopea pre zväčšenie obrázka ponúka je "Bicubic Sharper". Využíva bikubickú interpoláciu spolu s dodatočným doostrovaním po resamplingu. Pre farbu pixelu sa využíva až 16 susedných pixelov, čo zaručuje dobrý kontrast., hladké prechody aj pri väčšom zväčšení pôvodného obrázka.
Originál

2-násobné zväčšenie - "Bicubic Sharper"

4-násobné zväčšenie - "Bicubic Sharper"

MATLAB je univerzálny nástroj, ktorý sa dá použiť na čokoľvek. Obsahuje metódy aj na prácu s obrázkami, vrátane zväčšenia obrázka s aplikáciou určitého algoritmu, ktoré natívne ponúka. Pre prácu s MATLAB-om nemusíte byť len študent univerzity. Nemusíte si ho ani kupovať, nakoľko základný MATLAB je dostupný aj on-line na stránkach Mathworksu, pričom má obmedzenie na mesačné použitie maximálne 20 hodín, čo na občasné použitie úplne postačuje.
Využijeme algoritmus Lanczos3, ktorý je jeden z najlepších algoritmov najmä na obrázky, kde sa vyžaduje zachovanie dobrých prechodov, ale aj ostrých hrán, napríklad texty a pod, čím sa zaručuje ich čitateľnosť aj po zväčšení. Využíva 6x6 susedných pixelov (celkom teda 36), pričom každý pixel má svoju samostatnú váhu podľa funkcie (Lanczos / windowed sinc), teda bližší pixel v rade má vyššiu váhu ako vzdialenejší, ktorý je tiež zahrnutý. To zaručuje plynulejší prechod a menej kockovaný výsledok. Ako možnú nevýhodu môžeme u Lanczos3 algoritmu spomenúť, že sa tu môže objavovať tzv. halo efekt okolo hrán, čo je ale efekt vychádzajúci priamo z podstaty algoritmu, nie je to chyba.
2-násobné zväčšenie - Lanczos3 v MATLABE

4-násobné zväčšenie - Lanczos3 v MATLABE

Aby sme nezabudli aj na AI nástroje, využil som online službu Bigjpg, ktorá umožňuje 2 aj 4-násobné zväčšenia brázka, pričom ponúka aj algoritmus na redukciu šumu. Využil som teda 2 aj 4-násobné zväčšenie pôvodného obrázka, vrátane maximálneho potlačenia šumu. V oboch prípadoch bolo potrebné počkať násobne dlhší čas v porovnaní s inými algoritmami a metódami, ktoré sme predtým používali.
Originál

2-násobné zväčšenie - Bigjpg (maximálna redukcie šumu)

4-násobné zväčšenie - Bigjpg (maximálna redukcie šumu)

Výsledné porovnanie
Je ťažké na základe obrázkov v článku určiť, nakoľko sú zhodné s pôvodným - originálnom obrázkom aj po zväčšení. Využijeme preto MATLAB a zistíme pri porovnaní obrázkov percentuálnu zhodu SSIM + technické metriky PSNR / MSE, ktoré nám lepšie povedia, ako veľmi sú obrázky zhodné. Zmenšenie zväčšených obrázkov vykonáme rovnakým algoritmom u všetkých a to bicubic, pričom chyba spôsobená algoritmom bude ekvivalentná u všetkých.
SSIM – Structural Similarity Index porovná jas (luminance), kontrast, štruktúru (tvary, hrany), teda metóda najbližšie ľudskému vnímaniu obrazu a rozdielov medzi nimi. Preto obrázky v MATLAB scripte prevedieme do grayscale režimu (odtieňov sivej). Výstupné rozsahy: 0.98–1.00 takmer identické 0.95–0.98 veľmi dobrý upscale, 0.90–0.95 viditeľné rozdiely, < 0.90 degradácia detailov (zlá kvalita).
MSE je strednou kvadratickou chybou, ktorá určí priemernú kvadratickú chybu medzi pixelmi, matematickú chybu, výsledkom bude 0 pre zhodnosť, alebo väčšie číslo, tým väčšia odchýlka. PSNR – Peak Signal-to-Noise Ratio je logaritmickou verziou MSE a prepočíta ho na decibely (dB), kde rozsahy reprezentujú: > 40 dB takmer identické, 30–40 dB dobré, < 30 dB viditeľná strata.
Skicár - "edge-aware adaptívna interpolácia":
2x
SSIM: 0.9948 (99.48 %)
PSNR: 40.34 dB
MSE : 0.000092
4x
SSIM: 0.9948 (99.48 %)
PSNR: 40.45 dB
MSE : 0.000090
Photopea - "Nearest Neighbor"
2x
SSIM: 0.9972 (99.72 %)
PSNR: 42.93 dB
MSE : 0.000051
4x
SSIM: 0.9967 (99.67 %)
PSNR: 41.78 dB
MSE : 0.000066
Photopea - "Bilinear"
2x
SSIM: 0.9873 (98.73 %)
PSNR: 36.32 dB
MSE : 0.000233
4x
SSIM: 0.9894 (98.94 %)
PSNR: 36.96 dB
MSE : 0.000201
Photopea - "Bicubic Sharper"
2x
SSIM: 0.9896 (98.96 %)
PSNR: 37.38 dB
MSE : 0.000183
4x
SSIM: 0.9904 (99.04 %)
PSNR: 37.55 dB
MSE : 0.000176
MATLAB - "Lanczos3"
2x
SSIM: 0.9936 (99.36 %)
PSNR: 41.80 dB
MSE : 0.000066
4x
SSIM: 0.9962 (99.62 %)
PSNR: 42.92 dB
MSE : 0.000051
Bigjpg - online AI nástroj (maximálna redukcia šumu)
2x
SSIM: 0.9786 (97.86 %)
PSNR: 33.04 dB
MSE : 0.000497
4x
SSIM: 0.9798 (97.98 %)
PSNR: 39.33 dB
MSE : 0.000117
Záver
Ani jeden z použitých algoritmov nie je bezstratový, to je logické z pohľadu pixelovej grafiky. U všetkých algoritmov ale môžeme konštatovať veľmi dobré vlastnosti a uspokojivý výsledok. Aj pri zväčšení pôvodného obrázku na veľkosť pozadia pracovnej plochy bude obrázok relatívne ostrý bez ohľadu na použitú metódu, algoritmus.
Najhoršie z testovaných obstál AI nástroj Bigjpg, ktorý značne zaostával za priemerom a je prezentovaný ako "Bigjpg - AI Super-Resolution lossless image enlarging / upscaling tool using Deep Convolutional Neural Networks". Vŕtalo mi to v hlave a tak som skúsil ešte jeden test s týmto nástrojom. Upscaling prebehol rovnako, avšak zvolil som možnosť nepoužívať redukciu šumu. Výsledky boli diametrálne odlišné:
2x - Bigjpg (bez redukcie šumu)
SSIM: 0.9976 (99.76 %)
PSNR: 48.20 dB
MSE : 0.000015
4x - Bigjpg (bez redukcie šumu)
SSIM: 0.9984 (99.84 %)
PSNR: 47.16 dB
MSE : 0.000019
Bigjpg vystrelil z posledného miesta na prvé. V takomto nastavení Bigjpg môžeme hovoriť o najlepšej dosiahnutej kvalite. Redukcia šumu sa ukázala ako kameň úrazu. Častokrát býva u podobných nástrojov nutnosť sa zaregistrovať, či si dokonca službu predplatiť. V tomto prípade Bigjpg neukladá obrázky v prípade, ak nie ste zaregistrovaný. Teda pri opätovnej návšteve webu nástroja musíte znova zadať vstupný obrázok a nechať ho prekonvertovať na predvolenú veľkosť. Bigjpg tak hodnotím veľmi pozitívne.
Z pohľadu ostatných nástrojov si veľmi dobre viedol MATLAB spolu s algoritmom Lanczos3, veď práve na takýto účel je navrhnutý. U Photopea nástroja a algoritmu Nearest Neighbor som očakával ďaleko horšie výsledky. Pravdepodobne nešlo o čistý algoritmus, ale aj nejaký sekundárny nástroj, či vyhladenie hrán.
MATLAB script pre upscale obrázka s algoritmom Lanczos3:
https://github.com/martinius96/MATLAB-scripty/blob/main/Praca_s_obrazkami/Upscale_lanczos3.m
MATLAB script pre porovnanie obrázkov SSIM, PSNR, MSE:
https://github.com/martinius96/MATLAB-scripty/blob/main/Praca_s_obrazkami/Porovnanie_SSIM_PSNR_MSE.m