index.php BC1.php LP1.php
1 2 3 4 5 6
BB Страници на Пламен Антонов 
Размер на текста: A-AA+
Посещения: 129 от общо 100873

Как се създават и възпроизвеждат компютърните изображения

Тази статия се опитва да обясни само част от основните математически преобразувания, които се прилагат при създаването и възпроизвеждането на компютърни изображения. Засегнати са главно монохромните образи, които поставят основата за работа с цвят. Конструкцията на оптичните сензори, оптиката, основните методи при представянето на цветовете, както и компресията на данните са предмет на други работи.

Какво става, когато натиснете спусъка на цифровата си камера/фотоапарат/телефон? В общия случай правите снимка. А ако нещото струва 80, 800 или 8000 лева? В процесите, които водят до формиране на изображение, няма каквато и да било разлика, а само нюанси. И огромен обем изчисления. Как става това?

Всеизвестно е, че образите, които наблюдаваме на компютърен екран, а от известно време и на телевизионен, независимо от това как са създадени, се представят като набор от точки, всяка с определена яркост и цвят. А за да разберем създаването, трябва да разгледаме и възпроизвеждането, тъй като естествено тези два процеса са тясно свързани. В тях се намесва доста математика, която е съобразена с физиологията на човешките възприятия, така че читателят, който не се чувства комфортно в подобни области, би могъл да спре дотук.

Законът на Вебер и Фехнер

Общият закон на Вебер и Фехнер се отнася до възприемането на различни дразнения от човека. Той е опитно изведен от германските учени Ернст Вебер (1795-1878) и Густав Фехнер (1801-1887) и гласи: Големината на физиологичното възприятие за определено дразнение е пропорционална на логаритъма на големината на дразнението. С други думи изменението на възприятието зависи от относителното изменение на дразнението. В частност за зрителното възприятие е валидно:

  (1)

където W е зрителното възприятие, L - светлинното дразнение, а kW - константа. Ако интегрираме (1) ще получим основната форма на закона, отнасяща се до зрително възприятие:

  (2)

където C е интеграционна константа.  От (1) следва, че ние възприемаме относителното изменение в яркостта на две съседни точки. За нуждите на практиката можем да приведем (1) към крайни нараствания, т.е.:

  (3)

Установено е, че човек губи способността си да различава две съседни точки, ако разликата в яркостта им е под 1% (това зависи от околната осветеност), т.е минималният праг на зрителното възприятие е[1]:

   

Система и последователност за създаване и възпроизвеждане на изображения

Както стана въпрос, компютърните изображения се представят като набор от точки/пиксели, всяка описваща се с информация за мястото си в картината, яркост и цвят. За да бъде растеризирано едно изображение и превърнато в цифрови данни, широко известно е, че се използват светочусвтвителни сензори (CCD и не особено правилно наричаните CMOS. CMOS е технология за производство на интегрални схеми, малка част от които са сензори за създаване на изображения). И така с помощта на оптическа система (обектив) върху сензора за определено време се проектира изображение на оригинала. Сензорът е съставен от голям брой индивидуални фотоприемници, всеки един от които (на практика група от няколко) е отговорен за изработване на данните за един пиксел. Попадналата върху всеки приемник светлина води до създаването на електрически заряд, който се преобразува в напрежение, а то от своя страна в цифров код. Каква е математическата страна на този процес?

Добре е да разделим процеса, който пренася изображението от оригнал до копие на няколко етапа. Те са едни и същи и в тях участват едни и същи устройства винаги, когато наблюдаваме заснето изображение с помощта на компютър. Можем да разграничим: обект (оригинал), заснемащо устройство (камера) - 1, устройства за предаване и/или съхранение на изображението - 2, възпроизвеждащи устройства (видеоконтролер - 3 и монитор - 4) и наблюдател. Няма принципна разлика независимо дали наблюдаваме обект в реално време или просто се наслаждаваме на някоя снимка. Частично изключение представлява само случаят, когато изображението е изкуствено генерирано, например страницата, която четете в момента. В този случай оригиналът е заменен от виртуално описание (HTML), а записващото устройство в известен смисъл отсъства. И така, изброените устройства могат да бъдат представени по следния начин:

