4.13. Piksel biçimleri

ISP işlem hattının son aşaması her pikseli bellekte belirli bir bayt düzenine paketler. Seçilen biçim, görüntü kalitesi, bellek boyutu ve alt akıştaki kodun baytları nasıl geri okuduğu arasında bir ödünleşim sunar. Birkaç biçim baskın konumdadır.

4.13.1. RAW (Bayer)

Varsayılan çıkış ham Bayer’dir – sensörün ürettiği, piksel başına tek kanallı mozaiğin aynısı. Piksel başına bir bayt olup Bayer örüntüsünde yerleştirilir: çift satırlarda kırmızı ve yeşil dönüşümlü, tek satırlarda yeşil ve mavi dönüşümlü. Hiçbir debayer işlemi uygulanmadığından, her hücre yalnızca kendi renk filtresinin geçirdiği değeri tutar.

Ham Bayer, tamamlanmış üç kanallı bir RGB görüntüsünün üçte biri kadar bellek kullanır – piksel başına üç bayt yerine bir bayt – ve onu debayer etmek ya da dönüştürmek için hiçbir ISP döngüsü harcanmamıştır. Bunun bedeli, herhangi bir renk farkındalıklı işleme çalışmadan önce debayer işlemini kullanıcı kodunun kendisinin yapmak zorunda olmasıdır.

4.13.2. RGB888

RGB888, renkli bir görüntü için doğal tamamlanmış biçimdir: piksel başına üç bayt, kanal başına 8 bit ile kırmızı, yeşil ve mavi kanalların her biri için birer bayt. Piksel başına yirmi dört bit ve on yedi milyondan biraz az sayıda farklı renk.

RGB888, tamamlanmış renkli görüntüler için kavramsal başvurudur ve karttan bağımsız çoğu yazılım bu dili konuşur. Gömülü donanımda başlıca dezavantajı 24 bitlik piksel boyutudur – işlemcinin sözcük boyutunun katı değildir, bellek hizalaması açısından zahmetlidir ve bir alt biçimden %50 daha büyüktür.

4.13.3. RGB565

RGB565 her pikseli iki bayta paketler: beş bit kırmızı, altı bit yeşil, beş bit mavi. Fazladan yeşil bit, gözün yeşile olan daha yüksek duyarlılığını yansıtır ve Bayer örüntüsündeki yeşil kanalın iki katlı ağırlığıyla örtüşür.

RGB565, OpenMV Cam üzerindeki varsayılan renk biçimidir. Piksel başına iki bayt 16 bit hizalıdır ve bu, MCU’nun doğal veri genişliklerine uyar – piksel yüklemeleri, depolamaları ve aritmetiği tam hızda çalışır ve birçok işlem bir çift pikseli aynı anda işleyebilir. RGB888’in 24 bitlik pikselleri bu şekilde hizalanmaz ve her erişimde bir bedel öder. RGB888’e göre %33’lük bellek tasarrufu da birikir: QVGA (320 x 240) RGB565’te 150 KB iken RGB888’de 225 KB’dir ve fark çözünürlükle birlikte büyür.

Ödünleşim, on yedi milyon yerine altmış beş bin farklı renktir. Çoğu makine görüşü görevi için bu fark görünmezdir, çünkü algoritmalar çerçeveyi zaten renk ayrıntısının çoğunu atan eşiklenmiş veya kenar tespit edilmiş gösterimlere indirger. İnsan gözüyle izlemede eksik bitler, düzgün renk geçişlerinde hafif bant oluşumu olarak görünür ancak gözün hemen fark edeceği bir şey olarak değil.

4.13.4. YUV422

YUV422, her pikselin rengini bir parlaklık (luminans) değerine (Y) ve iki renklilik (krominans) değerine (U ve V) ayırır ve ardından krominansı alt örnekler; çünkü insan görüşü renk değişimine parlaklık değişimine kıyasla çok daha az duyarlıdır. Her piksel kendi Y değerini taşır, ancak komşu piksel çiftleri tek bir U ve tek bir V değerini paylaşır. Her çift için bayt düzeni dört bayttır – Y0, U, Y1, V – bu da ortalama piksel başına iki bayta denk gelir; RGB565 ile aynıdır.

Ancak iki bayt RGB565’tekinden farklı şeyler ifade eder. Tek başına Y kanalı, çoğu klasik makine görüşü algoritmasının (kenar tespiti, şablon eşleştirme, nokta (blob) analizi) gerçekte tükettiği, kullanıma hazır 8 bitlik bir gri tonlama görüntüsüdür; U ve V kanalları ise buna ihtiyaç duyan az sayıdaki algoritma için renk bilgisini taşır.

YUV422, işlem hattının her ikisine de ihtiyaç duyduğunda doğru seçimdir – yalnızca Y’yi okuyan erken aşamalı bir algoritmayı, daha ince renk kararları için kromayı kullanan daha sonraki bir aşamanın izlemesi gibi – çünkü Y değerleri bir renk uzayı dönüşümüne gerek kalmadan tam orada kullanıma hazır halde durur.

4.13.5. Gri tonlama

Gri tonlama piksel başına bir bayttır: yalnızca parlaklık değeri, hiç renk yoktur. En küçük tamamlanmış biçimdir – RGB565 ve YUV422’nin yarısı, RGB888’in üçte biri büyüklüğünde.

Çoğu klasik makine görüşü algoritması zaten gri tonlama üzerinde çalışır, dolayısıyla renk kanalını doğrudan sensörden çıkarmak çoğu zaman en basit ve en bellek verimli seçimdir. Kenar tespiti, çizgi bulma, nokta (blob) analizi, QR kod çözme, şablon eşleştirme ve AprilTag tespitinin tümü gri tonlama üzerinde çalışır ve daha küçük arabellekten yararlanır.

4.13.6. Diğer biçimler

OpenMV Cam’in üretebildiği birkaç biçim, normal akışın bir parçası olarak ISP işlem hattından çıkmaz.

BINARY piksel başına bir bittir – mümkün olan en küçük gösterim. Eşiklenmiş görüntüler, maske arabellekleri ve her pikselde yalnızca eşleşme ile eşleşmeme arasında ayrım yapan herhangi bir işlemin çıktısı için kullanılır.

JPEG sıkıştırılmış bir renk biçimidir. Bazı sensörler yonga üzerinde bir JPEG kodlayıcı içerir ve JPEG ile sıkıştırılmış çerçeveleri doğrudan teslim edebilir; böyle bir kodlayıcısı olmayan sensörler için, MCU, ISP’den sonra tamamlanmış bir RGB veya gri tonlama çerçevesi üzerinde bir JPEG kodlayıcı çalıştırır. Her iki durumda da çıktı bir JPEG bit akışıdır; çerçeveleri depolamaya kaydetmek veya bant genişliği sınırlı bir bağlantı üzerinden göndermek için yararlıdır.

PNG kayıpsız sıkıştırılmış bir biçimdir. Sensörler PNG’yi doğrudan üretmez; MCU, tamamlanmış bir RGB veya gri tonlama çerçevesini talep üzerine sıkıştırır. Bant genişliği veya depolama önemli olduğunda ancak JPEG’in uyguladığı kayıplı sıkıştırmanın uygulamanın daha sonra ihtiyaç duyacağı bilgileri atacağı durumlarda yararlıdır.