Phân phối các đối tượng trong một khối để chúng có khoảng cách tối đa với nhau


11

Tôi đang cố gắng sử dụng máy ảnh màu để theo dõi nhiều đối tượng trong không gian. Mỗi đối tượng sẽ có một màu khác nhau và để có thể phân biệt tốt giữa từng đối tượng, tôi đang cố gắng đảm bảo rằng mỗi màu được gán cho một đối tượng khác với bất kỳ màu nào trên bất kỳ đối tượng nào khác có thể.

Trong không gian RGB, chúng ta có ba mặt phẳng, tất cả đều có giá trị từ 0 đến 255. Trong khối này , tôi muốn phân phối màu sao cho có nhiều khoảng cách giữa chúng và những người khác càng tốt. Một hạn chế bổ sung là và (hoặc càng gần chúng càng tốt) nên được bao gồm trong màu, vì tôi muốn chắc chắn rằng không ai trong số tôi các đối tượng mất một trong hai màu vì nền có thể sẽ là một trong những màu này.(0,0,0)/(255,255,255)n(0,0,0)(255,255,255)n(n2)

Có lẽ, (bao gồm cả màu đen và trong khi) sẽ không nhiều hơn khoảng 14.n

Cảm ơn trước cho bất kỳ con trỏ về làm thế nào để có được những màu sắc.


2
Tôi nghĩ bạn chỉ nên xem xét một không gian hai chiều, bởi vì máy ảnh của bạn có thể sẽ không thể phân biệt các đối tượng có cùng màu nhưng cường độ khác nhau. Vấn đề là thú vị mặc dù.
Stéphane Gimenez

Ba chiều đến từ ba mặt phẳng màu: đỏ, lục và lam trong đó mỗi chiều có thể độc lập lấy các giá trị từ 0-255. Trong không gian RGB, tôi không nghĩ có cường độ. Có những không gian màu khác có thể phù hợp hơn cho việc này vì chúng chỉ có thể là 2D, mặc dù tôi không biết nhiều về chúng.
Matt

Nếu bạn có thể điều khiển chính xác lượng ánh sáng chiếu vào các vật thể thì OK. Trong không gian RGB (100, 100, 100) và (200, 200, 200) là những gì tôi gọi là cùng màu (màu xám) với cường độ khác nhau.
Stéphane Gimenez

@Matt, Stephane dường như gợi ý rằng bạn sử dụng khối HSL hoặc HSV thay vì khối RGB. Các màu được ánh xạ, nhiều hay ít, nhưng sau đó bạn có thể bỏ qua thành phần S cho bản đồ 2D. Tôi sẽ đi xa hơn để đề xuất thang đo 1D trên H một mình tại một SV hoặc SL đã chọn để giữ cho màu sắc của bạn có "tông màu" thẩm mỹ tương tự. Thuật toán phân phối bằng nhau trên 1D cũng đơn giản hơn!
Jason Kleban

1
Có, khoảng cách cặp tối đa. @ uosɐſ HSV thực sự dường như trả về kết quả tốt hơn so với RGB. Ngay cả khi sử dụng cả ba mặt phẳng HSV, tôi vẫn có thể chọn các màu riêng biệt dựa trên khoảng cách đến từng màu lý tưởng.
Matt

Câu trả lời:


4

Tất cả các màu sẽ ở trên bề mặt của khối RGB, trừ khi tôi nhầm, với cùng một lý do là tất cả các điện tích xuất hiện trên bề mặt của các dây dẫn điện. Điều này gợi ý phương pháp sau để xác định màu sắc:

  • diễn giải không gian màu RGB là không gian Cartesian XYZ;
  • diễn giải các màu ứng cử viên như các hạt tích điện, ví dụ, các electron;
  • tìm trạng thái năng lượng thấp của hệ thống thông qua việc ủ mô phỏng;

Đối với , một mô phỏng có độ chính xác cao nên khá nhanh; bạn có thể sử dụng kỹ thuật Runge Kutta, hoặc thậm chí phương pháp của Euler với một bước thời gian nhỏ có thể làm điều đó (dễ thực hiện / hiểu hơn nhiều). Tôi có thể đề xuất loạt bài "Công thức số" cho các kỹ thuật quan tâm / tích phân số.n15

