Tôi đã chơi với việc tạo hình ảnh khảm. Kịch bản của tôi lấy một số lượng lớn hình ảnh, thu nhỏ chúng xuống kích thước hình thu nhỏ và sau đó sử dụng chúng làm hình xếp để xấp xỉ hình ảnh mục tiêu.
Cách tiếp cận thực sự khá dễ chịu:
Tôi tính sai số bình phương trung bình cho mỗi ngón tay cái ở mọi vị trí ô.
Lúc đầu, tôi chỉ sử dụng một vị trí tham lam: đặt ngón tay cái với ít lỗi nhất vào ô mà nó phù hợp nhất, và sau đó tiếp theo và cứ thế.
Vấn đề với sự tham lam là nó cuối cùng khiến bạn đặt những ngón tay cái khác nhau nhất trên các gạch ít phổ biến nhất, cho dù chúng có khớp với nhau hay không. Tôi hiển thị các ví dụ ở đây: http://williamedwardscoder.tumblr.com/post/84505278488/making-image-mosaics
Vì vậy, sau đó tôi thực hiện hoán đổi ngẫu nhiên cho đến khi kịch bản bị gián đoạn. Kết quả khá OK.
Việc hoán đổi ngẫu nhiên hai gạch không phải lúc nào cũng là một sự cải tiến, nhưng đôi khi việc xoay vòng ba hoặc nhiều gạch dẫn đến cải thiện toàn cầu tức là A <-> B
có thể không cải thiện, nhưng A -> B -> C -> A
1
có thể ..
Vì lý do này, sau khi chọn hai gạch ngẫu nhiên và phát hiện ra chúng không cải thiện, tôi chọn một bó gạch để đánh giá xem chúng có thể là gạch thứ ba trong một vòng quay như vậy không. Tôi không khám phá nếu bất kỳ bộ bốn gạch có thể được quay có lợi nhuận, và như vậy; đó sẽ là siêu đắt thực sự sớm.
Nhưng điều này cần có thời gian .. Rất nhiều thời gian!
Có một cách tiếp cận tốt hơn và nhanh hơn?
Cập nhật tiền thưởng
Tôi đã thử nghiệm các triển khai và ràng buộc Python khác nhau của Phương pháp Hungary .
Cho đến nay, nhanh nhất là Python thuần https://github.com/xtof-durr/makeSimple/blob/master/Munkres/kuhnMunkres.py
Linh cảm của tôi là điều này gần đúng câu trả lời tối ưu; Khi chạy trên một hình ảnh thử nghiệm, tất cả các thư viện khác đều đồng ý về kết quả, nhưng kuhnMunkres.py này, trong khi có các đơn đặt hàng có cường độ nhanh hơn, chỉ rất gần với điểm số mà các triển khai khác đã đồng ý.
Tốc độ rất phụ thuộc vào dữ liệu; Mona Lisa vội vã chạy qua kuhnMunkres.py sau 13 phút, nhưng Parakeet Scarlet Chested mất 16 phút.
Kết quả tương tự như các giao dịch hoán đổi và xoay ngẫu nhiên cho Parakeet:
(kuhnMunkres.py ở bên trái, hoán đổi ngẫu nhiên ở bên phải; ảnh gốc để so sánh )
Tuy nhiên, đối với hình ảnh Mona Lisa mà tôi đã thử nghiệm, kết quả đã được cải thiện rõ rệt và cô ấy thực sự có 'nụ cười' được định nghĩa tỏa sáng:
(kuhnMunkres.py ở bên trái, hoán đổi ngẫu nhiên ở bên phải)