4.13. Формати пікселів¶
На фінальному етапі конвеєра ISP кожен піксель упаковується в певне байтове представлення в пам’яті. Вибраний формат визначає баланс між якістю зображення, розміром пам’яті та тим, як наступний код зчитує байти. Декілька форматів є домінуючими.
4.13.1. RAW (Bayer)¶
Виведення за замовчуванням — сирий Bayer: той самий мозаїчний одноканальний піксель, який виробляє датчик. Один байт на піксель, розміщений у шаблоні Bayer: червоний і зелений чергуються на парних рядках, зелений і синій — на непарних. Деbayvering не застосовувався, тому кожна клітинка досі містить лише значення, що пропустив її кольоровий фільтр.
Сирий Bayer займає втричі менше пам’яті, ніж готове тривимірне зображення RGB — один байт на піксель проти трьох — і цикли ISP не витрачалися на debayvering або перетворення. Платою є те, що код користувача повинен виконати debayvering самостійно, перш ніж можна запустити будь-яку кольорово-орієнтовану обробку.
4.13.2. RGB888¶
RGB888 — це природний готовий формат для кольорового зображення: три байти на піксель, по одному для червоного, зеленого та синього каналів по 8 біт на канал. Двадцять чотири біти на піксель і трохи менше сімнадцяти мільйонів різних кольорів.
RGB888 є концептуальним еталоном для готових кольорових зображень, і більшість зовнішнього програмного забезпечення працює з ним. На вбудованому обладнанні основний недолік — розмір пікселя 24 біти: він не є кратним розміру машинного слова процесора, незручний для вирівнювання в пам’яті, і на 50% більший за наступний формат.
4.13.3. RGB565¶
RGB565 упаковує кожен піксель у два байти: п’ять біт червоного, шість біт зеленого, п’ять біт синього. Додатковий біт зеленого відображає вищу чутливість ока до зеленого кольору і відповідає подвійній вазі зеленого каналу в шаблоні Bayer.
RGB565 є стандартним форматом кольору на OpenMV Cam. Два байти на піксель забезпечують 16-бітне вирівнювання, яке відповідає природній ширині даних мікроконтролера — завантаження, зберігання і арифметика пікселів виконуються на повній швидкості, а багато операцій можуть обробляти пару пікселів одночасно. 24-бітні пікселі RGB888 не вирівнюються таким чином і платять за кожен доступ. Економія пам’яті на 33% порівняно з RGB888 також накопичується: QVGA (320 x 240) займає 150 КБ у RGB565 проти 225 КБ у RGB888, і розрив зростає зі збільшенням роздільної здатності.
Компроміс — 65 тисяч різних кольорів замість сімнадцяти мільйонів. Для більшості завдань технічного зору різниця непомітна, оскільки алгоритми все одно зводять кадр до порогових або виявлених меж представлень, що відкидають більшу частину кольорових деталей. При перегляді людиною відсутні біти проявляються у вигляді легкого смугастості в плавних кольорових градієнтах, але не як щось, що одразу помічає оком.
4.13.4. YUV422¶
YUV422 розділяє колір кожного пікселя на значення яскравості (Y) і два значення кольоровості (U і V), а потім субдискретизує кольоровість, оскільки людський зір значно менш чутливий до варіацій кольору, ніж до варіацій яскравості. Кожен піксель містить власний Y, але сусідні пари пікселів спільно використовують одне U та одне V. Байтове розміщення кожної пари займає чотири байти — Y0, U, Y1, V — що в середньому дає два байти на піксель, ідентично RGB565.
Хоча два байти ті самі, що й у RGB565, їхній зміст різний. Канал Y сам по собі є готовим 8-бітним зображенням у відтінках сірого, яке власне й споживає більшість класичних алгоритмів технічного зору (виявлення меж, зіставлення шаблонів, аналіз плям); канали U і V несуть кольорову інформацію для невеликої кількості алгоритмів, яким вона потрібна.
YUV422 — правильний вибір, коли конвеєру потрібні обидва: алгоритм на ранньому етапі, що читає лише Y, а потім пізніший, що використовує кольоровість для більш детальних кольорових рішень — адже значення Y знаходяться прямо тут і готові до використання без перетворення кольорового простору.
4.13.5. Відтінки сірого¶
Відтінки сірого — один байт на піксель: лише значення яскравості, без кольору. Це найменший готовий формат — удвічі менший за RGB565 і YUV422, утричі менший за RGB888.
Більшість класичних алгоритмів технічного зору все одно працюють із відтінками сірого, тому скидання кольорового каналу безпосередньо на виході датчика часто є найпростішим і найефективнішим за пам’яттю вибором. Виявлення меж, пошук ліній, аналіз плям, декодування QR-кодів, зіставлення шаблонів і виявлення AprilTag — усе це виконується на зображеннях у відтінках сірого й отримує переваги від меншого буфера.
4.13.6. Інші формати¶
Деякі формати, які може виробляти OpenMV Cam, не виходять із конвеєра ISP у звичайному потоці.
BINARY — один біт на піксель: найменше можливе представлення. Використовується для порогових зображень, буферів маски та виводу будь-якої операції, що розрізняє лише відповідність і невідповідність у кожному пікселі.
JPEG — стиснений кольоровий формат. Деякі датчики мають вбудований апаратний JPEG-кодер і можуть безпосередньо передавати кадри, стиснуті в JPEG; для датчиків без нього мікроконтролер запускає JPEG-кодер над готовим кадром RGB або у відтінках сірого після ISP. В будь-якому випадку на виході — потік JPEG, корисний для збереження кадрів на носій або передачі їх через канал із обмеженою пропускною здатністю.
PNG — формат стиснення без втрат. Датчики не виробляють PNG безпосередньо; мікроконтролер стискає готовий кадр RGB або у відтінках сірого на вимогу. Корисний, коли важлива пропускна здатність або місце зберігання, але стиснення з втратами, яке застосовує JPEG, відкинуло б інформацію, потрібну програмі пізніше.