фиг. 1 

Всяко устройство се характеризира със своята предавателна характеристика, която може да бъде представена във вида:

  (4)

където Lin е входната величина яркост или пропорционална на нея, а Lout - изходната, тъй като в крайна сметка от оригинал до копие трябва да предадем именно информация за яркост, точка по точка. k е коефициент, характерен за всеки етап и всеки основен цвят.

Как се изчислява стойността на всеки един пиксел от изображението във всяко едно от горните устройства? Под стойност разбираме числото, което съответства на яркостта на точката и което ще бъде предадено на разстояние или съхранено, за да може в последствие от него и всички останали такива на нашия монитор да бъде възстановено изображението. Нека за простота да приемем, че става въпрос за монохромно изображение и така да боравим само е едно число за пиксел вместо с три за трите съставни цвята (R, G, B). Защо с три? Защото в компютърната техника всяка точка от изображение, което не е монохромно, се представя посредством яркостите (в тази точка) на три основни цвята: червен - R, зелен - G и син - B. Тази информация е достатъчна да бъде пресъздаден произволен цвят и яркост. Ограниченията идват единствено от използваните математически преобразувания.

И така, ако за момент забравим за цвета, в идеалния случай, за да получим копие, което точно съответства на оригинала, яркостта на всяка точка от копието трябва да бъде точно пропорционална на яркостта на съответната точка от оригинала. Това означава, че общата предавателна характеристика на системата от фиг. 1  трябва да бъде линейна. И така, какво правим:

1a. Първоначалното преобразуване е дело на сензора в камерата, който превръща осветеността на всяка точка (пиксел) в число. На практика за формиране на един пиксел от изображението се използва група от няколко фотоприемника в сензора. Големината на числото стойност на пиксела зависи от това колко степени на яркост искаме да предадем: при един бит те са 2, при 2 - 4 и т.н., т.е. броят нива, които можем да предадем, зависи от това, в колко бита кодираме или е равен на 2n, където n е разредността на кода. Преобразуването в повечето сензори е линейно и 12-битово, т.е. обхватът от яркости се разделя на 212 броя (4096) еднакви интервали и на всеки един се присвоява стойност. Всеки пиксел получава стойност според това в кой интервал попада яркостта му.

В един идеален свят щяхме да съхраним тези стойности/числа или веднага да ги възпроизведем, т.е. техните съотношения щяха да се запазят, докато достигнат до потребителя съгласно условието предавателната характеристика на цялата система от оригинал до копие да бъде линейна. Идеалният свят обаче не отчита особеността на нелинейното човешко възприятие, за която стана въпрос в началото. Тя е пряко следствие от закона на Вебер и Фехнер: зрението притежава нелинейна чувствителност и е по-чувствително към слабата светлина, отколкото към силната. Оттук следват два недостатъка на първоначалното линейно кодиране. Недостатък 1: Броят на кодовете е твърде голям. Добавяйки цвят, за един пиксел са ни необходими 3 12-битови числа, т.е. общо 36 бита. В крайна сметка това води до твърде голям обем данни за съхранение и обработка. Използваните и днес методи са разработвани в края на 80-те и началото на 90-те години, когато обемът на хард дисковете, ако изобщо ги имаше, не се измерваше в терабайтове, да не говорим за предаването на същите данни в реално време, което и днес е проблем; Недостатък 2: Ако намалим разредността на кода например до 8 бита, т.е. разделим видимия обхват от яркости на 256 еднакви нива, на места стъпките ще са твърде големи и видими. Това отново е следствие от закона на Вебер и Фехнер: относителната разлика в яркостта на две съседни точки трябва да е по-малка или равна на 1%, за да бъде незабележима, а ние искаме плавен и незабележим преход между яркостта на отделните точки от изображението. Така, ако се върнем на линейното кодиране с 8 бита, при големи яркости разликите в стойностите на пикселите биха били твърде малки, което води до неефективно използване на обхвата от стойности, а при малки яркости пък относителната разлика в стойностите ще надхвърля 1% и това ще доведе до забележими разлики в яркостта на възпроизведените съседни точки. Така в опит да избегнем недостатък 1 и недостатък 2 стигаме до практическа стъпка, отново в камерата:

Фиг 2.

1b. Стойностите на всеки пиксел се преизчисляват с помощта на нелинейна експоненциална функция от вида:

  (5)

D0 и D1 са съответно първоначалната и преизчислената стойности. Така ниските стойности на осветеност, където зрението е по-чувствително, се квантуват на по-малки интервали, а по-високите, където зрението е по-нечувствително, на по-големи. Прави впечатление, че функцията (5) е точно обратна на (4).

Начинът на преобразуване на яркост в число определя т.нар. цветно пространство (color space). Различите цветни пространства се определят от стойностите на γ, като за най-разпространеното sRGB тя е 2.2.

В крайна сметка, използвайки експоненциално кодиране, обхватът от 256 стойности на 8-битовия код се оказва достатъчен без да се получават твърде големи и забележими изменения, т.е. над 1% или пък твърде малки, които да водят до неефективно използване на наличния брой кодове.

Все пак използването на 8 бита води и до стесняване на динамичния обхват, т.е. разликата между най-ниската и най-високата осветеност, която можем да запишем. Така най-широко използваният файлов стандарт/формат JPEG, създаден през 1992 г., води до чувствително ограничение, налагайки своето 8 битово кодиране на съвременните камери с 12-битови сензори. Затова наред с формата JPEG (стандарт за съхранение на изображения) днес се използват и по-модерни формати и цветни пространства (стандарти за преобразуване на яркости в числа/код).

В крайна сметка общо за функцията на преобразуване на етап 1 можем да запишем:

  (6)

където Dout е полученият цифров код, Lin - яркостта на всяка преобразувана точка, k1 - коефициент, а γ = 2.2. Фиг. 2 дава идея за общото преобразувание от етапи 1a и 1b. Вижда се как:

  (7)

или с други думи: за да получим едно и също изменение в кода, ако яркостта е малка, е достатъчно тя да се измени съвсем малко, а ако е голяма - значително повече. Или още: измененията в малката яркост изменят кода повече, отколкото измененията в голямата.

Горното преобразувание е известно като RAW конверсия и в същността си е едно и също независимо дали се извършва в телефон, камера-сапунерка или в свръхмодерен компютър, като изображението сме записали в няколко десетки мегабайта RAW (груб, необработен) файл от камера за хиляди парични единици.

2. Получените в стъпки 1a и 1b стойности на пиксели се съхраняват във файл или се предават като он-лайн стрийм. На този етап те почти не се променят. Единствената възможна промяна е от компресия на данните, която почти винаги се използва, но такава промяна не е съществена (постигането на което е и основен проблем при компресирането на данни). Достигаме до възпроизвеждането на нашето изображения, което се извършва от следващите две устройства.

3. Независимо дали става в реално време или се използва някой създаден преди години файл, видеоконтролерът преобразува цифровите данни за стойността на всеки пиксел в аналогов или цифров сигнал, който се подава на монитора. Дори при съвременните LCD монитори или плазмени телевизори, които са почти изцяло цифрови, в много случай входният сигнал е аналогов (VGA). Това е продиктувано от желание за съвместимост с по-старите устройства. Все пак вече доста се използва и цифров сигнал (DVI, HDMI). При преобразуването, освен видът на сигнала, се променят и стойностите на пикселите отново посредством експоненциална функция от вида (4). Това се извършва с помощта на таблица, наречена LUT (look-up table) и за него ще стане въпрос по-късно. Следва основното преобразуване, обратно на това от стъпка 1:

4. Първите създадени монитори са използвали електронно-лъчеви (катодно-лъчеви) тръби (CRT), които имат специфична предавателна характеристика: зависимостта на яркостта на светене на определена точка от екрана от големината на входното напрежение е точно обратна на (6), като γ ≈ 2.5, т.е.:

  (8)

