Tôi có một hình ảnh trên một mạng lưới cực. Hình ảnh này nên được chuyển đổi thành một mạng lưới Descartes, nhưng thuật toán duy nhất tôi biết là thực sự chậm cho việc này. Bây giờ tôi sử dụng lưới Descartes, cho mỗi điểm tôi tìm thấy các giá trị r và theta, và sau đó tôi nhìn vào hai vectơ để tìm lỗi nhỏ nhất được xác định bởi:Thuật toán nhanh cho cực -> chuyển đổi Descartes
min {(th_vec - theta)^2 + (range - r)^2}
Điều này cho phép vòng lặp lồng nhau bên trong vòng lặp lồng nhau bên ngoài, vì vậy tôi có độ phức tạp của O (N^4). Hình ảnh 512x512 sử dụng toàn bộ phút để hoàn thành. Tất nhiên, một sự phức tạp như vậy không thể được sử dụng, vì vậy tôi tự hỏi nếu có ai biết về bất kỳ thuật toán nhanh hơn để làm điều này?
Tôi có hình ảnh và hai vectơ. Trục X của hình ảnh là góc, trong khi trục Y của hình ảnh là chiều dài từ tâm. Góc luôn từ 0-2pi và phạm vi từ 0 đến r_max.
Cảm ơn bạn trước.
CHỈNH SỬA: Phạm vi từ 0 đến r_max, không phải -r_max thành r_max như trước. Tôi thấy rằng đã có một số sai sót. Tôi đã sử dụng bình thường, nghịch đảo, chuyển đổi với;
r=sqrt(x^2 + y^2);
theta=atan2(y,x);
Vấn đề là tôi phải lần đầu tiên chuyển đổi các giá trị x và y để x 'và y' giá trị, kể từ khi lưới là từ -r_max để r_max trong hình ảnh kết quả, nhưng theo pixel trong dữ liệu. Vì vậy, tôi có một hình ảnh 512x512, nhưng r_max có thể là một cái gì đó giống như 3.512. Vì vậy, tôi phải chuyển đổi mỗi giá trị pixel thành giá trị lưới, sau đó tìm giá trị r và theta. Khi tôi đã tìm thấy giá trị r và theta tôi phải chạy máng hai vectơ, phạm vi và th_vec, để tìm pixel trong hình ảnh gốc khớp với:
min {(range - r)^2 + (th_vec - theta)^2}
Điều này mang lại cho tôi sự phức tạp của O (n^4), vì vectơ th_vec và phạm vi có cùng kích thước với hình ảnh. Vì vậy, nếu tôi có một ma trận vuông 512x512 yếu tố, tôi phải chạy trough 68 719 476 736 yếu tố, đó là cách chậm. Vì vậy, tôi tự hỏi nếu có một thuật toán nhanh hơn? Tôi không thể thay đổi dữ liệu đầu vào, vì vậy theo như tôi biết, đây là cách duy nhất để làm điều đó nếu bạn không bắt đầu với triangulation và các công cụ, nhưng điều này là tốn kém trong thời gian của bộ nhớ.
Đây là gì? Ngoài ra, tại sao bạn không có một trong hai góc từ 0 đến pi hoặc phạm vi từ 0 đến r_max? 2 * pi cho một vòng tròn hoàn chỉnh, vậy tại sao bạn sẽ cần khoảng cách phủ định? –
Lưới phân cực của bạn có được phân chia đồng đều với các tọa độ cực không? –
Nếu bạn tìm thấy r_0 và th_0 như một số giá trị dấu phẩy động từ x, y thì bạn chỉ phải xem bốn cặp (r, th) trong hình ảnh cực của bạn, tức là bốn hàng xóm gần nhất (r_0, th_0), bốn kết hợp của sàn (r_0), ceil (r_0) và sàn (th_0), ceil (th_0), nơi floor() và ceil() tạo ra thứ gì đó được làm tròn tới lưới cực của bạn. –