ฉันเล่นกับการทำภาพโมเสค สคริปต์ของฉันใช้ภาพจำนวนมากปรับขนาดให้เป็นภาพขนาดย่อจากนั้นใช้เป็นภาพย่อยเพื่อประมาณภาพเป้าหมาย
จริงๆแล้ววิธีการนี้ค่อนข้างเป็นที่น่าพอใจ:
ฉันคำนวณข้อผิดพลาดกำลังสองเฉลี่ยสำหรับทุกหัวแม่มือในทุกตำแหน่งไทล์
ตอนแรกฉันเพิ่งใช้ตำแหน่งที่โลภ: วางนิ้วโป้งโดยมีข้อผิดพลาดน้อยที่สุดบนกระเบื้องที่เหมาะสมที่สุดแล้วต่อไปเรื่อย ๆ
ปัญหาเกี่ยวกับความโลภคือมันจะทำให้คุณวางนิ้วหัวแม่มือที่แตกต่างกันมากที่สุดบนกระเบื้องที่ได้รับความนิยมน้อยที่สุดในที่สุดไม่ว่าพวกเขาจะจับคู่กันอย่างใกล้ชิดหรือไม่ก็ตาม ฉันแสดงตัวอย่างที่นี่: http://williamedwardscoder.tumblr.com/post/84505278488/making-image-mosaics
ดังนั้นฉันจึงทำการสุ่มสลับจนกว่าสคริปต์จะถูกขัดจังหวะ ผลลัพธ์ค่อนข้างโอเค
การสลับแบบสุ่มของไพ่สองใบไม่ได้เป็นการปรับปรุงเสมอไป แต่บางครั้งการหมุนของไพ่สามใบขึ้นไปส่งผลให้เกิดการปรับปรุงระดับโลกเช่นA <-> B
อาจไม่ดีขึ้น แต่A -> B -> C -> A
1
อาจจะ ..
ด้วยเหตุนี้หลังจากที่สุ่มไพ่สองใบและพบว่าพวกมันไม่ได้ปรับปรุงฉันก็เลือกไพ่หลายใบเพื่อประเมินว่าพวกเขาสามารถเป็นไพ่ใบที่สามได้ไหมในการหมุน ฉันไม่สำรวจว่าชุดไพ่สี่ชุดใด ๆ สามารถหมุนได้อย่างมีกำไรและอื่น ๆ ; นั่นจะเป็นของจริงแพงสูงในไม่ช้า
แต่มันต้องใช้เวลา .. มาก!
มีวิธีที่ดีกว่าและเร็วกว่านี้ไหม?
ปรับปรุงเงินรางวัล
ผมทดสอบจากการใช้งานที่หลากหลายและงูหลามผูกของวิธีฮังการี
ที่เร็วที่สุดคือ pure-Python https://github.com/xtof-durr/makeSimple/blob/master/Munkres/kuhnMunkres.py
ลางสังหรณ์ของฉันคือสิ่งนี้ใกล้เคียงกับคำตอบที่ดีที่สุด; เมื่อเรียกใช้บนภาพทดสอบห้องสมุดอื่น ๆ ทั้งหมดเห็นด้วยกับผลลัพธ์ แต่ kuhnMunkres.py นี้ในขณะที่เป็นคำสั่งที่มีขนาดเร็วขึ้นมากเพียงใกล้มากกับคะแนนที่การใช้งานอื่น ๆ ได้ตกลงไว้
ความเร็วขึ้นอยู่กับข้อมูล โมนาลิซ่าวิ่งผ่าน kuhnMunkres.py ในเวลา 13 นาที แต่ Scarlet Chested Parakeet ใช้เวลา 16 นาที
ผลลัพธ์นั้นเหมือนกับการสลับสุ่มและการหมุนแบบสุ่มสำหรับนกแก้ว:
(kuhnMunkres.py ทางซ้ายสลับสุ่มทางขวาภาพต้นฉบับสำหรับการเปรียบเทียบ )
อย่างไรก็ตามสำหรับภาพ Mona Lisa ที่ฉันทดสอบด้วยผลลัพธ์ที่ได้รับการปรับปรุงให้ดีขึ้นอย่างเห็นได้ชัดและจริง ๆ แล้วเธอมี 'รอยยิ้ม' ที่กำหนดไว้ของเธอส่องผ่าน:
(kuhnMunkres.py ทางซ้ายสลับสุ่มทางขวา)