เมื่อสร้าง JPEG ฉันจะลดการเกิดขึ้นของสิ่งประดิษฐ์ได้อย่างไร


10

มีปัจจัยหลัก 2 ประการที่ดูเหมือนว่าจะนำไปสู่สิ่งประดิษฐ์ดิจิทัลเมื่อสร้างภาพ JPEG: นามแฝงและการบีบอัด

ตัวอย่าง:

การแปลง PNG ที่มีตัวอักษรอยู่ในรูปแบบ JPEG หรือการวางภาพเวกเตอร์ไว้บนภาพถ่าย การลดรอยหยักโดยทั่วไปจะสร้างความพร่ามัวรอบ ๆ แต่ถ้าภาพถูกบีบอัดให้สูญเสียรายละเอียดบางส่วนก็หายไปดังนั้นความพร่ามัวและการทำให้เป็นพิกเซลอาจลดลงอย่างเห็นได้ชัด

นี่เป็นสิ่งที่ถูกต้องหรือไม่ เช่นเนื่องจากการบีบอัดแบบไม่สูญเสียสร้างภาพที่มีรายละเอียดสูงสิ่งประดิษฐ์ที่เกิดจากนามแฝงจะเห็นได้ชัดเจนขึ้นดังนั้นจึงอาจพบความสมดุลโดยใช้การบีบอัดที่ถูกต้องแม้ว่าจะลดคุณภาพของภาพลง

แก้ไข

ฉันเพิ่งบันทึก JPEG นี้ใน mspaint (3.46KB):

lossless

นี่คือ JPEG เดียวกันกับการบีบอัดสูงสุด (คุณภาพต่ำสุด 0.5KB):

lossy

นี่คือ JPEG เดียวกันกับการบีบอัด 50% (สังเกตความแตกต่างของขนาด 1.29KB):

Half-ไม่มีตัวเลือก

การบีบอัด 50% เดียวกัน แต่บันทึกเป็น "โปรเกรสซีฟ JPG" เก็บข้อมูล EXIF ​​และ XMP ดั้งเดิมและ "พยายามบันทึกด้วยคุณภาพ JPG ดั้งเดิม" (คุณสามารถสังเกตเห็นว่าไม่มีพิกเซลสีเทาอยู่รอบ 2.96KB):

ครึ่งตัวเลือก

และในที่สุดก็เหมือนกับเมื่อก่อนด้วยการปิดการสุ่มสี Chroma (ขนาดไฟล์เดียวกัน 2.96KB):

ครึ่งไม่มีความเข้มของสี


1
แค่อยากรู้อยากเห็นอะไรคือเหตุผลที่คุณต้องการ jpg มันคือขนาดไฟล์ที่เล็กกว่านี้หรือไม่? ในกรณีที่ช่วยให้สถานการณ์เฉพาะของคุณคุณรู้เกี่ยวกับการบีบอัด dxt หรือพื้นผิวสนามระยะทาง?
Alan Wolfe

1
ฉันไม่แน่ใจว่าคำถามของคุณคืออะไร คุณต้องการที่จะรู้ว่ามันเป็นการบีบอัดที่ดีโดยใช้ JPEG? คุณต้องการที่จะรู้ว่าภาพประเภทใดบีบอัดได้ดีกับ JPEG? หรือว่าคุณใช้ JPEG อยู่แล้วและคุณต้องการที่จะรู้วิธีเขียนรูปภาพของคุณเพื่อลดสิ่งประดิษฐ์ที่เกิดจาก JPEG หรือไม่
Mokosha

@ AlanWolfe ฉันพบสองสามครั้งที่ฉันสามารถใช้ JPEG (ส่วนใหญ่ในเว็บแอป) และนั่นเป็นสาเหตุที่ฉันต้องการให้เป็น JPEG ขอบคุณ แต่ฉันไม่คุ้นเคยกับการบีบอัด dxt หรือพื้นผิวฟิลด์ระยะทางจากสิ่งที่ฉันเห็นในวิกิพีเดียอัลกอริทึม dxt แตกต่างจากที่ใช้ใน JPEG คุณหมายถึงพวกเขาสามารถใช้สร้าง JPEG ได้หรือไม่
Armfoot

@Moshoka ขอบคุณมันเกี่ยวข้องกับคำถามสุดท้ายของคุณมากกว่า: วิธีลดผลกระทบต่อภาพที่เกิดจากสิ่งประดิษฐ์ในภาพ JPEG ได้อย่างไร
Armfoot

โปรดทราบว่าmozjpegคอมเพรสเซอร์มีเคล็ดลับพิเศษในการสร้างความผิดเพี้ยนน้อยกว่าในภาพประเภทนี้ (และโดยทั่วไปจะมีประสิทธิภาพมากกว่าตัวเขียน jpeg ตามปกติด้วย) คุณลองดูไหม?
ชื่อที่แสดง