където Lout е яркостта на светене, Uin - входното напрежение, а k4 - коефициент. Ако използваме LCD монитор или плазмен телевизор и им подаваме цифров сигнал, нищо на практика не се променя. Съвременните LCD панели имат по-различна предавателна характеристика, която е S-образна, но с допълнителни преобразувания (LUT) в съвременните монитори тя се довежда до (8) с достатъчно добро приближение. В по-ранните модели това не беше така.

И така, преобразуванието в монитора възстановява измененията в изображението, които бяха внесени на етап 1b и до голяма степен свежда общата предавателна характеристика на системата за създаване и възпроизвеждане на изображения до линейна. Ако се върнем на 1b: там продиктувано от голямата чувствителност на окото при малки осветености, за малко относително изменение на яркостта предвидихме голямо изменение на кода. В монитора става обратното: голямо изменение на кода в областта на малките яркости води до малко изменение на яркостта на светене на съответния пиксел.

За общата предавателна функция на етапи 3 и 4 можем да запишем, както стана въпрос, обратното на (6):

  (9)

където Lout е яркостта на светене на определена точка от екрана, Din - стойността на пиксела в цифровото изображение, k34 - коефициент, γ ≈ 2.5, а за x ще стане въпрос по-долу.

Гама корекция

Да се върнем на етап 3, т.е. преобразуванията, извършвани във видеоконтролера. Той не само преобразува един вид сигнал в друг - цифров в аналогов (преобразувание съществуващо още от зората на компютърната техника и масово прилагано и в XXI век, независимо от съществуването на DVI и  HDMI), но променя и самия сигнал. Тази промяна има пряка връзка с особеностите на човешкото зрение, този път зависимостта на зрителното възприятие от околната осветеност. Още в началото на XX век е установено, че ние възприемаме едно и също изображение по различен начин, ако околната светлина е различна. Това е станало в първите киносалони, където е било установено, че колкото светлината около зрителя е по слаба, толкова средните тонове на изображението трябва да бъдат "потъмнени." В компютъра това става все с помощта на същата предавателна функция от вида (4) като γ ≈ 1.25 - наричаме го гама корекция. Тази стойност важи за общата предавателна функция на системата от фиг. 1 от оригинал до копие и е избрана с презумпцията, че никой не ползва компютър при много ярка околна светлина (не е възможно с наличната технология) или при пълна тъмнина, а при някакви усреднени, умерени условия, често наричани "dim surround" - "приглушено околно осветление."

И така: приемайки, че всяко от устройствата на фиг. 1 има предавателна функция от вида (4), то и общата функция е от същия вид. Ако не отчитахме околната осветеност, то тя щеше да бъде линейна, т.е. γ = 1. Отчитайки обаче необходимата гама корекция, за общата γ можем да запишем:

  (10)

където с x е означена γ на видеоконтролера. Така, ако желаем да получим обща гама корекция 1.25, то във видеоконтролера е необходима γ = 1.1.

(Хардуерно) калибриране

Какво всъщност става след като похарчите няколко стотин долара за колориметър? Имате няколко стотин долара по-малко. А освен това? Той променя предавателната функция на видеоконтролера, която се осъществява с една таблица, наречена look-up table или LUT, за която вече стана въпрос. Всъщност таблиците са три, както и предавателните функции са три и са различни, всяка една за всеки от основните съставящи цветове на изображението (R, G, B).

Реализирането на определена функция с LUT е елементарно дискретно преобразувание: LUT е една проста таблица, в която за всяка възможна стойност на входния код е записана предварително изчислена стойност на изходния според желаната предавателна функция.

Преди корекцията в трите LUT са зададени стойности, съответстващи на преобразуване според експоненциалната функция от вид (4). При коригиране софтуерът на колориметъра преизчислява тези стойности и в идеалния случай те биха съответствали отново на експоненциална функция, но с друга γ според желаната обща корекция. В реалния свят обаче при несъвършен монитор коефициентите отразяват нови три функции, които само наподобяват експоненти, но в действителност са нещо по-сложно и отчитат отклоненията на предавателните функции на монитора за всеки основен цвят от теоретичните идеални функции. Ето защо този вид калибриране е много по-качествено от простото нагласяване на яркост и контраст, което не може да коригира отклоненията във формата на предавателните функции от теоретичната експонента.

