5.2. Koordinatlar ve bölgeler

Görüntü işleme piksellere etki eder ve bir piksele etki etmek için bir algoritmanın o pikseli koordinatına göre adreslemesi gerekir. Onlardan oluşan bir dikdörtgene etki etmek için de aynı şey geçerlidir – dikdörtgenin, algoritma ile uygulama kodunun üzerinde anlaştığı bir biçimde tanımlanması gerekir. image modülünün koordinatlar ve dikdörtgenler için kullandığı kural basittir; ancak bilgisayar grafiği kuralından çok matematiksel kurala alışkın okuyucuları şaşırtan bir ayrıntı vardır ve bunu en baştan açıkça belirtmekte fayda var.

5.2.1. Piksel ızgarası

(0, 0) pikseli, bir görüntünün sol üst köşesidir. x ekseni sağa doğru ilerler, yani daha büyük x daha sağ anlamına gelir. y ekseni aşağı doğru ilerler, yani daha büyük y görüntünün daha aşağısı anlamına gelir. Genişlik-çarpı-yükseklik boyutlu bir görüntü, (0, 0) ile (width - 1, height - 1) arasındaki tam sayı koordinatlarında piksel tutar; (width, 0) veya (0, height) konumunda piksel yoktur – bu konumlar sağ ve alt kenarlardır, her yöndeki son gerçek pikselden bir adım ötede.

Aşağı doğru ilerleyen y ekseni, yukarıda bahsedilen ayrıntıdır. Çizim kağıdı geometrisine alışkın bir okuyucu, daha büyük y’nin daha yukarı anlamına gelmesini bekler; burada bu sezgi tam tersine dönmüştür. Bu tersine dönmenin nedeni, hem dijital sensörlerin hem de dijital ekranların sol üstten başlayıp her satır boyunca sağa, yukarıdan aşağıya doğru ilerlemesi ve piksellerin bellekte aynı sırayla yerleştirilmesinin, “arabellekteki i konumu” ile “görüntünün r satırı, c sütunu” arasındaki ilişkiyi olabilecek en basit aritmetik haline getirmesidir – (x, y) pikselinin i konumu yalnızca y * width + x olur. Her görüntüleme kütüphanesi onlarca yıl önce aynı nedenle bu düzenlemede anlaştı ve bunun bedeli, görüntülerle ilk kez çalışırken yapılması gereken küçük bir zihinsel ayarlamadır.

Bir görüntüyü temsil eden bir dikdörtgen. Sol üst köşesindeki bir işaretçi (0, 0) olarak etiketlenmiştir; üst kenar boyunca sağa uzanan bir ok x olarak, sol kenar boyunca aşağı uzanan bir ok y olarak etiketlenmiştir. İçine çizilmiş daha küçük bir dikdörtgen ROI olarak etiketlenmiştir; sol üst köşesi (x, y) konumunda olup boyutları kenarlar boyunca w ve h olarak işaretlenmiştir.

Görüntü koordinat sistemi: başlangıç noktası sol üstte, x sağa doğru, y aşağı doğru ilerler. Görüntü içindeki dikdörtgen bir bölge, sol üst köşesi (x, y) ve boyutları (w, h) ile adlandırılır.

5.2.2. Dikdörtgenler

Bir görüntü üzerindeki çoğu işlem, tek bir pikselden çok bir dikdörtgen piksel kümesiyle ilgilenir – bakılacak bir alan, kopyalanacak bir bölge, istatistik hesaplanacak çerçeve içinde bir çerçeve. Bir dikdörtgeni adlandırma biçimi, tek piksel kuralının mümkün olan en basit uzantısını seçer: sol üst köşenin koordinatı, ardından dikdörtgenin boyutları, bir dörtlü (x, y, w, h) içinde paketlenir. Dikdörtgenin içindeki pikseller x ile x + w - 1 arasındaki sütunlarda ve y ile y + h - 1 arasındaki satırlardadır.

