Kaç piksel yeter? Nyquist'in sahadaki karşılığı
Bir kameralı robot hücresi kurarken ilk sorduğumuz sorulardan biri şuydu: kaç megapiksel kamera alalım?
Soru gayet basitti. Kamera kataloğunda karşına çıkan ilk sayı megapiksel, fiyat da büyük ölçüde ona bağlı. Sorun soruda değil, tek başına cevaplanamıyor olmasında.
Bu benim kameralı ilk projemdi. Aşağıda anlattıklarım genel bir doğru değil, o projede kendi kafamdaki karışıklığı çözme hikâyem. Daha düzenli ilerleyen, hesabı baştan doğru yapan ekipler elbette vardır.
Hücrede iş şuydu: konveyörle gelen bir parçayı altı eksenli bir robot alıp bir sonraki istasyona bırakacaktı. Kamera robotun kolunun üzerindeydi; robot parçanın üstüne geçiyor, kamera bakıyor, parçanın konumunu ve açısını çıkarıyor, robot da bu bilgiye göre inip parçayı tutuyordu. Yani kameradan beklediğimiz şey “bir şey var mı” değil, “tam olarak nerede” idi.
Önce en basit hesap
Kamera seçimi için bilmen gereken ilk sayı megapiksel değil, bir pikselin gerçek dünyada kaç milimetreye denk geldiği. Bunun için görüş alanını piksel sayısına bölmen yeterli.
Bizim hücrede görüş alanı kabaca 700 × 650 mm idi ve beş megapiksel bir kamera kullanıyorduk, sensörü 2448 × 2048:
700 mm / 2448 piksel ≈ 0,29 mm / piksel
Yani her piksel yaklaşık üç yüz mikronluk bir alanı görüyordu.
Not: bu hesapta çalışma mesafesi geçmiyor. Görüş alanını belirleyen şey, lensin odak uzaklığı ile parçaya olan mesafenin birlikte sonucu — yani mesafe zaten görüş alanının içinde saklı. Lens seçerken mesafe hesabına gireceksin, piksel hesabına değil.
Buraya kadar her şey basit bölme işlemi. Benim takıldığım yer bundan sonrası oldu.
Yanlış hatırladığım cümle
Elimde 0,29 mm/piksel var. Buradan çok doğal görünen bir sonuç çıkıyor: demek ki 0,29 mm mertebesinde iş yapabilirim.
Bu cümleyi uzun süre böyle kurdum. Yanlış olduğunu değil, aslında üç ayrı cümlenin birbirine karışmış hali olduğunu sonradan anladım. Piksel boyunu bulduktan sonra sorman gereken soru tek değil, üç tane:
- Bu boyutta bir şeyin varlığını fark edebilir miyim? — tespit
- Bu boyuttaki iki şeyi birbirinden ayırabilir miyim? — ayırt etme
- Bu boyuttaki bir şeyi ölçebilir, yerini söyleyebilir miyim? — ölçme
Üçünün cevabı da farklı ve şaşırtıcı biçimde üçü de aynı yöne gitmiyor. Sırayla gidelim.
Soru 1: Tespit — evet, hem de rahatça
Buradan itibaren sayılarla konuşacağım, önce onları netleştireyim.
Siyah-beyaz bir endüstriyel kamerada her piksel tek bir sayı üretir; 8 bitlik bir kamerada bu sayı 0 ile 255 arasındadır. Bu bir renk değil, parlaklık seviyesi. 0 “hiç ışık gelmedi” demek, 255 “piksel doydu” demek, aradaki her değer bir gri tonu.
Önemli olan şu: piksel bir nokta değil, küçük bir alan ve o alana düşen ışığı toplar. Alanının bir kısmı karanlıkta kalıyorsa toplanan ışık o oranda azalır.
Kolaylık olsun diye pikselin 1 mm gördüğünü varsayalım, yani alanı 1 mm². Beyaz bir zeminde aradığımız siyah hedef parçamız da tam 1 × 1 mm olsun ve tam pikselin üzerine otursun. Piksel tamamen kapanır, değeri 0 olur, etrafı 255’tir. Ortada tartışma yok.
Peki parça pikselden küçük olsaydı? Diyelim 0,5 × 0,5 mm. Burada dikkat edilecek nokta şu: önemli olan çizgisel boyut değil, alan oranı.
parçanın alanı = 0,5 × 0,5 = 0,25 mm²
pikselin alanı = 1 × 1 = 1 mm²
karanlık kalan = 0,25 / 1 = %25
aydınlık kalan = 1 − 0,25 = 0,75
Yani pikselin dörtte biri kapanmış, dörtte üçü hâlâ beyaz zemini görüyor. Toplanan ışık da dörtte üçüne düşüyor:
255 × 0,75 ≈ 191
Çizgisel boyut yarıya inmişti ama alan dörtte bire indi — kare aldığın için küçülme hızlı gidiyor. Bu, sezgiyi en çok yanıltan noktalardan biri.
Sonuç olarak: etraf 255, o piksel 191. Aradaki 64 seviyelik fark tipik gürültünün çok üzerinde, yani parça açık ara tespit edilebilir.
Peki ne kadar küçüğe kadar?
Bu soru bende de oluştu ve cevabı gürültü belirliyor.
İyi ışıkta düzgün bir endüstriyel kamerada sensör gürültüsü tipik olarak 1-3 seviye civarında oynar. Bir tespitin güvenilir sayılması için sinyalin gürültünün en az beş katı olmasını istersin. Gürültü 2 seviyeyse, aradığın düşüş en az 10 seviye olmalı:
gereken alan oranı = 10 / 255 ≈ %4
çizgisel karşılığı = √0,04 = 0,2
Yani tam siyah bir parça, pikselin beşte biri kadar bir çizgisel boyutta bile tespit edilebilir. 1 mm’lik piksel için bu 0,2 × 0,2 mm demek.
Ama bu en iyi durum. Parça dört pikselin köşesine denk gelirse sinyal dörde bölünür, aynı güveni sağlamak için alanın dört katı gerekir — çizgisel boyut ikiye katlanır. Gerçekçi aralık kabaca pikselin beşte biri ile yarısı arası.
İki de ciddi uyarı var:
Hesap parçanın tam siyah, zeminin tam beyaz olduğunu varsayıyor. Kontrast yarıysa gereken alan iki katına çıkar.
Daha önemlisi, sahada sınırı genellikle sensör gürültüsü belirlemiyor. Zemin 255 değil; yüzey dokusu, ışığın dağılımı ve parçanın parlaklığı yüzünden 235 ile 250 arasında dolaşıyor olabilir. O zaman senin gerçek gürültün 2 değil 15’tir ve tespit sınırın buna göre kayar. Aydınlatmayı düzeltmek, kamera değiştirmekten neredeyse her zaman daha çok kazandırıyor.
Bu arada bu sadece teorik bir itiraz değil — gökbilimde tam olarak bu yapılıyor. Bir yıldız görüntüde tek pikselin çok küçük bir kesrini aydınlatır, hiçbir anlamda “çözülmüş” değildir, ama tespit edilir. Üstelik uzun pozlama ve çok sayıda kareyi üst üste toplayarak gürültüyü aşağı çektikleri için sınırı bizim hattımızdan çok daha aşağı taşıyabiliyorlar.
Yani birinci sorunun cevabı rahat: piksel boyundan hayli küçük şeylerin varlığını fark edebilirsin.
Soru 2: Ayırt etme — teorem tam burada
Şimdi aynı 1 mm’lik parçayı ızgaraya hizalı bırakmayalım. Gerçek hayatta parça senin piksel ızgarana göre hizalanmıyor; nereye düşerse düşüyor.
Parça yarım piksel kayarsa iki pikseli yarı yarıya kaplar, ikisi de 128 olur. İki eksende birden yarım piksel kayarsa dört pikselin köşesine denk gelir, her birini dörtte bir kaplar, dördü de 191 olur.
Yani tek bir parça, sadece nereye düştüğüne göre şu üç görüntüden birini üretiyor:
- bir tane 0 değerinde piksel
- iki tane 128
- dört tane 191
Üçü de “burada bir şey var” diyor, evet. Ama üçü birbirinden çok farklı görüntüler ve hiçbiri diğerinden ayırt edilebilir bir kural taşımıyor. Şimdi buna bir eşik koy — mesela “100’ün altındaki piksel kusurdur”. Ortaya denk gelen parçayı yakalarsın, yarım piksel kayanı kaçırırsın. Aynı parça, aynı kamera, aynı ışık; tek değişken parçanın nereye düştüğü ve o değişkeni kontrol edemiyorsun.
Beni en çok uğraştıran arıza tipi bu oldu. Hiç yakalayamamak bence dürüst bir arıza — fark edilir, sebebi aranır, çözülür. Bazen yakalamak ise haftalarca sürüyor ve herkes ışıktan, tozdan, parçadan şüphelenirken sorun geometridedir.
İki ayrı nesneyi ayırmaya çalıştığında iş daha da sertleşiyor. Bir pikselin içinde iki ince çizgi varsa ve toplam karanlık alan pikselin %40’ıysa, kamera 153 okur. Tek bir kalın çizgi de aynı alanı kaplıyorsa, o da 153 okur. İki farklı gerçeklik, tek bir sayı. Aradaki fark hiç kaydedilmemiştir ve hiçbir matematik kaydedilmemiş bilgiyi geri getiremez.
Nyquist–Shannon örnekleme teoremi tam olarak bu sınırı söylüyor. Okulda zaman ekseninde anlatılır: bir sinyali kayıpsız yeniden oluşturmak istiyorsan, içindeki en yüksek frekansın en az iki katı hızda örneklemen gerekir. İnsan kulağı 20 kHz’e kadar duyduğu için ses 44,1 kHz örneklenir.
Görüntü işlemede aynı teorem eksen değiştiriyor: saniyedeki örnek yerine milimetredeki piksel. Ayırt etmen gereken en küçük ayrıntının üzerine en az iki piksel düşmeli.
Ve dikkat, teoremin iddiası çoğu kişinin sandığından dar. “Göremezsin” demiyor — birinci soruda gördük ki görüyorsun. Dediği şey şu: ayırt edemezsin ve geri kuramazsın.
Sahada iki pikselle de kimse çalışmıyor, üçle beş arası kullanılıyor. Sebebini yukarıdaki hizalanma örneği açıklıyor: ayrıntı beş piksel kapladığında, nereye düşerse düşsün ürettiği görüntü neredeyse aynı oluyor. Yani asıl aradığın şey çözünürlük değil, tekrarlanabilirlik.
Soru 3: Ölçme — teoremin izin verdiğinden iyisi
Üçüncü soruda beklenmedik bir şey oluyor: piksel boyundan çok daha hassas ölçebiliyorsun.
Sebebi şu: her piksel, üzerine düşen ışığı toplayan bir kova. Kovanın yeri ızgaraya sabitlenmiş, orası kaba. Ama kovanın içindeki seviye sürekli bir değer.
Koyu bir parçanın kenarı bir pikselin içinden geçiyor ve o pikselin %30’unu kaplıyor diyelim:
255 × 0,70 ≈ 178
Şimdi tersine çevir. Kamera sana 178 diyor, sen hesaplıyorsun:
kaplanan oran = 1 − (178 / 255) = 0,30
Kenar, pikselin soldan %30’unda. Piksel 1 mm ise kenarın yeri 0,30 mm. Piksel 1 mm olduğu halde onda birlik çözünürlükte konum söyledin. Alt piksel dediğimiz şeyin özü bu tek hesap.
Ama burada bir varsayım kullandın: “bu pikselin içinde tek bir düz kenar var”. Varsayım doğruysa 178 sayısının tek çözümü var. Yanlışsa — mesela içeride iki çizgi varsa — matematik yine bir cevap üretir, sadece cevap saçmadır. İkinci sorudaki 153 örneği bunun ta kendisi.
İkinci ve daha güçlü mekanizma ortalama almak. Bunu şöyle düşün: elinde milimetrelik cetvel var, tek bir kâğıdın kalınlığını ölçemezsin. Ama 500 kâğıdı üst üste koyup 50 mm ölçersen, bölerek kâğıt başına 0,1 mm bulursun. Cetvel değişmedi; sen çok sayıda kaba ölçümü birleştirdin.
Bir dairenin merkezini bulurken olan da bu. Kenarda tek piksel yok, yüzlercesi var; her biri “kenar burada” diye kaba bir tahmin veriyor ve hataları rastgele. Yüzlercesine bir çember uydurduğunda sapmalar birbirini büyük ölçüde götürüyor — kabaca hata, nokta sayısının kareköküyle küçülüyor. 300 kenar noktası hatayı 17’ye böler.
Bu yüzden 0,29 mm/piksel bir kamerayla dairenin merkezini onda bir milimetrenin altında bulmak gerçekten mümkün.
Ama ortalamanın kurtaramadığı bir şey var: yalnızca rastgele hatayı siler, sistematik hatayı silmez. Kamera yamuk bağlıysa, lens bozuyorsa ya da her ölçüm aynı yöne kayıyorsa, bin ölçüm alsan da hepsi aynı yöne kaymaya devam eder; ortalaması da kaymış çıkar. Ölçüm keskin olabilir ama nişan yanlış yere kurulmuşsa keskinlik seni kurtarmıyor.
Peki kamerayı nasıl seçiyoruz
Üç sorunun cevabı netleşince kamera seçimi tek satıra iniyor. Belirleyici olan en zor soru, yani ayırt etme:
Gerekli piksel = (görüş alanı / en küçük ayrıntı) × ayrıntı başına piksel
Bizim hücre için bir milimetre hedefleyip ayrıntı başına beş piksel dersek:
(700 / 1) × 5 = 3500 piksel
Elimizdeki kamera 2448 veriyordu, yani bir milimetreye 3,4 piksel düşüyordu. Kabul edilebilir ama konforlu değil.
Bu hesabın tamamı tek bir sayıya bağlı: en küçük ayrıntı kaç milimetre? Bizde bu sayının bir milimetre mi bir santimetre mi olduğu bir süre net değildi. İki rakamın arası on kat ve ikisi de aynı toplantıda ağızdan çıkmıştı. Kamera seçildi, hücre kuruldu, aylar sonra gerçek toleransın milimetre mertebesinde olduğu anlaşıldı.
Ben o günden sonra hassasiyet hedefini bir yere yazmadan kamera seçmemeye çalışıyorum. Tek satır bile olsa yazılı olsun — çünkü bizde sözlü hedefler proje ilerledikçe sessizce sıkılaştı.
Çözünürlük hesabı tuttu, sistem tutmadı
Kamera yeterliydi, sistem çalıştı — ta ki parça görüş alanının kenarlarına doğru gelene kadar.
Sebebi çözünürlük değildi. Sebebi, iki boyutlu bir kameranın üç boyutlu bir dünyayı tek düzlem sanmasıydı. Onu bir sonraki yazıda anlatacağım.
Şimdilik aklımda kalan iki şey var. Birincisi, bir hesap tuttuğunda rahatlıyorsun ama asıl soru o hesabın neyi hesaplamadığı. İkincisi, okulda ezberleyip geçtiğimiz teoremlerin sahada nasıl karşımıza çıktığı: Nyquist, biz farkında bile değilken, kameracıların “piksel boyunu beşle çarp” kuralının neden var olduğunun cevabını veriyormuş.