Šum je negatívny jav, ktorý vplýva na digitálne multimédiá, teda obrázky, zvukové, či obrazové záznamy. Cieľom tohto článku je poukázať na vplyv šumu, ktorý dokáže pozmeniť hodnoty jednotlivých bitov pixelov, čím sa výrazne zhorší jeho kvalita. Pixel v prípade 8-bitovej reprezentácii odtieňov sivej nadobúda hodnotu 0 až 255. Šum budeme vkladať do existujúcich obrázkov odtieňov sivej. Táto reprezentácia obrázkov aj práca s nimi je jednoduchšia ako s RGB obrázkami, nakoľko tie sú reprezentované v 3D matici s každou zložkou farby (celkovo 24 bitov, s 8 bitmi na farbu).
Vo výsledku to znamená, že úpravou najvýznamnejšieho bitu - tzv. MSB (Most Significant Bit) prídeme až 50% hodnoty svetlosti bitu, nakoľko nadobúda hodnotu 0, alebo 128. Šum sa prejavuje ako zložka, ktorá daný pixel stmaví. Každý pixel je tvorenými ôsmymi bitmi v prípade obrázku odtieňov sivej. Čím vyššia je hodnota bitu, tým svetlejší je bit. Osem bitov dokáže vo výsledku nadobudnúť hodnotu 0 - 255. Pre zrozumiteľnejšiu reprezentáciu poslúži aj tabuľka:
BIT - poradie bitu |
1. (LSB) |
2. |
3. |
4. |
5. |
6. |
7. |
8. (MSB) |
Hodnoty, ktoré nadobúda |
0/1 |
0/2 |
0/4 |
0/8 |
0/16 |
0/32 |
0/64 |
0/128 |
Implementácia v MATLAB-e reprezentuje fyzické obrázky načítaním do matíc, pričom každý obrázok má preddefinovaný rozmer 512x512px. Každý obrázok je tak reprezentovaný 262 144 pixelmi (512*512). Každý pixel je tvorený osmicou bitov, teda obrázok je v pamäti reprezentovaný prostredníctvom 2 097 152 binárnych hodnôt. Hodnoty sú hierarchicky usporiadané od LSB (Less Significant Bit) po MSB (zľava doprava).
Súčasťou implementácie je aj generovanie šumu, ktorý sa na načítaný obrázok aplikuje. Šum je vygenerovaný cez "true random generator", ktorý je založený na čase, teda (ne)periodicky. Štandardne je funkcia pre generovanie periodická s predvolenými hodnotami, z ktorých sa číslo/reťazec generuje. Šum je aplikovaný na pôvodný obrázok po stĺpcoch, čo znamená, že sa šum aplikuje postupne na 1. bit (LSB), 2. bit, 3. bit, 4. bit, 5. bit, 6. bit, 7. bit, 8. bit (MSB) . Vďaka tomu je možné priebežné výsledky ukladať a vykresliť do okna pre reprezentáciu používateľovi.
Aby bolo možné upravené obrázky vykresliť po úprave jednotlivých stĺpcov samostatne, sú jednoducho nanovo "zložené" prostredníctvom stĺpcov pôvodného (neupraveného) obrázku s upraveným stĺpcom. Takto vieme vykresliť jednotlivé obrázky s práve chceným upraveným stĺpcom, ktorý reprezentuje konkrétny bit v 8-bitovej reprezentácii. Výsledný obrázok so šumom pre všetky stĺpce je vyskladaný z upravených stĺpcov. Z výstupu je zrejmé, že najviac výsledok ovplyvnil šum pre 8.bit (MSB) a 7. bit. Pri 1. (LSB) bite nie je zmena bitu prostredníctvom šumu patrná, nakoľko má minimálnu váhu.
Práca s obrázkami v odtieňoch sivej je jednoduchšia, nakoľko tu existuje iba jedna farebná paleta. Pri RGB sú až 3 farebné palety, pričom je každý pixel reprezentovaný až 24 bitmi. Takáto implementácia by predstavovala 262 144 pixelov pre obrázok s 6 291 456 binárnymi hodnotami. Pri RGB reprezentácii by sa tak využívali 3-rozmerné matice s reprezentáciou pixelu zloženého z troch zložkových farieb modelu.
Implementácia využíva 3 obrázky s doplnením rovnakého šumu do všetkých troch obrázkov. Obrázky sú načítané na začiatku programu funkciou imread() s ich názvom. Priamy názov predstavuje ich umiestnenie v rovnakom priečinku ako použitie programu. Matematicky je v programe vyjadrený aj Špičkový výkon (pomer) "signálu" voči šumu (PSNR) a určuje aj strednú kvadratickú chybu (MSE).
Použité obrázky (ukladať ako 8-bit .bmp)!
lena512g.bmp
barbara512g.bmp
girlface512g.bmp
Programová implementácia dostupná na Githube:
https://github.com/martinius96/MATLAB-scripty/blob/main/Praca_s_obrazkami/Nahodny_sum.m