Burada açıkça belirtilmeye değer ayrıntı, w ve h değerlerinin sağ alt koordinatlar değil, boyutlar olduğudur. (10, 20, 4, 3) dikdörtgeni 10, 11, 12, 13 sütunlarını ve 20, 21, 22 satırlarını kapsar – toplam on iki piksel – (10, 20) noktasından (4, 3) noktasına uzanan bir bölge değil. Bu kural modül genelinde tutarlıdır, dolayısıyla bir kez içselleştirildiğinde hatalar sona erer, ancak insanları ilk seferinde şaşırtır.

(x, y, w, h) biçimi, farklı görünen ancak aynı kuralı paylaşan üç yerde karşımıza çıkar. İlki, bir görüntünün kendi kapsamını tanımladığı yerdir: tüm görüntüyü kapsayan dikdörtgen (0, 0, width, height) şeklindedir. İkincisi, bir tespit yönteminin sınırlayıcı kutu içeren bir sonuç döndürdüğü yerdir – bir blob, bir rect, bir apriltag – ve kutu (x, y, w, h) olarak geri bildirilir. Üçüncüsü ise, bir yöntemin tüm çerçeve yerine görüntünün bir alt bölgesi üzerinde çalışması gerektiği yerdir; işlemin kapsamını belirleyen roi anahtar kelime argümanı aynı dörtlüyü alır.

Bir yöntemden bir sınırlayıcı kutu alıp onu bir sonraki yöntemin roi argümanına aktarmak, görüntü işlemedeki en yaygın kalıplardan biridir. Kaba bir ilk tespitin sınırlayıcı kutusu, daha ince bir ikinci tespitin arama alanını daraltır ve tespit sonuçları ile yöntem argümanları arasındaki tek tip sözcük dağarcığı, bu kalıbı bu denli basit kılan şeydir – aktarımın her iki tarafında da aynı şekilde kullanılan tek bir dörtlü biçimi.

5.2.3. Tam sayı adresler, kesirli ağırlık merkezleri

Piksel adreslerinin kendisi tam sayılardır. Bir piksel ya verili bir tam sayı sütun ve satırda vardır ya da yoktur ve (40.5, 30.7) koordinatında ne olduğunu sormak iyi tanımlanmış bir soru değildir – tam olarak o konumda oturan bir piksel yoktur. Yine de image modülünün piksel konumlarından türettiği birkaç nicelik kesirlidir ve bu ayrımın uygulamayı daha sonra yanıltmaması için bunun nedenini anlamakta fayda var.

En yaygın durum, ağırlık merkezi – bir bölgenin kütle merkezi – durumudur. Bağlı bir piksel bölgesi için, kayan noktalı biçimdeki ağırlık merkezi, üye piksellerin konumlarının yoğunluklarına göre ağırlıklandırılmış ortalamasıdır. Pikselleri iki sütuna yayılan bir bölgenin ağırlık merkezi x değeri, örneğin 41.6 olabilir – tam olarak o x değerinde gerçek bir piksel olmasa bile gözün “o bölgenin ortası” olarak tanımlayacağı gerçek bir konum. Tespit sonucu nesneleri her iki biçimi de salt okunur özellikler olarak taşır: bir tam sayı çifti (cx / cy, konum tam sayı piksel koordinatları isteyen bir şeye geri beslendiğinde yararlıdır) ve bir kayan noktalı çift (cxf / cyf, konum alt piksel çözünürlükten faydalanan bir kontrol döngüsüne giriyorsa yararlıdır).

Diğer durum, frekans alanında ölçülen iki çerçeve arasındaki yer değiştirmedir. Bir görüntünün piksellerini doğrudan değil de spektral içeriğini analiz eden teknikler, bir pikselden daha ince kaymaları çözümleyebilir ve bu kaymaları kayan noktalı (dx, dy) değerleri olarak bildirir.

Genel kural: piksel adresleri tam sayılardır; bir algoritmadan çıkan konumlar ve kaymalar kayan noktalı sayı olabilir. Çizim yöntemleri her iki biçimi de kabul eder ve sonucun ızgaraya oturması gerektiğinde kayan noktalı sayıları en yakın tam sayı piksele aşağı yuvarlar.

5.2.4. Kartezyen ve kutupsal

