5.24. Polar dönüşümler

Polar koordinatlar, sol üst kökene göre yatay ve dikey ofsetler yerine, her pikseli bir referans yöne göre bir açı ve seçilen bir merkeze olan uzaklık ile adlandırır. Bu gösterim, değerini tek bir özdeşlik üzerinden kazanır: seçilen merkez etrafındaki dönüş, açı ekseni boyunca bir öteleme hâline gelir; bu da dönüşe karşı değişmez bir algoritmanın, doğrudan dönüşlere göre çok daha basit bir parametre uzayını taramasını sağlar. Yeniden izdüşümü linpolar() ve logpolar() çalıştırır.

5.24.1. İki yöntem

linpolar(), Kartezyen’den polara yeniden izdüşümü doğrusal bir uzaklık ekseniyle çalıştırır. Her çıkış sütunu, merkez etrafındaki sabit bir açıya karşılık gelir; her çıkış satırı ise merkeze olan sabit bir uzaklığa karşılık gelir.

img.linpolar()

logpolar(), aynı yeniden izdüşümü logaritmik bir uzaklık ekseniyle çalıştırır. Açı işleme aynıdır; farklı olan şey, uzaklıkların çıktının satırları boyunca doğrusal yerine üstel olarak artmasıdır. Bu fark, polar koordinatların ortaya çıkardığı ikinci geometrik özdeşlik nedeniyle önemlidir: kaynağın seçilen merkez etrafında ölçeklenmesi, uzaklık ekseni boyunca bir öteleme hâline gelir – ama yalnızca o eksen logaritmik olduğunda. Doğrusal bir uzaklık ekseninde ölçekleme polar görüntüyü uzatır; logaritmik bir uzaklık ekseninde ise ölçekleme onu sabit bir miktar kadar kaydırır.

img.logpolar()

Her iki yöntem de x= ve y= anahtar sözcüklerini alır; bunlar polar yeniden izdüşümün merkezini kaynak piksel koordinatlarında ayarlar ve sırasıyla görüntü genişliğinin ve görüntü yüksekliğinin yarısı olarak varsayılır. Merkez seçimi önemlidir: yanlış nokta etrafında yapılan bir polar dönüşüm, içeriğin dönüş / öteleme özdeşliğini bozacak şekilde karışmasıyla sonuçlanır.

Bir sırada üç panel. En soldaki, bir saat kadranı gösteren Kartezyen bir kaynak görüntüdür -- iki eş merkezli çember ve dış kenar boyunca 30 derecenin katlarında on iki çizgi işareti ile bir yöne işaret eden tek bir akrep. Ortadaki panel o kaynağın linpolar yeniden izdüşümünü gösterir: on iki çizgi işaretinin üst satır boyunca eşit aralıklı dikey çizgiler olarak göründüğü, iki eş merkezli çemberin farklı dikey konumlarda iki yatay çizgi olarak göründüğü ve saat akrebinin kaynaktaki açısına karşılık gelen konumda tek bir dikey çizgi olarak göründüğü dikdörtgen bir çıkış görüntüsü. En sağdaki panel logpolar yeniden izdüşümü gösterir: yatay eksen boyunca aynı açısal dağılım, ancak uzaklık ekseni logaritmik olduğu için iç ve dış çember arasındaki boşluk sıkıştırılmıştır.

linpolar() ve logpolar() ile yeniden izdüşümü yapılmış bir saat kadranı. Kaynaktaki eş merkezli çemberler çıktıda yatay çizgilere dönüşür; açısal çizgi işaretleri ise açı ekseni boyunca eşit aralıklı dikey çizgilere dönüşür. Log-polar varyantı, radyal aralığı sıkıştırır.

5.24.2. Hangisine ne zaman başvurmalı

linpolar() ile logpolar() arasındaki seçim, uygulamanın hangi değişmezliğe ihtiyaç duyduğunun seçimidir. Yalnızca dönüş değişmezliği için – aynı sahnenin iki çerçevede göründüğünü, ikincisinin bilinmeyen bir açıyla döndürüldüğünü tespit etmek için – linpolar() yeterlidir: dönüş, polar görüntüde yatay bir kaymaya dönüşür ve find_displacement() gibi yalnızca öteleme tabanlı bir eşleştirici, açıyı kaymanın büyüklüğü olarak geri kazanır. Ölçek değişmezliği de önemliyse – ikinci çerçeve hem döndürülmüş hem yakınlaştırılmışsa – logpolar() her iki bilinmeyeni de ötelemelere indirger: dönüş için yatay, ölçek için dikey.

Bu, dönüş ve ölçek değişikliklerine karşı dayanıklı bir izleyici için standart tariftir: referans çerçeveyi ve her canlı çerçeveyi aynı merkez etrafında log-polara yeniden izdüşür, çift üzerinde find_displacement() çalıştır ve sonuçtan rotation ile scale alanlarını oku.

5.24.3. Dairesel özniteliklerin açılması

Polar dönüşümlerin ayrı bir kullanımı, görüntüde doğal olarak dairesel olan özniteliklerin açılmasıdır. Bir saat kadranı, bir gösterge kadranı, tasarım gereği dairesel olan bir denetim hedefi – bunların hepsi polar izdüşümde doğrusal hâle gelir; bu da çoğu algoritmanın çalışması daha kolay bulduğu biçimdir.

Yukarıdaki şekil bunu doğrudan gösterir: Kartezyen’de çevre boyunca eşit aralıklı yerleştirilmiş bir saat kadranındaki on iki çizgi işareti, polar görüntüde on iki eşit aralıklı dikey çizgiye dönüşür. Polar görüntüdeki herhangi bir çizgi işaretinin etrafına çizilen bir dikdörtgen, saat kadranı yakalandığında hangi yöne döndürülmüş olursa olsun o çizgi işaretinin konumunu tanımlar. Polar görüntü boyunca çalıştırılan bir şablon eşleştirici, tek bir geçişte her çizgi işaretini bulur.

5.24.4. Ters eşleme

reverse=True, ileri polar izdüşümün tersini çalıştırır: bir polar görüntü verildiğinde, polar izdüşümü o görüntü olan Kartezyen görüntüyü üretir. Uygulama, bir algoritmayı polar koordinatlarda çalıştırmak için ileri biçimi çağırır, ardından sonucu, görmesi gereken hangi aşağı akış aşaması olursa olsun ona aktarmak için Kartezyen’e geri izdüşürmek üzere ters biçimi çağırır.

En yaygın kullanım, bir polar görüntüyü değiştirip geri izdüşürmektir: polar görüntüye uygulanan bir filtre – polar terimlerle açılar arasında bulanıklaştıran ancak radyal yapıyı koruyan yatay bir yumuşatma – açısal olarak bulanıklaştırılmış bir Kartezyen sonuç üretir; bu da bir Kartezyen filtrenin doğrudan yapamayacağı bir şeydir.