5.24. التحويلات القطبية

تسمي الإحداثيات القطبية كل بكسل بزاوية من اتجاه مرجعي ومسافة من مركز مختار، بدلاً من الإزاحتين الأفقية والرأسية من النقطة الأصلية في الزاوية العلوية اليسرى. ويكتسب هذا التمثيل قيمته من خاصية واحدة: الدوران حول المركز المختار يتحول إلى انتقال على طول محور الزاوية، مما يتيح لخوارزمية ثابتة تجاه الدوران أن تبحث في فضاء معاملات أبسط بكثير من البحث في الدوران مباشرة. تُجري linpolar() و logpolar() إعادة الإسقاط هذه.

5.24.1. الطريقتان

تُجري linpolar() إعادة الإسقاط من الإحداثيات الديكارتية إلى القطبية باستخدام محور مسافة خطي. يقابل كل عمود في الخرج زاوية ثابتة حول المركز؛ ويقابل كل صف في الخرج مسافة ثابتة من المركز.

img.linpolar()

تُجري logpolar() إعادة الإسقاط نفسها لكن باستخدام محور مسافة لوغاريتمي. ومعالجة الزاوية متطابقة؛ أما الفرق فهو أن المسافات تنمو أُسّياً نزولاً عبر صفوف الخرج بدلاً من نموها خطياً. ويهمّ هذا الفرق بسبب الخاصية الهندسية الثانية التي تكشفها الإحداثيات القطبية: تحجيم المصدر حول المركز المختار يتحول إلى انتقال على طول محور المسافة -- لكن فقط عندما يكون ذلك المحور لوغاريتمياً. فمع محور مسافة خطي، يمطّ التحجيمُ الصورةَ القطبية؛ ومع محور مسافة لوغاريتمي، يزيحها التحجيم بمقدار ثابت.

img.logpolar()

تأخذ الطريقتان كلاهما الوسيطين x= و y= اللذين يحددان مركز إعادة الإسقاط القطبي بإحداثيات بكسلات المصدر، ويأخذان افتراضياً قيمتي نصف عرض الصورة ونصف ارتفاعها على التوالي. واختيار المركز مهم: فالتحويل القطبي حول النقطة الخطأ ينتهي بمحتوى مُشوَّش بطرق تُتلف خاصية الدوران / الانتقال.

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() و logpolar(). تصبح الدوائر المتحدة المركز في المصدر خطوطاً أفقية في الخرج؛ وتصبح علامات التأشير الزاوية خطوطاً رأسية متباعدة بالتساوي على طول محور الزاوية. ويضغط البديل اللوغاريتمي القطبي التباعدَ الشعاعي.

5.24.2. متى تختار كلاً منهما

الاختيار بين linpolar() و logpolar() هو اختيار أيِّ ثبات يحتاجه التطبيق. فمن أجل الثبات تجاه الدوران وحده -- اكتشاف أن المشهد نفسه يظهر في إطارين، الثاني مُدار بزاوية مجهولة -- تكفي linpolar(): إذ يصبح الدوران إزاحة أفقية في الصورة القطبية، ويستعيد مُطابِق يعتمد الانتقال فقط مثل find_displacement() الزاويةَ بوصفها مقدار الإزاحة. وعندما يهمّ الثبات تجاه التحجيم أيضاً -- إذ يكون الإطار الثاني مُداراً و مُكبَّراً -- تختزل logpolar() كِلا المجهولين إلى انتقالات: أفقي للدوران، ورأسي للتحجيم.

تلك هي الوصفة القياسية لمتعقِّب متين تجاه تغيرات الدوران والتحجيم: أعِد إسقاط الإطار المرجعي وكل إطار حي إلى الإحداثيات اللوغاريتمية القطبية حول المركز نفسه، وشغّل find_displacement() على الزوج، واقرأ الحقلين rotation و scale من النتيجة.

5.24.3. فرد الميزات الدائرية

من الاستخدامات المنفصلة للتحويلات القطبية فرد الميزات الدائرية بطبيعتها في الصورة. فوجه ساعة، أو قرص مقياس، أو هدف فحص دائري بحكم تصميمه -- كلها تصبح خطية في الإسقاط القطبي، وهي الصورة التي تجد معظم الخوارزميات العمل عليها أيسر.

يُظهر الشكل أعلاه ذلك مباشرة: علامات التأشير الاثنتا عشرة على وجه الساعة، المتباعدة بالتساوي حول المحيط في الإحداثيات الديكارتية، تصبح اثني عشر خطاً رأسياً متباعداً بالتساوي في الصورة القطبية. ويحدد مستطيلٌ حول أي علامة تأشير واحدة في الصورة القطبية موضعَ تلك العلامة بصرف النظر عن الاتجاه الذي كان وجه الساعة مُداراً إليه عند الالتقاط. ويجد مُطابِق قوالب يعمل عبر الصورة القطبية كل علامة تأشير في مرور واحد.

5.24.4. الربط العكسي

تُجري reverse=True عكس الإسقاط القطبي الأمامي: فبإعطاء صورة قطبية، تُنتج الصورة الديكارتية التي يكون إسقاطها القطبي تلك الصورة. يستدعي التطبيق الصيغة الأمامية لتشغيل خوارزمية في الإحداثيات القطبية، ثم يستدعي الصيغة العكسية لإسقاط النتيجة عائدةً إلى الإحداثيات الديكارتية لأي مرحلة لاحقة تحتاج إلى رؤيتها.

أكثر الاستخدامات شيوعاً هو تعديل صورة قطبية ثم الإسقاط العكسي: فالمرشِّح المطبَّق على الصورة القطبية -- تنعيم أفقي يُموّه عبر الزوايا بالمصطلح القطبي لكنه يحفظ البنية الشعاعية -- يُنتج نتيجة ديكارتية مُموَّهة زاوياً، وهو ما لا يستطيع مرشِّح ديكارتي فعله مباشرة.