คำตอบ:


9

การบีบอัด JPEG เกี่ยวข้องกับสามขั้นตอนหลัก:

  1. Chroma subsampling ภาพที่ถูกแปลงจาก RGB เข้าไปในพื้นที่สี YCbCr ซึ่งในลูหรือความสว่าง (Y) จะถูกจัดเก็บแยกต่างหากจากความเข้มของสีหรือสีส่วนประกอบ Cb และ Cr องค์ประกอบ Y ถูกเก็บไว้ที่ความละเอียดสูงสุด แต่ Cb และ Cr มีการสุ่มตัวอย่างโดยทั่วไปจะมีความละเอียดเพียงครึ่งเดียวในแต่ละแกน การใช้ประโยชน์จากความจริงที่ว่าระบบภาพของมนุษย์นั้นไวต่อรายละเอียดของความสว่างมากกว่าสี

  2. การหาปริมาณความถี่ อิมเมจ Y, Cb และ Cr จะถูกแปลงเป็นการแสดงความถี่โดยแบ่งมันออกเป็นบล็อกขนาด 8x8 และใช้การแปลงโคไซน์แบบแยกส่วน (ตัวแปรของการแปลงฟูริเยร์) ไปยังแต่ละบล็อก ผลลัพธ์คือเมทริกซ์ของตัวเลขที่อธิบายถึงแอมพลิจูดของความถี่เชิงพื้นที่ที่แตกต่างกันในบล็อก จากนั้นตัวเลขเหล่านี้จะถูกทำให้เป็นปริมาณ (ปัดเศษเป็นจำนวนบิตความแม่นยำที่เลือก) ระดับต่าง ๆ ของ quantization ถูกใช้สำหรับความถี่ต่าง ๆ ใช้ประโยชน์จากความไวของระบบภาพที่ค่อนข้างต่ำของเรากับความถี่สูง นี่คือจุดที่การตั้งค่าคุณภาพของเครื่องเข้ารหัสของ JPEG มีคุณภาพต่ำกว่าใช้การควอนตัมแบบหยาบ

  3. เอนโทรปีการเข้ารหัส ค่า DCT เชิงปริมาณจะถูกส่งผ่านเอนโค้ดเดอร์ของเอนโทรปีซึ่งบีบอัดบิตสตรีมโดยไม่สูญเสียบิตโดยใช้บิตที่น้อยลงเพื่อแทนค่าทั่วไปมากขึ้นเรียงลำดับเหมือนไฟล์ซิป

ขั้นตอนที่ 1 และ 2 เป็นสิ่งที่สูญเสียและแต่ละชิ้นก็สร้างสิ่งประดิษฐ์ประเภทของตัวเองขึ้นมา (แม้ว่าจะมีบางส่วนที่ทับซ้อนกัน) การสุ่มตัวอย่าง Chroma มีแนวโน้มที่จะทำให้ขอบคมชัดระหว่างภูมิภาคที่มีสีต่างกัน สิ่งนี้สามารถมองเห็นได้ในศิลปะเวกเตอร์โดยเฉพาะที่รูปทรงสีสันสดใสหยิบหินก้อนโต ๆ รอบ ๆ ขอบของมัน การหาปริมาณความถี่ทำให้รายละเอียดละเอียดชัดเจนโดยทั่วไปและยังสร้างสิ่งประดิษฐ์รูปบล็อกที่การตั้งค่าคุณภาพต่ำเนื่องจาก DCT นั้นทำแบบบล็อกต่อบล็อก มันสามารถมองเห็นได้โดยเฉพาะอย่างยิ่งในข้อความ

นี่คือเหตุผลที่ JPEG ไม่ใช้สำหรับภาพที่มีกราฟิกแบบเวกเตอร์หรือข้อความ - อัลกอริธึมการบีบอัดของไฟล์นั้นไม่เหมาะสมสำหรับกรณีเหล่านั้นแม้ว่าจะใช้งานได้ดีกับภาพถ่ายและภาพอื่น ๆ ที่มีพื้นผิวที่ซับซ้อนและไม่คมเกินไป


ขอบคุณมากสำหรับคำอธิบายโดยละเอียดของคุณนาธาน +1 ฉันเข้าใจว่าอัลกอริธึมการบีบอัดมีข้อ จำกัด สำหรับ JPEG แต่ฉันแค่ต้องการตรวจสอบว่ามีการบีบอัดจำนวนที่เหมาะสมพร้อมกับตัวเลือกอื่น ๆ (เมื่อบันทึก) หรือไม่ ฉันแก้ไขคำถามด้วยตัวอย่าง
Armfoot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.