เนื่องจากบางคนในคำถามแสดงความคิดเห็นซ้ำ ๆ บอกฉันว่ามันค่อนข้างเล็กน้อยจริง ๆ แล้วฉันทำมัน: แอปพลิเคชันที่เรียงลำดับรูปภาพในไดเรกทอรีปัจจุบันโดยปล่อยการเปรียบเทียบแบบตัวต่อตัวกับผู้ใช้จริง 1
เขียนใน C # สำหรับ. NET 2. ทำงานบน Mono (ทดสอบบน Linux จนถึงตอนนี้) เช่นกัน ต้องdcrawบนเส้นทาง (รวบรวมปฏิบัติการสำหรับ Windows หรือ OS X สามารถดาวน์โหลดได้ที่นี่ )
ขณะนี้การโต้ตอบของผู้ใช้เป็นพื้นฐานมาก อาจมีการเปลี่ยนแปลงได้ รหัสก็เป็นระเบียบที่ชั่วร้ายเช่นเคยกับงานแฮ็ค
แอปพลิเคชันจะต้องเริ่มต้นในไดเรกทอรีที่มีภาพที่จะจัดเรียง จากนั้นจะดำเนินการโหลดรูปภาพทั้งหมดที่สามารถค้นหาและจัดการ (JPEG, GIF, PNG, BMP ได้รับการสนับสนุนโดยปกติแล้วรูปแบบอื่น ๆ ทั้งหมดได้รับการสนับสนุนโดย dcraw หรือข้ามถ้าไม่ได้) รักษาจำนวนภาพให้เหมาะสมเนื่องจากทุกภาพถูกโหลดไว้ในหน่วยความจำเพื่อเพิ่มความเร็วในการแสดงผล - ฉันพยายามเริ่มต้นในโฟลเดอร์ที่มีรูปภาพประมาณ 600 ภาพและยกเลิกมันที่การใช้หน่วยความจำ 2 GiB
หลังจากนั้นคุณจะได้รับมุมมองสองบานหน้าต่างพร้อมรูปภาพด้านซ้ายและด้านขวา คลิกที่สิ่งที่คุณพิจารณาว่าดีที่สุดของทั้งสอง จากนั้นคุณจะได้รับภาพใหม่สองภาพ ทำต่อจนเสร็จ คุณสามารถปิดโปรแกรมได้ถ้าต้องการมันจะกลับมาทำงานต่อที่ที่ค้างไว้
หลังจากทำการเปรียบเทียบที่จำเป็นทั้งหมดแล้ว2จะเห็นผลลัพธ์ได้:
มีรายการเรียงลำดับของภาพทางด้านซ้ายที่มีอันดับสูงสุดที่ด้านบนและอันดับต่ำสุดที่ด้านล่าง
รายการสิ่งที่ต้องทำ:
- อนุญาตให้เลือกภาพเพื่อจัดเรียง
- แก้ไขปัญหาที่ภาพแนวตั้งจะปรากฏในแนวนอนเสมอ (อย่างน้อยสำหรับภาพดิบ dcraw อนุญาตให้หมุนได้ แต่ไม่สามารถทำได้โดยอัตโนมัติและฉันไม่เห็นวิธีที่ง่ายในการค้นหาสิ่งนั้นจากภายนอก)
- ลดการใช้หน่วยความจำสำหรับรูปภาพจำนวนมาก
- สุ่มภาพล่วงหน้าเพื่อให้ภาพที่มีขนาดใกล้เคียงกันมีความเป็นไปได้น้อยที่จะนำมาเปรียบเทียบกันโดยตรง
- เปลี่ยนการซิงโครไนซ์ระหว่างเธรดการเรียงลำดับและ UI เพื่อไม่พึ่งพา
Thread.Sleep
และการสำรวจอีกต่อไปแต่จะใช้วิธีการซิงโครไนซ์ที่เหมาะสม
- เพิ่มภาพตัวอย่าง 1: 1 (หรืออย่างน้อยหนึ่งภาพตัวอย่าง) ขณะนี้สิ่งนี้ไม่สามารถใช้เพื่อตัดสินสิ่งต่าง ๆ ในระดับพิกเซลได้
มันคือ 5:26 ที่นี่ดังนั้นฉันจึงหยุดการแฮ็คตอนนี้
สามารถพบซอร์สโค้ดได้ในที่เก็บ SVN ของฉันและเผยแพร่ภายใต้ลิขสิทธิ์ MIT ฉันยินดีต้อนรับแพทช์ ;-)
ภาพในภาพหน้าจอด้านบนเป็นของฉันเอง
1แน่นอนว่ามันไม่สำคัญเหมือนที่คนอื่นต้องการทำให้ฉันเชื่อ หลังจากต่อสู้กับ Libraw มานานฉันก็ไปตามเส้นทาง dcraw ไม่สวย แต่ใช้ได้กับรหัสจำนวนน้อยที่สุด
2นี่คือคำสั่งของn log 2 nโดยที่nคือจำนวนภาพที่เปรียบเทียบ - ดังนั้นสำหรับ 20 ภาพคุณสามารถคาดหวังบางอย่างประมาณ 20 × 4.3 ≈ 85 เปรียบเทียบ - ฉันรู้ว่ามันไม่ใช่จำนวนน้อย สำหรับภาพ 300 ภาพที่คุณพูดถึงคุณจะได้ประมาณ 2,400 ภาพจำนวนจริงที่ต้องดำเนินการด้วยตนเองคือ (a) แตกต่างกัน (เนื่องจากความซับซ้อนละเว้นปัจจัยเชิงเส้น) และ (b) เท่าที่ฉันสังเกตจนถึงขนาดเล็กกว่า เพื่อหลีกเลี่ยงความไม่สอดคล้องกันผู้ใช้จะไม่ได้รับแจ้งสองครั้งในสองภาพเดียวกัน (ไม่ว่าจะเรียงตามลำดับ) และไม่เคยได้รับแจ้งด้วยภาพเดียวกันทั้งสองด้าน