การสูญเสียคุณภาพของภาพเกือบทั้งหมดเกิดขึ้นในครั้งแรกที่ภาพถูกบีบอัดเป็น JPEG โดยไม่คำนึงถึงจำนวนครั้งที่ถูกบีบอัด JPEG ที่มีการตั้งค่าเดียวกัน , การสูญเสีย generational จะถูก จำกัด ให้เกิดข้อผิดพลาดในการปัดเศษ
ขอบเขตของ MCU ยังคงเหมือนเดิม (บล็อก 8x8)
การสุ่มตัวอย่าง Chroma ถูกปิดใช้งาน
DQT คงที่ (การตั้งค่าคุณภาพเดียวกัน)
อย่างไรก็ตามข้อผิดพลาดในการปัดเศษอาจมีขนาดใหญ่สำหรับการวนซ้ำแต่ละครั้งที่ไม่ตรงตามเกณฑ์ด้านบนและเป็นความระมัดระวังในการสำรองข้อมูลของไฟล์ต้นฉบับทั้งหมด
แปลง colorspace หากต้องการข้อมูลสี downsample (สีมา subsampling) (Lossy) ถ้าไม่ได้ downsampled การสูญเสียของข้อมูลที่เป็นผลมาจากข้อผิดพลาดในการปัดเศษ
การแบ่งกลุ่ม แบ่งแต่ละช่องเป็นบล็อก 8x8 (MCU = หน่วยการเข้ารหัสขั้นต่ำ) (Lossless)
หมายเหตุ: หากเปิดใช้งานการสุ่มตัวอย่าง Chroma ตัวประมวลผลอาจเป็น 16x8, 8x16 หรือ 16x16 ในแง่ของภาพต้นฉบับ อย่างไรก็ตาม MCUs ยังคงเป็นบล็อก 8x8 ทั้งหมด
การแปลงโคไซน์ไม่ต่อเนื่อง (DCT) ในแต่ละ MCU การสูญเสียข้อมูลที่เป็นผลมาจากข้อผิดพลาดในการปัดเศษ
ควอน ค่าในแต่ละเซลล์ของ MCU จะถูกหารด้วยตัวเลขที่ระบุในตารางควอนติเซชั่น (DQT) ค่าจะถูกปัดเศษลงซึ่งส่วนใหญ่จะเป็นศูนย์ นี่คือส่วนสูญเสียหลักของอัลกอริทึม
ซิกแซกสแกน จัดเรียงค่าใหม่ใน MCU แต่ละตัวตามลำดับตัวเลขตามรูปแบบ zig-zag ศูนย์ที่เกิดขึ้นระหว่างการควอนตัมจะถูกจัดกลุ่มเข้าด้วยกัน (Lossless)
DPCM = การปรับรหัสพัลส์แบบดิฟเฟอเรนเชียล แปลงลำดับตัวเลขเป็นรูปแบบที่ง่ายต่อการบีบอัด (Lossless)
RLE = เรียกใช้การเข้ารหัสความยาว ศูนย์ที่ต่อเนื่องกันจะถูกบีบอัด (Lossless)
รหัสเอนโทรปี / Huffman (Lossless)
บีบอัด JPEG อีกครั้ง
โปรดทราบว่าdownsampling ช่องสีและควอนเป็นขั้นตอนเท่านั้นจงใจสูญเสีย การหลีกเลี่ยงข้อผิดพลาดในการปัดเศษในตอนนี้ขั้นตอนอื่นทั้งหมดจะไม่สูญ เมื่อเกิดควอนติเซชั่นการย้อนกลับและทำซ้ำขั้นตอนจะให้ผลลัพธ์ที่เหมือนกัน ในคำอื่น ๆอีกควอน (กับ DQT เดียวกัน) เป็น lossless
โดยหลักการแล้วมันเป็นไปได้ที่จะสร้างอัลกอริธึมการสุ่มใหม่ที่ไม่มีความสูญเสียหลังจากผ่านครั้งแรก อย่างไรก็ตามด้วยการใช้งานใน ImageMagick สีอาจเปลี่ยนไปอย่างมากก่อนที่จะถึงสถานะคงที่ดังที่เห็นในภาพของ ths
เมื่อกำหนดเงื่อนไขที่เหมาะสมการบีบอัด JPEG อีกครั้งด้วยการตั้งค่าคุณภาพเดียวกันจะส่งผลให้ JPEG เดียวกัน ในคำอื่น ๆrecompressing JPEGs คืออาจ lossless ในทางปฏิบัติการบีบอัด JPEG อีกครั้งนั้นไม่สูญเสีย แต่ขึ้นอยู่กับและถูก จำกัด ด้วยข้อผิดพลาดในการปัดเศษ แม้ว่าข้อผิดพลาดในการปัดเศษมักจะมาบรรจบกันเป็นศูนย์ในที่สุดเพื่อให้มีการสร้างรูปภาพเดียวกันใหม่อีกครั้งการรวมกลุ่มย่อยของ Chroma อาจส่งผลให้เกิดการเปลี่ยนแปลงสีอย่างมีนัยสำคัญ
การสาธิต (การตั้งค่าคุณภาพเดียวกัน)
ฉันเขียนbash
สคริปต์ต่อไปนี้ซึ่งใช้ ImageMagick เพื่อบีบอัดไฟล์ JPEG ซ้ำ ๆ ตามการตั้งค่าคุณภาพที่กำหนด:
#!/usr/bin/env bash
n=10001; q1=90
convert original.png -sampling-factor 4:4:4 -quality ${q1} ${n}.jpg
while true ; do
q2=${q1} # for variants, such as adding randomness
convert ${n}.jpg -quality ${q2} $((n+1)).jpg
#\rm $((n-5)).jpg # uncomment to avoid running out of space
n=$((n+1))
echo -n "$q2 "
md5sum ${n}.jpg
done
หลังจากให้มันทำงานไปสองสามร้อยครั้งฉันก็วิ่งmd5sum
ตามผลลัพธ์:
d9c0d55ee5c8b5408f7e50f8ebc1010e original.jpg
880db8f146db87d293def674c6845007 10316.jpg
880db8f146db87d293def674c6845007 10317.jpg
880db8f146db87d293def674c6845007 10318.jpg
880db8f146db87d293def674c6845007 10319.jpg
880db8f146db87d293def674c6845007 10320.jpg
เราสามารถเห็นได้ว่าแท้จริงแล้วข้อผิดพลาดในการปัดเศษได้แปรสภาพเป็นศูนย์และภาพเดียวกันที่แน่นอนจะถูกทำซ้ำซ้ำไปซ้ำมา
ฉันได้ทำซ้ำหลายครั้งด้วยภาพและการตั้งค่าคุณภาพที่แตกต่างกัน โดยปกติจะถึงสถานะที่มั่นคงและภาพเดียวกันที่แน่นอนจะทำซ้ำซ้ำแล้วซ้ำอีก
ฉันพยายามจำลองผลลัพธ์ของ mattdm โดยใช้ Imagemagick บน Ubuntu 18.04 ต้นฉบับคือการแปลงดิบเป็น TIFF ใน Rawtherapee แต่ดูเหมือนว่าจะไม่สามารถใช้ได้อีกต่อไป ในสถานที่นั้นฉันเอาเวอร์ชั่นขยายและลดขนาดให้เป็นขนาดดั้งเดิม (256x256) จากนั้นฉันบีบอัดซ้ำอีกครั้งที่ 75 จนกระทั่งฉันได้มาบรรจบกัน นี่คือผลลัพธ์ (ดั้งเดิม, 1, n, ความแตกต่าง):
ผลลัพธ์ของฉันแตกต่าง หากไม่มีต้นฉบับจริงเหตุผลสำหรับความแตกต่างนั้นเป็นไปไม่ได้ที่จะตัดสิน
ฉันบีบอัดรูปภาพจากมุมบนซ้ายของภาพตัดต่อจนกระทั่งลู่เข้าที่ 90 นี่คือผลลัพธ์ (ดั้งเดิม, 1, n, ความแตกต่าง):
หลังจากเปิดใช้งานการสุ่มตัวอย่าง Chroma สีจะเปลี่ยนตามเวลาที่ถึงสถานะคงที่
การเปลี่ยนการตั้งค่าจำนวนเล็กน้อย
โดยการปรับเปลี่ยนตัวแปรq2
การตั้งค่าคุณภาพสามารถถูก จำกัด ให้เป็นชุดของค่าที่กระจายอย่างสม่ำเสมอ
q2=$(( (RANDOM % 3)*5 + 70 ))
สำหรับตัวเลือกการตั้งค่าจำนวนน้อยอาจถึงจุดสมดุลในที่สุดซึ่งจะเห็นได้เมื่อค่า md5 เริ่มซ้ำ ดูเหมือนว่าชุดใหญ่จะใช้เวลานานและภาพยิ่งแย่ลงก่อนที่จะถึงสมดุล
สิ่งที่ดูเหมือนว่าจะเกิดขึ้นที่สมดุลคือสัมประสิทธิ์ DCT ก่อนที่จะทำการควอนตัมจะต้องมีการหารทั้งหมด (หรือส่วนใหญ่) ของค่าควอนตัม ตัวอย่างเช่นหากสลับไปมาระหว่าง DQT สองตัวที่ค่าสัมประสิทธิ์ DCT ถูกแบ่งเป็น 3 และ 5 จะถึงสมดุลเมื่อค่าสัมประสิทธิ์ DCT หารด้วย 15 ซึ่งจะอธิบายได้ว่าเหตุใดคุณภาพของการหยดจึงมากกว่าความแตกต่างระหว่างการตั้งค่าดั้งเดิม
การเปลี่ยนการตั้งค่าจำนวนมาก
Eeyore ไม่มีความสุขเมื่อq2
มีการเปลี่ยนแปลงเช่นนั้น:
q2=$(( (RANDOM % 9) + 90 ))
ในการสร้างวิดีโอให้ใช้ffmpeg
:
rename 's@1@@' 1*.jpg
ffmpeg -r 30 -i %04d.jpg -c:v libx264 -crf 1 -vf fps=25 -pix_fmt yuv420p output.mp4
การรับชมการทำซ้ำ 9999 ครั้งแรกนั้นเกือบจะเหมือนการดูน้ำเดือด อาจต้องการเพิ่มความเร็วในการเล่นเป็นสองเท่า นี่คือ Eeyore หลังจากทำซ้ำ 11,999:
จะเกิดอะไรขึ้นถ้าขอบเขตของ MCU เปลี่ยนแปลง?
หากการเปลี่ยนแปลงเกิดขึ้นในจำนวน จำกัด ครั้งการบีบอัดซ้ำซ้ำ ๆ นั้นมีแนวโน้มที่จะถึงสถานะคงที่ หากการเปลี่ยนแปลงเกิดขึ้นในแต่ละการวนซ้ำภาพอาจลดลงในลักษณะที่คล้ายกับเมื่อ DQT เปลี่ยนแปลง
- นี่คือสิ่งที่เกิดขึ้นในวิดีโอที่หมุนภาพด้วยขนาดที่ไม่สามารถหารด้วย 8
แล้วการแก้ไขล่ะ?
ผลของการบีบอัดข้อมูลใหม่หลังจากแก้ไขขึ้นอยู่กับการแก้ไขเฉพาะที่ดำเนินการ ตัวอย่างเช่นการบันทึกที่การตั้งค่าคุณภาพเดียวกันหลังจากลดสิ่งประดิษฐ์ JPEG จะเรียกคืนสิ่งประดิษฐ์เดียวกันอีกครั้ง อย่างไรก็ตามการใช้การเปลี่ยนแปลงที่มีการแปลเช่นแปรงรักษาจะไม่ส่งผลกระทบต่อพื้นที่ที่ไม่ได้สัมผัส
คุณภาพของภาพหล่นที่สุดจะเกิดขึ้นในครั้งแรกที่ไฟล์ถูกบีบอัดตามการตั้งค่าคุณภาพที่กำหนด การบีบอัดซ้ำในภายหลังด้วยการตั้งค่าเดียวกันไม่ควรทำให้เกิดการเปลี่ยนแปลงที่ยิ่งใหญ่กว่าข้อผิดพลาดในการปัดเศษ ดังนั้นผมจึงคาดหวังว่าจะแก้ไข-บันทึกใหม่รอบที่การตั้งค่าคุณภาพที่กำหนดให้มีลักษณะเหมือนภาพอื่น ๆ ที่บันทึกไว้กับการตั้งค่าคุณภาพเดียวกัน (ตราบเท่าที่ขอบเขต MCU อยู่เหมือนเดิมและความเข้มของสี subsampling ถูกปิดใช้งาน )
แล้ววิดีโอเหล่านั้นล่ะ?
ฉันสามารถเขียนต้นฉบับของฉันด้วย JPEG ที่บีบอัดใหม่ได้หรือไม่
เป็นการระมัดระวังในการสำรองข้อมูลไฟล์ต้นฉบับทั้งหมดแต่หากคุณเขียนทับไฟล์เดิมโดยบังเอิญความเสียหายนั้นมี จำกัด นอกจากนี้ยังเป็นการทำงานที่ดีใน JPEG เมื่อปิดใช้งานการสุ่มตัวอย่าง Chroma
JPEG ไม่สามารถใช้กับภาพที่ใช้มากกว่า 8 บิตต่อสี