5.24. Biến đổi tọa độ cực¶
Tọa độ cực xác định vị trí mỗi điểm ảnh bằng một góc tính từ hướng tham chiếu và một khoảng cách tính từ tâm đã chọn, thay cho các độ lệch ngang và dọc từ góc trên bên trái. Hệ tọa độ này có giá trị nhờ một đặc tính quan trọng: phép quay quanh tâm đã chọn trở thành phép tịnh tiến dọc theo trục góc, cho phép một thuật toán bất biến xoay tìm kiếm trong không gian tham số đơn giản hơn nhiều so với xử lý phép quay trực tiếp. linpolar() và logpolar() thực hiện phép chiếu lại này.
5.24.1. Hai phương thức¶
linpolar() thực hiện phép chiếu lại từ Cartesian sang tọa độ cực với trục khoảng cách tuyến tính. Mỗi cột đầu ra tương ứng với một góc cố định quanh tâm; mỗi hàng đầu ra tương ứng với một khoảng cách cố định từ tâm.
img.linpolar()
logpolar() thực hiện cùng phép chiếu lại nhưng với trục khoảng cách logarit. Cách xử lý góc là giống nhau; điểm khác biệt là khoảng cách tăng theo cấp số nhân theo các hàng của đầu ra thay vì tuyến tính. Sự khác biệt này có ý nghĩa quan trọng vì đặc tính hình học thứ hai mà tọa độ cực thể hiện: co giãn nguồn quanh tâm đã chọn trở thành phép tịnh tiến dọc theo trục khoảng cách -- nhưng chỉ khi trục đó là logarit. Với trục khoảng cách tuyến tính, việc co giãn làm kéo dài ảnh cực; với trục khoảng cách log, việc co giãn dịch chuyển ảnh một lượng cố định.
img.logpolar()
Cả hai phương thức đều nhận các từ khóa x= và y= để đặt tâm của phép chiếu lại tọa độ cực theo tọa độ điểm ảnh nguồn, mặc định là nửa chiều rộng và nửa chiều cao của ảnh. Việc chọn tâm rất quan trọng: một phép biến đổi tọa độ cực quanh điểm sai sẽ xáo trộn nội dung theo cách phá vỡ đặc tính quay/tịnh tiến.
Mặt đồng hồ được chiếu lại bởi linpolar() và logpolar(). Các vòng tròn đồng tâm trong nguồn trở thành các đường ngang trong đầu ra; các vạch chia góc trở thành các đường dọc cách đều nhau dọc theo trục góc. Biến thể log-polar nén khoảng cách hướng tâm.¶
5.24.2. Khi nào nên dùng cái nào¶
Sự lựa chọn giữa linpolar() và logpolar() chính là lựa chọn loại bất biến mà ứng dụng cần. Nếu chỉ cần bất biến xoay -- phát hiện rằng cùng một cảnh xuất hiện trong hai khung hình, khung thứ hai bị xoay một góc không biết -- linpolar() là đủ: phép quay trở thành dịch chuyển ngang trong ảnh cực, và một bộ so khớp chỉ dịch chuyển như find_displacement() xác định góc bằng độ lớn của dịch chuyển. Khi bất biến tỷ lệ cũng quan trọng -- khung thứ hai vừa bị xoay vừa bị zoom -- logpolar() thu gọn cả hai ẩn số thành các phép tịnh tiến: ngang cho xoay, dọc cho tỷ lệ.
Đó là công thức chuẩn cho một bộ theo dõi bền vững trước các thay đổi xoay và tỷ lệ: chiếu lại khung tham chiếu và từng khung trực tiếp sang log-polar quanh cùng một tâm, chạy find_displacement() trên cặp đó, và đọc các trường rotation và scale từ kết quả.
5.24.3. Mở rộng các đặc trưng tròn¶
Một ứng dụng khác của biến đổi tọa độ cực là mở rộng các đặc trưng tự nhiên có dạng tròn trong ảnh. Mặt đồng hồ, mặt số đồng hồ đo, mục tiêu kiểm tra có dạng tròn theo thiết kế -- tất cả đều trở thành tuyến tính trong phép chiếu cực, đây là dạng mà hầu hết các thuật toán dễ xử lý hơn.
Hình trên minh họa trực tiếp điều này: mười hai vạch chia trên mặt đồng hồ, cách đều nhau quanh chu vi trong Cartesian, trở thành mười hai đường dọc cách đều nhau trong ảnh cực. Một hình chữ nhật quanh bất kỳ vạch nào trong ảnh cực xác định vị trí của vạch đó bất kể mặt đồng hồ bị xoay thế nào khi chụp. Một bộ so khớp mẫu chạy qua ảnh cực tìm tất cả các vạch trong một lần.
5.24.4. Phép ánh xạ ngược¶
reverse=True chạy nghịch đảo của phép chiếu cực thuận: cho một ảnh cực, tạo ra ảnh Cartesian có phép chiếu cực là ảnh đó. Ứng dụng gọi dạng thuận để chạy thuật toán trong tọa độ cực, sau đó gọi dạng ngược để chiếu kết quả trở lại Cartesian cho bất kỳ giai đoạn tiếp theo nào cần thấy nó.
Ứng dụng phổ biến nhất là chỉnh sửa một ảnh cực rồi chiếu ngược lại: một bộ lọc áp dụng cho ảnh cực -- làm mờ ngang mà theo thuật ngữ cực sẽ làm mờ theo góc nhưng bảo toàn cấu trúc hướng tâm -- tạo ra kết quả Cartesian đã được làm mờ theo góc, điều mà bộ lọc Cartesian không thể thực hiện trực tiếp.