เจเพ็ก อัลกอริธึมการบีบอัด

สวัสดีอีกครั้ง! ฉันพบบทความนี้เขียนย้อนกลับไปในเดือนพฤษภาคม 2019 นี่เป็นบทความต่อเนื่องจากชุดบทความเกี่ยวกับ WAVE และ JPEG ที่นี่ เป็นครั้งแรก. เอกสารนี้จะรวมข้อมูลเกี่ยวกับอัลกอริธึมการเข้ารหัสรูปภาพและรูปแบบโดยรวม

ประวัติศาสตร์เล็กน้อย

บทความ Wikipedia หนึ่งช้อนโต๊ะ:

JPEG (Joint Photographic Experts Group) เป็นหนึ่งในรูปแบบกราฟิกแรสเตอร์ยอดนิยมที่ใช้สำหรับจัดเก็บภาพถ่ายและภาพที่คล้ายกัน

มาตรฐานนี้ได้รับการพัฒนาโดย Joint Photographic Experts Group ย้อนกลับไปในปี 1991 เพื่อการบีบอัดภาพที่มีประสิทธิภาพ

รูปภาพเปลี่ยนจาก raw เป็น JPEG ได้อย่างไร

บางคนคิดว่าภาพ JPEG เป็นข้อมูลดิบที่ถูกบีบอัดโดยใช้วิธี Huffman แต่สิ่งนี้ไม่เป็นความจริง ก่อนที่จะควบคุมการบีบอัด ข้อมูลจะเดินทางไกล

ขั้นแรก โมเดลสีจะเปลี่ยนจาก RGB เป็น YCbCr มีแม้กระทั่งอัลกอริธึมพิเศษสำหรับสิ่งนี้ - ที่นี่. Y ไม่ได้ถูกแตะต้อง เนื่องจากจะต้องรับผิดชอบต่อความสว่าง และการเปลี่ยนแปลงจะสังเกตเห็นได้ชัดเจน