Както стана въпрос, по аналогичен начин в съвременните LCD монитори S-образната им предавателна характеристика е коригирана и сведена до необходимата експоненциална такава  с γ = 2.5.

Какво всъщност правят органите за управление, не само на монитора

След като вече изяснихме как видеоконтролерът и мониторът преобразуват стойностите на пикселите по начин, обратен на RAW конверсията, нека да добавим един нов член в общата им предавателна характеристика - L0. Той играе съществена роля и отразява физическите особености на монитора:

  (11)

И така, какво е действието на регулаторите за яркост и контраст, независимо дали те се намират на монитора или са софтуерни контроли в драйвера на видеоконтролера? Това е показано на фиг. 3.

Фиг 3.

1. "Яркост" при LCD мониторите просто променя силата на източника на светлина, който се намира зад LCD панела, независимо дали това са класическите луминисцентни лампи или по-модерната LED подсветка. Подобно е и действието му при CRT монитор или плазмен телевизор - променя се общата сила на светене и долният праг L0 (11), а това е равнозначно на изместване на предавателната характеристика нагоре или надолу. Тук трябва да се отбележи следното: ако яркостта е твърде висока, то дори и при входна величина 0 ще се наблюдава светене (L0 > 0), коетo разбира се е нежелателно.

2. "Контраст" променя наклона на предавателната характеристика. Колкото той е по-голям, толкова по-силно светене ще наблюдаваме при една и съща входна величина. Максималната сила нa светене на всеки монитор е ограничена от конструкцията му до Lmax, така че ако бъде зададен прекалено висок контраст, то това ще доведе до "насищане" на характеристиката след определена стойност, тъй като максималната сила на светене не може да бъде надвишена. "Насищането" на характеристиката не е нищо друго освен загуба на информация - всички точки с яркост над определен праг (DL) ще бъдат неразличими една от друга.

3. "Гама" променя кривината на предавателната характеристика, отразявайки се на средните тонове без да променя най-тъмните и най-светлите. Това е начинът за адаптиране на цялата система за възпроизвеждане на изображения (разглеждаме етапи 3 и 4) към заобикалящата ни светлина. Затова не е чудно, че качествените колориметри измерват и околната осветеност.

Заключение

Нека сега да добавим: Тъй като обикновено наблюдаваме цветни изображения, умножете всичко казано дотук по три - информацията за всеки отделен пиксел се състои от стойности за всеки един от трите основни съставящи цвята: червен, зелен и син (R, G, B). За всеки един от тях в пълна степен важи казаното до тук за монохромно изображение. В допълнение, за получаване на вярно изображение е необходим и правилен баланс между трите цветови съставки. Те се характеризират с определено фиксирано отношение помежду си - като минимум това са различни стойности не коефициента k за всеки един от етапи 1, 3 и 4 за всеки съставен цвят - добавете още сметки.  Сега умножете вече умноженото по три с добавените сметки за цвят още по няколко милиона, колкото вероятно е броят на пикселите в нашето изображение и ще получите представа за обема изчисления необходим за създаването на една проста картинка.

Нека и да повторим: казаното дотук важи за цветно пространство sRGB и файлов формат JPEG, въпреки че основните принципи са в сила за почти всички начини на преобразуване яркост-код-яркост и предаване на цвят.

А можем ли да обобщим повечето от съдържанието тази статия в едно изречение? Можем:

За да получим код от яркост използваме: (стойност на пиксел) = (яркост)1/γ, а за да получим яркост от код: (яркост) = (стойност на пиксел)γ.

 

Източници:

[1]. Günther Wyszecki, W. S. Stiles Color Science: Concepts and Methods, Quantitative Data and Formulae (Wiley Series in Pure and Applied Optics);

[2]. A Standard Default Color Space for the Internet: sRGB, Version 1.10, November 5, 1996. ICC;

[3]. ISO/IEC JTC 1/SC 29 (2009-05-07). "ISO/IEC JTC 1/SC 29/WG 1 – Coding of Still Pictures (SC 29/WG 1 Structure)"