Khi các hạt hội tụ, bạn có sự sắp xếp màu sắc bằng cách diễn giải các điểm là màu sắc. Ban đầu, các hạt có thể được sắp xếp ngẫu nhiên trên bề mặt của khối lập phương, với một khoảng cách nhỏ (giúp hội tụ và các vấn đề ổn định). Đặt các nhóm nhỏ trên các mặt của khối lập phương sẽ hoạt động.

Để tránh bị kẹt ở mức tối thiểu cục bộ (chứ không phải toàn cầu), bạn có thể "xung" một số điện trường ngẫu nhiên nhỏ sau khi hội tụ và xem liệu hệ thống có quay lại cùng một cấu hình hay một cấu hình khác. Có vẻ như các hạt được đặt ngẫu nhiên sẽ làm điều đó trong kịch bản này, nhưng có thể.

BIÊN TẬP:

Như đã chỉ ra trong các ý kiến, giả định rằng các giải pháp tối ưu chỉ nên nằm trên bề mặt có lẽ không giữ được cho tất cả các hình học trong trường hợp riêng biệt.

May mắn thay, điều này có ít ảnh hưởng đến phần còn lại của kỹ thuật được mô tả ở trên. Các hạt ban đầu có thể được đặt ở bất cứ đâu; chỉ cần chừa một khoảng trống giữa các cặp hạt để ổn định và che phủ, sau đó lặp lại hệ thống để hội tụ, sau đó đập vài lần (có thể với cường độ tăng dần) để xem liệu bạn có thể khiến hệ thống hội tụ đến một cấu hình khác (có thể tốt hơn) .

Cũng lưu ý rằng tôi tin rằng phương pháp này sẽ tối đa hóa khoảng cách trung bình như "(hài hòa?) Giữa các cặp hạt". Nếu bạn muốn tối đa hóa khoảng cách tối thiểu giữa các cặp hạt hoặc một số trung bình (hình học?) Khác giữa các cặp hạt, điều này có thể không cung cấp cho bạn giải pháp tốt nhất.

Trong mọi trường hợp, tôi cảm thấy như kỹ thuật này sẽ cung cấp cho bạn một cách dễ dàng để đưa ra các bộ màu xấp xỉ tối ưu tốt ... có thể không cần các giải pháp "tối ưu" thực tế cho trường hợp sử dụng của bạn. Đương nhiên, nếu một giải pháp chính xác và tối ưu có thể được mong muốn, mô phỏng số có lẽ không phải là cách tốt nhất để đi.


3
Với giải pháp tốt nhất là đặt một trong các nút ở giữa khối và đặt các nút khác vào các góc của khối, vì vậy các giả định của bạn là không đúng. n=9

@SaeedAmiri Quan sát thú vị ... vấn đề rất có thể là với tính chất rời rạc của vấn đề này, so với các cuộc thảo luận vật lý thông thường về mật độ điện tích. Tuy nhiên, điều đáng chú ý là không có lý do gì mà mô phỏng số với ủ vật lý vẫn không tìm thấy giải pháp mà bạn mô tả; chỉnh sửa câu trả lời để chọn bình luận của bạn và cái nhìn sâu sắc này.
Patrick87

Tôi sẽ xem liệu tôi có thể tìm ra cách để làm điều này trong matlab (với simulannealbnd). Khó khăn tôi tưởng tượng sẽ là trong việc chuyển vấn đề thành một hàm toán học mà MATLAB có thể cố gắng giảm thiểu.
Matt

ps, suy nghĩ ban đầu của tôi là sử dụng các đỉnh của khối đa diện (icosahedron), vì tôi cũng nghĩ rằng giải pháp có thể có chúng trên bề mặt, nhưng sau đó tôi không chắc liệu điều đó có đúng không.
Matt

Trong matlab tôi đã viết một hàm, cho một tập hợp các điểm (x, y, z), nó tính tổng các khoảng cách euclide cặp giữa mỗi cặp điểm trong tập hợp. Sau đó, tôi chia một cho kết quả và matlab được cho là tìm tối thiểu của hàm này. Nhưng matlab không hiểu đúng, ví dụ, đối với 4 điểm 3D, nó trả về các x1, x2, x3, x4; y1, y2 .... sau (phạm vi 0-1): 0,0001, 0,0031, 0,9993, 0,9920 ; 0.9970 0.0004 0,9919 0,0030; 0,0030 0,0003 0,9973 0,5756. Tuy nhiên, tôi nghĩ đó là một vấn đề matlab nên tôi sẽ chấp nhận điều này.
Matt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.