Tôi muốn tạo các điểm mẫu có thể điền/che khoảng trống một cách ngẫu nhiên (như trong hình đính kèm). Tôi nghĩ rằng họ có một phương pháp gọi là "Quasi-random" có thể tạo ra các điểm mẫu như vậy. Tuy nhiên, đó là một chút xa kiến thức của tôi. Ai đó có thể đưa ra đề xuất hoặc giúp tôi tìm một thư viện có thể làm điều này không? Hoặc đề xuất cách bắt đầu viết một chương trình như vậy?Làm thế nào để chọn ngẫu nhiên các điểm mẫu để tối đa hóa sự chiếm đóng không gian?
Trong hình ảnh, 256 điểm mẫu được áp dụng trên không gian nhất định, đặt tại các vị trí ngẫu nhiên để trang trải toàn bộ cho không gian.
Cập nhật: Tôi chỉ cố gắng sử dụng một số mã từ Halton Quasi-random Sequence và so sánh với kết quả của giả ngẫu nhiên được đăng bởi bạn bè bên dưới. Kết quả của phương pháp Halton là tốt hơn trong quan điểm của tôi. Tôi muốn chia sẻ một số kết quả như sau;
Mã này mà tôi đã viết là
#include "halton.hpp"
#include "opencv2/opencv.hpp"
int main()
{
int m_dim_num = 2;
int m_n = 50;
int m_seed[2], m_leap[2], m_base[2];
double m_r[100];
for (int i = 0; i < m_dim_num; i++)
{
m_seed[i] = 0;
m_leap[i] = 1;
m_base[i] = 2+i;
}
cv::Mat out(100, 100, CV_8UC1);
i4_to_halton_sequence(m_dim_num, m_n, 0, m_seed, m_leap, m_base, m_r);
int displaced = 100;
for (int i = 0; i < 100; i=i+2)
{
cv::circle(out, cv::Point2d((m_r[i])*displaced, (m_r[i+1])*displaced), 1, cv::Scalar(0, 255, 0), 1, 8, 0);
}
cv::imshow("test", out);
cv::waitKey(0);
return 0;
}
Như tôi chút quen thuộc với OpenCV, tôi đã viết mã này bằng âm mưu trên ma trận của OpenCV (Mat). "I4_to_halton_sequence()" là hàm từ thư viện mà tôi đã đề cập ở trên.
Kết quả không tốt hơn, nhưng có thể được sử dụng bằng cách nào đó cho công việc của tôi. Ai đó có ý tưởng khác?
@ acheong87 cảm ơn bạn đã cải thiện ngữ pháp của mình. – mojiiz
Hình ảnh ví dụ của bạn có nhiều đối xứng - đó có phải là thứ bạn cần từ giải pháp không? – JasonD
ví dụ của bạn chính xác là chuỗi Sobol. bạn đã nhận được nó từ wikipedia? – thang