สิ่งแรกที่ต้องทำกับภาพคือ "การทำให้ผอมบาง" (การสุ่มตัวอย่าง) เข้าใจง่าย: ถ่ายอาร์เรย์พิกเซล 2x2 จากนั้นใช้ Cb และ Cr - ค่าเฉลี่ยของแต่ละองค์ประกอบ YCbCr ของ 4 พิกเซลเหล่านี้ ดังนั้น, เราชนะ 6 ไบต์แทนที่จะเป็น 4 Y, 4 Cb, 4 Cr เราได้ 4 Y และ Cb และ Cr เดียวกันสำหรับแต่ละรายการ (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6) ที่ขนาด 2x2 การบีบอัดแบบสูญเสียที่มีอัตราส่วนการบีบอัด 2:1 ให้เสียงที่หนักแน่น สิ่งนี้ใช้กับรูปภาพทั้งหมด และพวกเขาก็ลดขนาดลงครึ่งหนึ่ง และเราสามารถใช้เทคนิคนี้ได้ด้วยการรับรู้สีของเรา บุคคลจะสังเกตเห็นความแตกต่างของความสว่างได้ง่าย แต่จะไม่เห็นความแตกต่างที่สี หากใช้ค่าเฉลี่ยบนบล็อกพิกเซลเล็กๆ การทำให้ผอมบางสามารถทำได้เป็นเส้น 4 พิกเซลในแนวนอนและแนวตั้ง ตัวเลือกแรกใช้บ่อยกว่า หากคุณภาพของภาพมีความสำคัญ จะไม่มีการตัดทอนเลย
ภาพประกอบของการทำให้ผอมบาง (Habr ไม่อนุญาตให้ฉันแทรก gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

ส่วนหลักของการเตรียมการ

เพร็พ

มาถึงส่วนที่ยากที่สุดและจำเป็นที่สุดแล้ว รูปภาพทั้งหมดแบ่งออกเป็นบล็อกขนาด 8x8 (ใช้การเติมหากความละเอียดไม่ใช่ทวีคูณของด้านบล็อก)

ตอนนี้นำไปใช้กับแต่ละบล็อก DCT (การแปลงโคไซน์แบบไม่ต่อเนื่อง). ในส่วนนี้ทุกสิ่งที่ไม่จำเป็นจะถูกลบออกจากภาพ เมื่อใช้ DCT คุณต้องเข้าใจว่าบล็อกที่กำหนด (8×8) อธิบายส่วนที่ซ้ำซากจำเจของภาพหรือไม่ เช่น ท้องฟ้า ผนัง; หรือมีโครงสร้างที่ซับซ้อน (เส้นผม สัญลักษณ์ ฯลฯ) มีเหตุผลที่สามารถอธิบายสีที่คล้ายกัน 64 พิกเซลได้ด้วย 1 เพราะ ทราบขนาดบล็อกแล้ว มากสำหรับการบีบอัด: 64 ต่อ 1

DCT เปลี่ยนบล็อกให้เป็นสเปกตรัม และเมื่อการอ่านเปลี่ยนแปลงอย่างรวดเร็ว ค่าสัมประสิทธิ์จะกลายเป็นบวก และยิ่งการเปลี่ยนแปลงคมชัดมากขึ้น เอาต์พุตก็จะยิ่งสูงขึ้นเท่านั้น เมื่อค่าสัมประสิทธิ์สูงขึ้น รูปภาพจะแสดงการเปลี่ยนสีและความสว่างที่ชัดเจน โดยที่ค่าของส่วนประกอบ YCbCr ในบล็อกจะต่ำกว่า - อ่อน (ราบรื่น)

การหาปริมาณ

ใช้การตั้งค่าการบีบอัดที่นี่แล้ว ค่าสัมประสิทธิ์แต่ละตัวในเมทริกซ์ 8x8 แต่ละตัวจะถูกหารด้วยจำนวนที่แน่นอน หากคุณจะไม่ลดคุณภาพของภาพหลังจากแก้ไขทั้งหมดแล้ว ตัวหารควรเป็นหนึ่ง หากความทรงจำที่อยู่ในรูปภาพนี้สำคัญสำหรับคุณมากกว่า ตัวหารจะมากกว่า 1 และผลหารจะถูกปัดเศษ ปรากฎว่าหลังจากการปัดเศษคุณมักจะจบลงด้วยเลขศูนย์จำนวนมาก

การหาปริมาณจะทำเพื่อสร้างความเป็นไปได้ในการบีบอัดที่มากยิ่งขึ้น ต่อไปนี้คือลักษณะการใช้ตัวอย่างการหาปริมาณของกราฟ y = sin(x):

เจเพ็ก อัลกอริธึมการบีบอัด

การบีบอัด

ขั้นแรกเราจะดูเมทริกซ์ในรูปแบบซิกแซก:

เจเพ็ก อัลกอริธึมการบีบอัด

เราได้อาร์เรย์หนึ่งมิติพร้อมตัวเลข เราเห็นว่ามีศูนย์อยู่หลายตัวก็สามารถลบออกได้ ในการทำเช่นนี้ แทนที่จะเรียงลำดับเลขศูนย์หลายๆ ตัว เราจะป้อนเลขศูนย์ 1 ตัวและหลังจากนั้นจะมีตัวเลขระบุหมายเลขของมันในลำดับ วิธีนี้ทำให้คุณสามารถรีเซ็ตเป็น 1/3 ของขนาดของอาเรย์ทั้งหมดได้ จากนั้นเราก็บีบอัดอาร์เรย์นี้โดยใช้วิธี Huffman แล้วเขียนลงในไฟล์เอง

ใช้ที่ไหน

ทุกที่. เช่นเดียวกับ PNG นั้น JPEG ถูกใช้ในกล้อง ระบบปฏิบัติการ (เช่น โลโก้บริษัท ไอคอนแอปพลิเคชัน ภาพขนาดย่อ) และในทุกพื้นที่ที่เป็นไปได้ซึ่งจำเป็นต้องจัดเก็บรูปภาพอย่างมีประสิทธิภาพ

เอาท์พุต

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

แหล่งที่มา

บทความเกี่ยวกับ YCbCr บนวิกิพีเดีย
บทความวิกิพีเดียเกี่ยวกับ JPEG
เกร็ดเล็กเกร็ดน้อยเกี่ยวกับ PrEP จากโพสต์ Pikabu
บทความ Wikipedia เกี่ยวกับ PrEP

ที่มา: will.com

เพิ่มความคิดเห็น