Şimdiye kadar tanımlanan sistem Kartezyendir: her piksel, başlangıç noktasından yatay ve dikey uzaklığına göre adlandırılır. Baytların depolandığı sistem budur – arabellekteki i pikseli, satırları yukarıdan aşağı dolaşarak i % width sütunundaki ve i // width satırındaki piksele karşılık gelir – ve her yöntemin varsayılan olarak çalıştığı sistem de budur.

İkinci bir gösterimi bilmekte fayda var çünkü bazı algoritmalar onda çok daha iyi çalışır. Kutupsal koordinatlar, her pikseli, seçilen bir merkez noktasından uzaklığı ve bir referans yön ile arasındaki açı ile adlandırır. Görüntünün pikselleri yerinden oynamamıştır – baytlar hâlâ aynı satır öncelikli arabellektedir – ancak adresleme şeması “ne kadar sağda ve ne kadar aşağıda”dan “merkezden ne kadar uzakta ve etrafında hangi açıda”ya geçmiştir.

Yan yana iki dikdörtgen; her biri aynı görüntüyü temsil eder. Soldaki Kartezyen koordinatları gösterir -- sol üst başlangıç noktası, x ve y eksenleri, (x, y) koordinatlarında örnek bir P noktası. Sağdaki kutupsal koordinatları gösterir -- dikdörtgenin içinde bir C merkez işaretçisi, C'den aynı P noktasına r (uzaklık) olarak etiketlenmiş bir çizgi ve theta (açı) olarak etiketlenmiş bir yay.

Aynı P noktası, iki şekilde adlandırılmış: sol üst başlangıç noktasından Kartezyen (x, y) ve seçilen bir merkezden kutupsal (r, theta).

Neden geçiş zahmetine girilsin? Çünkü zor aramaları kolay olanlara dönüştüren iki özdeşlik vardır.

Kutupsal koordinatlarda, görüntüyü seçilen merkez etrafında döndürmek, piksellerini açı ekseni boyunca – yeniden izdüşürülmüş görüntüdeki x yönü – ötelemek ile aynı işlemdir. Döndürülmüş bir kopya, kutupsal biçimde sola veya sağa kaydırılmış orijinaldir.

Log-kutupsal türevinde – uzaklık ekseni logaritmik ölçek kullanır, açı ekseni doğrusal kalır – görüntüyü seçilen merkez etrafında ölçeklemek, piksellerini uzaklık ekseni boyunca – y yönü – ötelemek ile aynı işlemdir. Ölçeklenmiş bir kopya, log-kutupsal biçimde yukarı veya aşağı kaydırılmış orijinaldir.

Bu nedenle, döndürme veya ölçekleme altında bilinen bir deseni tanıması gereken bir algoritma, her iki dönüşümün de sıradan ötelemelere dönüştüğü kutupsal uzayda araması yapabilir. Ötelemelerin aranması, döndürme ve ölçeklemelere kıyasla çok daha ucuzdur ve bu ikameyi mümkün kılan şey kutupsal yeniden izdüşümdür.

Kutupsal koordinatlar, piksellerin depolanmasında Kartezyen koordinatların yerini almaz; baytlar her zaman Kartezyen ızgarada yaşar. Modül, talep üzerine bir görüntüyü Kartezyen biçimden kutupsal biçime yeniden izdüşüren bir çift yöntem sağlar; kutupsal koordinatlara ihtiyaç duyan algoritma işini yapar ve ya sonuç geri izdüşürülür ya da kutupsal uzaydaki ölçüm doğrudan kullanılır. Bu mekanizma, kutupsal koordinatların modülün arayüzünde herhangi bir yerde görünmesinin tek nedenidir.

Tek tek piksellerin adlandırılması için Kartezyen koordinatlar, onlardan oluşan dikdörtgenlerin adlandırılması için (x, y, w, h) dörtlüsü ve bir algoritmanın faydalandığı durumlarda kullanılabilen kutupsal koordinatlar ile bir uygulama, bir görüntüde bir şeyin nerede olduğunu adlandırmak için eksiksiz bir sözcük dağarcığına sahip olur. Bu konumların herhangi birinde gerçekte neyin depolandığı ise temelin bir sonraki katmanıdır.