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.

Three panels in a row. The leftmost is a Cartesian source image showing a clock face -- two concentric circles with twelve tick marks around the outer rim at multiples of 30 degrees, and a single hand pointing in one direction. The middle panel shows the linpolar re-projection of that source: a rectangular output image where the twelve tick marks appear as evenly spaced vertical strokes along the top row, the two concentric circles appear as two horizontal lines at different vertical positions, and the clock hand appears as a single vertical line at the position corresponding to its angle in the source. The rightmost panel shows the logpolar re-projection: the same angular distribution along the horizontal axis, but with the gap between the inner and outer circles compressed because the distance axis is logarithmic.

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.