การบีบอัดภาพแบบไม่สูญเสีย อัลกอริธึม JPEG

JPEG เป็นหนึ่งในอัลกอริธึมใหม่และทรงพลังทีเดียว ถือเป็นมาตรฐานโดยพฤตินัยสำหรับภาพสีเต็มรูปแบบ อัลกอริธึมทำงานในพื้นที่ 8x8 ซึ่งความสว่างและสีเปลี่ยนแปลงได้ค่อนข้างราบรื่น เป็นผลให้เมื่อแยกเมทริกซ์ของพื้นที่ดังกล่าวออกเป็นอนุกรมคู่ในโคไซน์ (ดูสูตรด้านล่าง) เฉพาะค่าสัมประสิทธิ์แรกเท่านั้นที่มีนัยสำคัญ ดังนั้นการบีบอัดใน JPEG จึงดำเนินการเนื่องจากความราบรื่นของการเปลี่ยนแปลงสีในภาพ

อัลกอริธึมได้รับการพัฒนาโดยกลุ่มผู้เชี่ยวชาญด้านการถ่ายภาพสำหรับการบีบอัดภาพ 24 บิตโดยเฉพาะ JPEG - กลุ่มผู้เชี่ยวชาญด้านการถ่ายภาพร่วม - แผนกภายใน ISO - องค์การระหว่างประเทศเพื่อการมาตรฐาน ชื่อของอัลกอริทึมอ่านว่า ["jei"peg] โดยทั่วไป อัลกอริธึมจะขึ้นอยู่กับการแปลงโคไซน์แบบไม่ต่อเนื่อง (ต่อไปนี้จะเรียกว่า DCT) ที่ใช้กับเมทริกซ์รูปภาพเพื่อให้ได้เมทริกซ์ค่าสัมประสิทธิ์ใหม่ ใช้การแปลงแบบผกผันเพื่อให้ได้ภาพต้นฉบับ

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

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

อัลกอริทึมทำงานอย่างไร

เรามาดูรายละเอียดอัลกอริธึมกันดีกว่า (รูปที่ 2.1) ให้เราบีบอัดภาพ 24 บิต


ขั้นตอนที่ 1เราแปลงรูปภาพจากปริภูมิสี RGB โดยมีส่วนประกอบที่รับผิดชอบส่วนประกอบสีแดง เขียว และน้ำเงินของสีจุด ให้เป็นปริภูมิสี YCrCb (บางครั้งเรียกว่า YUV)

ในนั้น Y คือองค์ประกอบความสว่าง และ Cr, Co เป็นองค์ประกอบที่รับผิดชอบสี (สีแดงและสีน้ำเงิน) เนื่องจากดวงตาของมนุษย์มีความไวต่อสีน้อยกว่าความสว่าง จึงเป็นไปได้ที่จะเก็บถาวรอาร์เรย์สำหรับส่วนประกอบ Cr และ Co ที่มีการสูญเสียจำนวนมาก และด้วยเหตุนี้ อัตราส่วนการบีบอัดที่สูงจึงถูกนำมาใช้ในโทรทัศน์มานานแล้ว มีการจัดสรรย่านความถี่ที่แคบกว่าสำหรับสัญญาณที่รับผิดชอบต่อสี การแปลอย่างง่ายจากปริภูมิสี RGB ไปเป็นปริภูมิสี YCrCb สามารถแสดงได้โดยใช้เมทริกซ์การเปลี่ยนภาพ:

ขั้นตอนที่ 2เราแบ่งภาพต้นฉบับออกเป็นเมทริกซ์ขนาด 8x8 เราสร้างเมทริกซ์ DCT ที่ทำงาน 3 ตัวจากแต่ละอัน - 8 บิตแยกกันสำหรับแต่ละส่วนประกอบ ที่อัตราการบีบอัดที่สูงขึ้น ขั้นตอนนี้อาจยากขึ้นเล็กน้อย รูปภาพจะถูกแบ่งตามองค์ประกอบ Y เช่นเดียวกับในกรณีแรก และสำหรับองค์ประกอบ Cr และ Cb เมทริกซ์จะถูกพิมพ์ผ่านแถวและคอลัมน์ นั่นคือจากเมทริกซ์ 16x16 ดั้งเดิมจะได้รับเมทริกซ์ DCT ที่ใช้งานได้เพียงเมทริกซ์เดียวเท่านั้น ในกรณีนี้ ตามที่เห็นได้ง่าย เราจะสูญเสียข้อมูลที่เป็นประโยชน์ 3/4 เกี่ยวกับองค์ประกอบสีของภาพ และได้รับการบีบอัด 2 เท่าทันที เราสามารถทำได้โดยการทำงานในพื้นที่ YCrCb ตามที่แสดงในทางปฏิบัติ สิ่งนี้ไม่มีผลกระทบอย่างมีนัยสำคัญต่อภาพ RGB ที่ได้

ขั้นตอนที่ 3ในรูปแบบอย่างง่าย DCT สำหรับ n=8 สามารถแสดงได้ดังนี้:

nu,v] = ^Hc(i,u)xC(j,v)y

ใช่)

ใช่= รอบจำนวนเต็ม

ขั้นตอนนี้เป็นขั้นตอนที่ควบคุมอัตราส่วนกำลังอัดและเกิดการสูญเสียมากที่สุด เป็นที่ชัดเจนว่าการระบุ MK ด้วยค่าสัมประสิทธิ์สูง เราจะได้ค่าศูนย์มากขึ้นและด้วยเหตุนี้ ระดับการบีบอัดจึงสูงขึ้น

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

ขั้นตอน 5. เราแปลงเมทริกซ์ 8x8 ให้เป็นเวกเตอร์ 64 องค์ประกอบโดยใช้การสแกนซิกแซก เช่น เราหาองค์ประกอบที่มีดัชนี (0,0), (0,1), (1,0), (2,0 ) .

ดังนั้นที่จุดเริ่มต้นของเวกเตอร์เราจะได้ค่าสัมประสิทธิ์เมทริกซ์ที่สอดคล้องกับความถี่ต่ำและที่จุดสิ้นสุด - ถึงความถี่สูง

ขั้นตอนที่ 6เรายุบเวกเตอร์โดยใช้อัลกอริธึมการเข้ารหัสกลุ่ม ในกรณีนี้เราได้รับคู่ประเภท<пропустить, число>โดยที่ "skip" คือจำนวนศูนย์ที่ข้าม และ "number" คือค่าที่จะใส่ในเซลล์ถัดไป ดังนั้นเวกเตอร์ 42 3000-2 00001 ... จะพับเป็นคู่ (0.42) (0.3) (3,-2) (4,1)....

ขั้นตอน 7. เรายุบคู่ผลลัพธ์โดยใช้การเข้ารหัส Huffman ด้วยตารางคงที่

กระบวนการกู้คืนรูปภาพในอัลกอริธึมนี้มีความสมมาตรอย่างสมบูรณ์ วิธีนี้ช่วยให้คุณบีบอัดภาพบางภาพได้ 10-15 เท่าโดยไม่มีการสูญเสียร้ายแรง

ด้านบวกที่สำคัญของอัลกอริทึมคือ:

■ มีการตั้งค่าระดับการบีบอัด;

■ ภาพสีเอาท์พุตสามารถมีได้ 24 บิตต่อจุด

ด้านลบของอัลกอริทึมคือ:

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

■ เอฟเฟกต์ Gibbs ปรากฏขึ้น - รัศมีตามขอบเขตของการเปลี่ยนสีที่คมชัด

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

การปฏิบัติตามข้อกำหนดหลังทำให้มีอุปกรณ์เช่นกล้องดิจิตอลที่ถ่ายภาพ 24 บิตบนแฟลชการ์ดขนาด 8-256 MB ได้" จากนั้นการ์ดใบนี้จะถูกเสียบเข้าไปในช่องบนแล็ปท็อปของคุณและโปรแกรมที่เกี่ยวข้องจะช่วยให้คุณ เพื่ออ่านภาพไม่จริง เนียหากอัลกอริทึมไม่สมมาตร คงไม่เป็นที่พอใจที่จะรอเป็นเวลานานเพื่อให้อุปกรณ์ "ชาร์จ" และบีบอัดภาพ

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

กว้างการใช้ JPEG เป็นเวลานานอาจถูกจำกัดโดยการทำงานกับภาพ 24 บิตเท่านั้น ดังนั้น ในการดูภาพด้วยคุณภาพที่ยอมรับได้บนจอภาพปกติในจานสี 256 สี จึงจำเป็นต้องใช้อัลกอริธึมที่เหมาะสม และด้วยเหตุนี้ จึงต้องใช้เวลาระยะหนึ่ง ในแอปพลิเคชันที่มุ่งเป้าไปที่ผู้ใช้ที่มีความต้องการสูง เช่น เกม ความล่าช้าดังกล่าวเป็นสิ่งที่ยอมรับไม่ได้ นอกจากนี้ หากคุณมีรูปภาพ เช่น ในรูปแบบ GIF 8 บิต ซึ่งแปลงเป็น JPEG 24 บิต แล้วกลับมาดูเป็น GIF อีกครั้ง คุณภาพที่ลดลงจะเกิดขึ้นสองครั้งระหว่างการแปลงทั้งสองครั้ง อย่างไรก็ตาม การเพิ่มขนาดไฟล์เก็บถาวรมักจะมีขนาดใหญ่มาก (3-20 เท่า) และการสูญเสียคุณภาพมีน้อยมากจนการจัดเก็บภาพในรูปแบบ JPEG มีประสิทธิภาพมาก

จำเป็นต้องพูดสองสามคำเกี่ยวกับการปรับเปลี่ยนอัลกอริทึมนี้ แม้ว่า JPEG จะเป็นมาตรฐาน ISO แต่รูปแบบไฟล์ยังไม่ได้รับการแก้ไข การใช้ประโยชน์จากสิ่งนี้ ผู้ผลิตจะสร้างรูปแบบของตนเองที่เข้ากันไม่ได้ ดังนั้นจึงสามารถเปลี่ยนอัลกอริธึมได้ ดังนั้นตารางอัลกอริทึมภายในที่แนะนำโดย ISO จะถูกแทนที่ด้วยตารางของตัวเอง นอกจากนี้ยังมีความสับสนเล็กน้อยเมื่อกำหนดระดับการสูญเสีย ตัวอย่างเช่นในระหว่างการทดสอบปรากฎว่าคุณภาพ "ยอดเยี่ยม" "100%" และ "10 คะแนน" ให้ภาพที่แตกต่างกันอย่างมีนัยสำคัญ ในขณะเดียวกัน คุณภาพ "100%" ไม่ได้หมายถึงการบีบอัดแบบไม่สูญเสียข้อมูล นอกจากนี้ยังมีตัวเลือก JPEG สำหรับแอปพลิเคชันเฉพาะอีกด้วย

ตามมาตรฐาน ISO นั้น JPEG ถูกนำมาใช้มากขึ้นในการแลกเปลี่ยนภาพบนเครือข่ายคอมพิวเตอร์ อัลกอริธึม JPEG ได้รับการสนับสนุนในรูปแบบ Quick Time, PostScript ระดับ 2, Tiff 6.0 และปัจจุบันครองตำแหน่งที่โดดเด่นในระบบมัลติมีเดีย

ลักษณะของอัลกอริทึม JPEG: o ! ว. - อัตราการบีบอัด: 2-200 (กำหนดโดยผู้ใช้) ,ทีเอส, :_,. - คลาสรูปภาพ:ภาพสี 2jj.bit หรือ iso-| การสะท้อนในระดับสีเทาโดยไม่มีการเปลี่ยนสีที่คมชัด (ภาพถ่าย)

สมมาตร: 1.

คุณสมบัติ:ในบางกรณีอัลกอริธึมก็สร้างขึ้น! "รัศมี" รอบขอบเขตแนวนอนและแนวตั้งที่คมชัดในภาพ (เอฟเฟกต์ Gibbs) นอกจากนี้ ที่อัตราส่วนกำลังอัดสูง iso-! รูปภาพจะถูกแบ่งออกเป็นบล็อกขนาด 8x8 พิกเซล

อัลกอริธึม JPEG ได้รับการพัฒนาโดยเฉพาะสำหรับการบีบอัดภาพโดย Joint Photographic Expert Group (JPEG) และใช้ DCT

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

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

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

โดยปกติการหาปริมาณจะดำเนินการโดยใช้เมทริกซ์พิเศษซึ่งมีตัวหารซึ่งจะต้องแบ่งองค์ประกอบ DCT มักใช้อัลกอริทึมต่อไปนี้:

ถาม(i,j) = 1 + ((1 + i + j) q);

โดยที่ Q(i,j) คือเมทริกซ์ของตัวหาร

q - พารามิเตอร์คุณภาพ

โดยการเลือกพารามิเตอร์ q คุณสามารถควบคุมค่าตัวหารและปรับอัตราส่วนการบีบอัดได้ ตัวอย่างเช่น ด้วย q = 2 คุณจะได้เมทริกซ์ในรูปแบบต่อไปนี้ (รูปที่ 3.6):

รูปที่ 3.6. ตัวอย่างของเมทริกซ์เชิงปริมาณ

หลังจากหารองค์ประกอบเมทริกซ์ 64 ตัวด้วยองค์ประกอบของเมทริกซ์ Q(i,j) แล้ว ผลลัพธ์ที่ได้คือเมทริกซ์ที่มี:

ค่าศูนย์เพิ่มเติมจำนวนมากจะปรากฏขึ้น

ผลกระทบของการลดค่าจากซ้ายบนไปขวาล่างจะเด่นชัดยิ่งขึ้น

สำหรับการบันทึกแบบประหยัดจำเป็นต้องเปลี่ยนลำดับการเคลื่อนที่ของค่าที่ได้รับเพื่อให้ลำดับขององค์ประกอบศูนย์ยาวที่สุด วิธีหนึ่งที่เป็นไปได้ในการเปลี่ยนลำดับการเคลื่อนที่คือวิธีซิกแซก (รูปที่ 3.7)

รูปที่ 3.7. การแปลงเมทริกซ์สองมิติให้เป็นลำดับหนึ่งมิติโดยใช้วิธีซิกแซก

ดังที่เห็นได้จากรูปภาพ เมทริกซ์สองมิติที่มีรูปแบบองค์ประกอบ 8 x 8 จะถูกแปลงเป็นลำดับมิติเดียวที่มีความยาว 64 องค์ประกอบ คุณสมบัติหลักของลำดับดังกล่าวคือตำแหน่งของสัมประสิทธิ์ที่สำคัญที่สุดที่จุดเริ่มต้น และองค์ประกอบที่มีนัยสำคัญน้อยที่สุด (โดยปกติจะเป็นศูนย์) ที่จุดสิ้นสุด

การนำอัลกอริธึมไปใช้ประกอบด้วยชุดของการดำเนินการตามลำดับ ซึ่งแสดงไว้ในรูปที่ 1 3.8.

รูปที่ 3.8. ลำดับการดำเนินการเมื่อใช้อัลกอริทึม JPEG

1. หากจำเป็น รูปภาพจะถูกแปลงเป็นรูปแบบ YUV

2. สัญญาณ U และ V ที่แตกต่างกันของสีจะถูกสุ่มตัวอย่างตามรูปแบบ 4:2:0 การแบ่งภาพออกเป็นส่วนๆ ขององค์ประกอบ 8 x 8 การประมวลผลสัญญาณความสว่างและสีเพิ่มเติมสามารถดำเนินการได้อย่างอิสระและขนานกัน

3. การแปลงโคไซน์แบบไม่ต่อเนื่องจะดำเนินการกับบล็อกองค์ประกอบ 8 x 8 ทั้งหมด

4. การหาปริมาณตามพารามิเตอร์คุณภาพที่เลือก

5. การสแกนซิกแซกเพื่อให้ได้ลำดับมิติเดียวจาก 64 องค์ประกอบ

6. อัลกอริทึม RLE ถูกนำไปใช้กับลำดับมิติเดียว

7. อัลกอริธึม Huffman ถูกนำไปใช้กับลำดับที่ถูกบีบอัดโดยใช้ RLE แล้ว

8. ป.ล. มีการใช้เลข 3 – 7 สำหรับบล็อกทั้งหมดที่มีรูปแบบองค์ประกอบ 8 x 8 และสำหรับระนาบสีทั้งหมด

คุณสมบัติหลักของวิธี JPEG มีดังนี้:

1. อัตราการบีบอัดสูง โดยเฉพาะภาพที่ถือว่าคุณภาพดีหรือดีเยี่ยม

2. พารามิเตอร์จำนวนมากที่อนุญาตให้ผู้ใช้ที่มีประสบการณ์ทดลองการตั้งค่าวิธีการ และบรรลุความสมดุลของการบีบอัด/คุณภาพที่ต้องการ

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

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

5. ความเป็นไปได้ของการใช้การบีบอัดโดยไม่สูญเสียข้อมูลในอัตราการบีบอัดที่ไม่สูงมาก

ง่ายต่อการคำนวณว่าภาพสีเต็มที่ไม่มีการบีบอัดขนาด 2,000 * 1,000 พิกเซลจะมีขนาดประมาณ 6 เมกะไบต์ หากเราพูดถึงภาพที่ได้รับจากกล้องมืออาชีพหรือเครื่องสแกนที่มีความละเอียดสูง ขนาดของภาพก็จะใหญ่ขึ้นอีก แม้ว่าความจุของอุปกรณ์จัดเก็บข้อมูลจะเพิ่มขึ้นอย่างรวดเร็ว แต่อัลกอริธึมการบีบอัดภาพต่างๆ ยังคงมีความเกี่ยวข้องมาก
อัลกอริธึมที่มีอยู่ทั้งหมดสามารถแบ่งออกเป็นสองคลาสใหญ่:

  • อัลกอริธึมการบีบอัดแบบไม่สูญเสีย;
  • อัลกอริธึมการบีบอัดแบบสูญเสีย
เมื่อเราพูดถึงการบีบอัดแบบไม่สูญเสียข้อมูล เราหมายถึงว่ามีอัลกอริธึมการผกผันกับอัลกอริธึมการบีบอัดที่ช่วยให้คุณสามารถกู้คืนภาพต้นฉบับได้อย่างแม่นยำ ไม่มีอัลกอริธึมแบบผกผันสำหรับอัลกอริธึมการบีบอัดแบบสูญเสีย มีอัลกอริธึมที่กู้คืนรูปภาพที่ไม่จำเป็นต้องตรงกับรูปภาพต้นฉบับทุกประการ อัลกอริธึมการบีบอัดและการกู้คืนถูกเลือกเพื่อให้ได้อัตราส่วนการบีบอัดสูงในขณะที่ยังคงคุณภาพของภาพไว้

อัลกอริธึมการบีบอัดแบบไม่สูญเสียข้อมูล

อัลกอริทึม RLE
อัลกอริธึมซีรีส์ RLE ทั้งหมดมีพื้นฐานมาจากแนวคิดที่เรียบง่าย: กลุ่มขององค์ประกอบที่ทำซ้ำจะถูกแทนที่ด้วยคู่ (จำนวนการทำซ้ำ องค์ประกอบที่ซ้ำกัน) ลองพิจารณาอัลกอริทึมนี้โดยใช้ตัวอย่างลำดับของบิต ลำดับนี้จะสลับกลุ่มของศูนย์และกลุ่ม นอกจากนี้ กลุ่มมักจะมีองค์ประกอบมากกว่าหนึ่งองค์ประกอบ จากนั้นลำดับ 11111 000000 11111111 00 จะสอดคล้องกับชุดตัวเลขต่อไปนี้ 5 6 8 2 ตัวเลขเหล่านี้ระบุจำนวนการทำซ้ำ (การนับเริ่มจากหน่วย) แต่ตัวเลขเหล่านี้จำเป็นต้องเข้ารหัสด้วย เราจะถือว่าจำนวนการซ้ำมีตั้งแต่ 0 ถึง 7 (นั่นคือ 3 บิตก็เพียงพอสำหรับเราในการเข้ารหัสจำนวนการซ้ำ) จากนั้นลำดับที่กล่าวถึงข้างต้นจะถูกเข้ารหัสโดยลำดับต่อไปนี้ของตัวเลข 5 6 7 0 1 2 เป็นเรื่องง่ายที่จะคำนวณว่าการเข้ารหัสลำดับดั้งเดิมต้องใช้ 21 บิต และในรูปแบบบีบอัด RLE ลำดับนี้จะใช้เวลา 18 บิต
แม้ว่าอัลกอริธึมนี้จะง่ายมาก แต่ประสิทธิภาพก็ค่อนข้างต่ำ ยิ่งไปกว่านั้น ในบางกรณี การใช้อัลกอริธึมนี้ไม่ทำให้ลดลง แต่เป็นการเพิ่มความยาวของลำดับ ตัวอย่างเช่น พิจารณาลำดับต่อไปนี้ 111 0000 11111111 00 ลำดับ RL ที่สอดคล้องกันมีลักษณะดังนี้: 3 4 7 0 1 2 ความยาวของลำดับดั้งเดิมคือ 17 บิต ความยาวของลำดับที่บีบอัดคือ 18 บิต
อัลกอริธึมนี้มีประสิทธิภาพสูงสุดสำหรับภาพขาวดำ นอกจากนี้ยังมักใช้เป็นหนึ่งในขั้นตอนกลางของการบีบอัดอัลกอริธึมที่ซับซ้อนมากขึ้น

อัลกอริธึมพจนานุกรม

แนวคิดเบื้องหลังอัลกอริธึมพจนานุกรมคือสายโซ่ขององค์ประกอบของลำดับดั้งเดิมถูกเข้ารหัส การเข้ารหัสนี้ใช้พจนานุกรมพิเศษซึ่งได้มาตามลำดับดั้งเดิม
มีอัลกอริธึมพจนานุกรมทั้งหมด แต่เราจะดูอัลกอริธึม LZW ที่พบบ่อยที่สุดซึ่งตั้งชื่อตามนักพัฒนา Lepel, Ziv และ Welch
พจนานุกรมในอัลกอริทึมนี้คือตารางที่เต็มไปด้วยกลุ่มการเข้ารหัสในขณะที่อัลกอริทึมทำงาน เมื่อถอดรหัสโค้ดที่บีบอัด พจนานุกรมจะถูกกู้คืนโดยอัตโนมัติ ดังนั้นจึงไม่จำเป็นต้องส่งพจนานุกรมไปพร้อมกับโค้ดที่บีบอัด
พจนานุกรมเริ่มต้นได้ด้วยสตริงซิงเกิลทั้งหมด เช่น บรรทัดแรกของพจนานุกรมแสดงถึงตัวอักษรที่เราเข้ารหัส ในระหว่างการบีบอัด ระบบจะค้นหาสายโซ่ที่ยาวที่สุดที่บันทึกไว้ในพจนานุกรมแล้ว ทุกครั้งที่พบลูกโซ่ที่ยังไม่ได้เขียนลงในพจนานุกรม ก็จะถูกเพิ่มเข้าไปที่นั่น และโค้ดที่บีบอัดที่สอดคล้องกับลูกโซ่ที่เขียนไว้ในพจนานุกรมแล้วจะถูกส่งออก ตามทฤษฎีแล้ว ไม่มีการกำหนดข้อจำกัดใดๆ กับขนาดของพจนานุกรม แต่ในทางปฏิบัติแล้ว การจำกัดขนาดนี้ก็สมเหตุสมผล เนื่องจากเมื่อเวลาผ่านไป โซ่เริ่มปรากฏขึ้นซึ่งไม่พบในข้อความอีกต่อไป นอกจากนี้ เมื่อเราเพิ่มขนาดของตารางเป็นสองเท่า เราต้องจัดสรรบิตพิเศษเพื่อจัดเก็บโค้ดที่บีบอัด เพื่อป้องกันสถานการณ์ดังกล่าวจึงมีการนำรหัสพิเศษมาใช้ซึ่งเป็นสัญลักษณ์ของการเริ่มต้นตารางด้วยลูกโซ่องค์ประกอบเดียวทั้งหมด
ลองดูตัวอย่างอัลกอริธึมการบีบอัด เราจะบีบอัดบรรทัด cuckoocuckoocuckoohood สมมติว่าพจนานุกรมจะมี 32 ตำแหน่ง ซึ่งหมายความว่าแต่ละรหัสจะมี 5 บิต ในขั้นต้นพจนานุกรมจะเต็มไปด้วยดังนี้:

ตารางนี้มีอยู่ทั้งด้านข้างของผู้ที่บีบอัดข้อมูลและด้านข้างของผู้ที่ขยายขนาดข้อมูล ตอนนี้เราจะดูกระบวนการบีบอัด

ตารางแสดงขั้นตอนการกรอกพจนานุกรม มันง่ายที่จะคำนวณว่าโค้ดที่บีบอัดที่ได้จะใช้เวลา 105 บิต และข้อความต้นฉบับ (สมมติว่าเราใช้การเข้ารหัส 4 บิตในหนึ่งอักขระ) จะใช้เวลา 116 บิต
โดยพื้นฐานแล้ว กระบวนการถอดรหัสลงมาที่การถอดรหัสโค้ดโดยตรง และสิ่งสำคัญคือตารางจะต้องเริ่มต้นในลักษณะเดียวกับระหว่างการเข้ารหัส ตอนนี้เรามาดูอัลกอริธึมการถอดรหัสกัน


เราสามารถกำหนดสตริงที่เพิ่มลงในพจนานุกรมได้อย่างสมบูรณ์ในขั้นตอน i-th ที่ i+1 เท่านั้น แน่นอนว่า บรรทัดที่ i ต้องลงท้ายด้วยอักขระตัวแรกของบรรทัด i+1 ที่. เราเพิ่งค้นพบวิธีคืนค่าพจนานุกรม สิ่งที่น่าสนใจคือสถานการณ์ที่มีการเข้ารหัสลำดับของแบบฟอร์ม cScSc โดยที่ c คืออักขระหนึ่งตัวและ S คือสตริง และคำว่า cS มีอยู่ในพจนานุกรมแล้ว เมื่อมองแวบแรกอาจดูเหมือนว่าตัวถอดรหัสจะไม่สามารถแก้ไขสถานการณ์นี้ได้ แต่ในความเป็นจริงแล้ว ทุกบรรทัดในประเภทนี้จะต้องลงท้ายด้วยอักขระเดียวกันกับที่เริ่มต้นเสมอ

อัลกอริธึมการเข้ารหัสทางสถิติ
อัลกอริทึมในชุดนี้จะกำหนดโค้ดที่บีบอัดที่สั้นที่สุดให้กับองค์ประกอบลำดับที่พบบ่อยที่สุด เหล่านั้น. ลำดับที่มีความยาวเท่ากันจะถูกเข้ารหัสด้วยโค้ดบีบอัดที่มีความยาวต่างกัน ยิ่งไปกว่านั้น ยิ่งลำดับเกิดขึ้นบ่อยเท่าใด รหัสที่บีบอัดที่สอดคล้องกันก็จะยิ่งสั้นลงเท่านั้น
อัลกอริทึมของฮัฟฟ์แมน
อัลกอริธึม Huffman ช่วยให้คุณสร้างรหัสนำหน้าได้ เราสามารถนึกถึงรหัสนำหน้าเป็นเส้นทางในแผนผังไบนารี: การไปจากโหนดไปยังลูกด้านซ้ายจะสอดคล้องกับ 0 ในโค้ด และไปยังลูกด้านขวาจะสอดคล้องกับ 1 ถ้าเราติดป้ายกำกับใบของต้นไม้ด้วยสัญลักษณ์ เพื่อที่จะเข้ารหัส เราจะได้รับการแสดงต้นไม้ไบนารี่ของโค้ดนำหน้า
ให้เราอธิบายอัลกอริทึมสำหรับการสร้างแผนผัง Huffman และรับรหัส Huffman
  1. อักขระของตัวอักษรอินพุตจะสร้างรายการโหนดอิสระ แต่ละแผ่นมีน้ำหนักเท่ากับความถี่ของการเกิดสัญลักษณ์
  2. มีการเลือกโหนดต้นไม้อิสระสองโหนดที่มีน้ำหนักน้อยที่สุด
  3. พ่อแม่ของพวกเขาถูกสร้างขึ้นโดยมีน้ำหนักเท่ากับน้ำหนักรวม
  4. พาเรนต์ถูกเพิ่มเข้าไปในรายการโหนดที่ว่าง และโหนดย่อยทั้งสองจะถูกลบออกจากรายการนี้
  5. ส่วนโค้งหนึ่งที่ออกจากพาเรนต์ถูกกำหนดบิต 1 ส่วนอีกส่วนถูกกำหนดบิต 0
  6. ขั้นตอนที่เริ่มต้นจากวินาทีจะถูกทำซ้ำจนกระทั่งเหลือโหนดว่างเพียงโหนดเดียวในรายการโหนดว่าง นี่จะถือเป็นรากของต้นไม้
เมื่อใช้อัลกอริธึมนี้ เราสามารถรับรหัส Huffman สำหรับตัวอักษรที่กำหนด โดยคำนึงถึงความถี่ของการเกิดอักขระ
การเข้ารหัสทางคณิตศาสตร์
อัลกอริธึมการเข้ารหัสทางคณิตศาสตร์เข้ารหัสสตริงขององค์ประกอบให้เป็นเศษส่วน ในกรณีนี้จะคำนึงถึงการกระจายความถี่ขององค์ประกอบด้วย ในขณะนี้ อัลกอริธึมการเข้ารหัสทางคณิตศาสตร์ได้รับการคุ้มครองโดยสิทธิบัตร ดังนั้นเราจะดูเฉพาะแนวคิดพื้นฐานเท่านั้น
ให้ตัวอักษรของเราประกอบด้วยสัญลักษณ์ N a1,...,aN และความถี่ของการเกิด p1,...,pN ตามลำดับ เรามาแบ่งครึ่งช่วงกันดีกว่า

(0,57); (0,45); (4,23); (1,-30); (0,-16); (2,1); (0,0)

สิ่งสำคัญอีกอย่างหนึ่ง: สมมติว่ามีที่ไหนสักแห่งบนเวกเตอร์เชิงปริมาณที่เรามี:

57, สิบแปดศูนย์, 3, 0.0 ,0.0 2, สามสิบสามศูนย์, 895, EOB

การเข้ารหัส JPG Huffman กำหนดข้อจำกัดว่าจำนวนศูนย์นำหน้าจะต้องเข้ารหัส เนื่องจากค่า 4 บิตต้องไม่เกิน 15

ดังนั้น ตัวอย่างก่อนหน้านี้ควรเขียนโค้ดเป็น:

(0,57); (15,0) (2,3); (4,2); (15,0) (15,0) (1,895), (0,0)

(15,0) เป็นค่าเข้ารหัสพิเศษที่ระบุว่ามีเลขศูนย์ต่อเนื่องกัน 16 ตัว

5.3 ขั้นตอนสุดท้าย - การเข้ารหัส Huffman

หมายเหตุสำคัญประการแรก: แทนที่จะจัดเก็บค่าจริง มาตรฐาน JPEG ระบุว่าเราจัดเก็บขนาดบิตขั้นต่ำที่เราสามารถเก็บค่านี้ได้ (ซึ่งเรียกว่าหมวดหมู่ของค่านี้) จากนั้นจึงแสดงค่านี้ด้วยการเข้ารหัสบิต แบบนี้:

7,..,-4,4,..,7 3 000,001,010,011,100,101,110,111

15,..,-8,8,..,15 4 0000,..,0111,1000,..,1111

31,..,-16,16,..,31 5 00000,..,01111,10000,..,11111

63,..,-32,32,..,63 6 .

127,..,-64,64,..,127 7 .

255,..,-128,128,..,255 8 .

511,..,-256,256,..,511 9 .

1023,..,-512,512,..,1023 10 .

2047,..,-1024,1024,..,2047 11 .

4095,..,-2048,2048,..,4095 12 .

8191,..,-4096,4096,..,8191 13 .

16383,..,-8192,8192,..,16383 14 .

32767,..,-16384,16384,..,32767 15 .

ต่อไปสำหรับตัวอย่างก่อนหน้านี้:

(0,57); (0,45); (4,23); (1,-30); (0,-8); (2,1); (0,0)

มาเข้ารหัสเฉพาะค่าทางขวามือของคู่นี้ ยกเว้นคู่ที่เป็นโทเค็นพิเศษ เช่น (0,0) หรือ (ถ้าเราต้องมี) (15,0)

45 ในทำนองเดียวกันจะถูกเข้ารหัสเป็น (6.101101)

30 -> (5,00001)

และตอนนี้ เราจะเขียนสตริงของคู่อีกครั้ง:

(0,6), 111001; (0,6), 101101; (4,5), 10111; (1,5), 00001; (0,4), 0111; (2,1), 1; (0,0)

คู่ค่า 2 ค่าที่อยู่ในวงเล็บสามารถแสดงเป็นไบต์ได้ เนื่องจากในความเป็นจริง แต่ละค่าจาก 2 ค่าสามารถแสดงเป็นชิ้นขนาด 4 บิตได้ (จำนวนศูนย์นำหน้าจะน้อยกว่า 15 เสมอและมีค่าเท่ากับ หมวดหมู่ [ตัวเลขที่เข้ารหัสในไฟล์ JPG - ในพื้นที่ -32767..32767]) ในไบต์นี้ บิตสูงแสดงถึงจำนวนศูนย์ที่อยู่ข้างหน้า และบิตต่ำแสดงถึงหมวดหมู่ของค่าใหม่ที่ไม่ใช่ 0

ขั้นตอนการเข้ารหัสขั้นสุดท้ายคือให้ Huffman เข้ารหัสไบต์นี้ จากนั้นบันทึกเป็นไฟล์ JPG ในรูปแบบบิตสตรีม ซึ่งเป็นโค้ด Huffman ของไบต์นี้ ตามด้วยการแสดงค่าระดับบิตของตัวเลขนี้

ตัวอย่างเช่น สำหรับไบต์ 6 (เทียบเท่ากับ (0,6)) เรามีรหัส Huffman = 111000

21 = (1,5) - 11111110110

4 = (0,4) - 1011

33 = (2,1) - 11011

0 = EOB= (0,0) - 1,010

บิตสตรีมสุดท้ายที่เขียนในไฟล์ JPG ไปยังดิสก์สำหรับตัวอย่างก่อนหน้าคือ 63 สัมประสิทธิ์ (จำไว้ว่าเราข้ามค่าสัมประสิทธิ์แรก) -

111000 111001 111000 101101 1111111110011001 10111 11111110110 00001

1011 0111 11011 1 1010
ข้อดีและข้อเสีย

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

อย่างไรก็ตาม แม้จะมีข้อบกพร่อง แต่ JPEG ก็แพร่หลายอย่างมากเนื่องจากมีอัตราส่วนการบีบอัดสูงเมื่อเทียบกับทางเลือกอื่นที่มีอยู่ในขณะที่เปิดตัว

2. อัลกอริธึม JPEG2000

อัลกอริธึม JPEG-2000 ได้รับการพัฒนาโดยผู้เชี่ยวชาญด้านการถ่ายภาพกลุ่มเดียวกับที่พัฒนา JPEG การก่อตั้ง JPEG ให้เป็นมาตรฐานสากลแล้วเสร็จในปี 1992 ในปีพ.ศ. 2540 เห็นได้ชัดว่าจำเป็นต้องมีมาตรฐานใหม่ที่ยืดหยุ่นและมีประสิทธิภาพมากขึ้น ซึ่งได้รับการสรุปผลภายในฤดูหนาวปี พ.ศ. 2543

ความแตกต่างที่สำคัญระหว่างอัลกอริทึมใน JPEG 2000 และอัลกอริทึมใน JPEG มีดังนี้:

1) คุณภาพของภาพดีขึ้นด้วยการบีบอัดระดับสูง หรือสิ่งเดียวกันคืออัตราส่วนการอัดที่สูงกว่าแต่คุณภาพเท่ากันสำหรับอัตราส่วนการอัดที่สูง ผลที่ได้คือการลดขนาดกราฟิก "คุณภาพเว็บ" ที่ไซต์ส่วนใหญ่ใช้ลงอย่างเห็นได้ชัด

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

3) อัลกอริธึมการบีบอัดหลักถูกแทนที่ด้วยเวฟเล็ต นอกเหนือจากการเพิ่มอัตราส่วนการบีบอัดที่ระบุแล้ว ยังทำให้สามารถกำจัดการบล็อก 8 พิกเซลที่เกิดขึ้นเมื่ออัตราส่วนการบีบอัดเพิ่มขึ้นได้ นอกจากนี้ ในตอนแรกการพัฒนาภาพที่ราบรื่นได้รวมอยู่ในมาตรฐานแล้ว (Progressive JPEG ซึ่งใช้งานบนอินเทอร์เน็ตอย่างแข็งขันปรากฏช้ากว่า JPEG มาก)

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

5) รองรับการบีบอัดแบบไม่สูญเสียข้อมูล นอกเหนือจากการบีบอัดแบบ lossy ตามปกติแล้ว JPEG ใหม่ยังรองรับการบีบอัดแบบ lossless อีกด้วย ดังนั้นจึงเป็นไปได้ที่จะใช้ JPEG เพื่อบีบอัดภาพทางการแพทย์ ในการพิมพ์ ในขณะที่บันทึกข้อความเพื่อให้ระบบ OCR จดจำได้ ฯลฯ

6) รองรับการบีบอัดภาพบิตเดียว (2 สี) สำหรับการบันทึกรูปภาพบิตเดียว (ภาพวาดด้วยหมึก ข้อความที่สแกน ฯลฯ) ก่อนหน้านี้แนะนำให้ใช้รูปแบบ GIF อย่างกว้างขวาง เนื่องจากการบีบอัด DCT นั้นไม่ได้ผลอย่างมากสำหรับรูปภาพที่มีการเปลี่ยนสีที่คมชัด ใน JPEG เมื่อบีบอัด รูปภาพ 1 บิตจะถูกแปลงเป็น 8 บิต เช่น เพิ่มขึ้น 8 เท่า หลังจากนั้นมีการพยายามบีบอัด มักจะน้อยกว่า 8 เท่า ตอนนี้เราสามารถแนะนำ JPEG 2000 เป็นอัลกอริธึมสากลได้แล้ว

7) รองรับความโปร่งใสในระดับรูปแบบ ขณะนี้ สามารถใช้พื้นหลังได้อย่างราบรื่นเมื่อสร้างหน้า WWW ไม่เพียงแต่ใน GIF แต่ยังใน JPEG 2000 นอกจากนี้ ยังรองรับความโปร่งใสไม่เพียงแค่ 1 บิตเท่านั้น (พิกเซลโปร่งใส/ทึบแสง) แต่ยังรองรับช่องสัญญาณแยกต่างหาก ซึ่ง จะช่วยให้คุณตั้งค่าการเปลี่ยนจากภาพที่ทึบเป็นพื้นหลังโปร่งใสได้อย่างราบรื่น

นอกจากนี้ ในระดับรูปแบบ รองรับการรวมข้อมูลลิขสิทธิ์ในภาพ รองรับการต้านทานข้อผิดพลาดบิตระหว่างการส่งและการออกอากาศ คุณสามารถขอเครื่องมือภายนอก (ปลั๊กอิน) สำหรับการขยายขนาดหรือการประมวลผล คุณสามารถรวมคำอธิบายได้ , ข้อมูลการค้นหา ฯลฯ .d.

ขั้นตอนการเข้ารหัส

กระบวนการบีบอัด JPEG2000 ประกอบด้วยหลายขั้นตอน:

1. แปลงภาพให้เป็นปริภูมิสีที่เหมาะสมที่สุด
ในขั้นตอนของการเข้ารหัสนี้ โมเดลสี RGB จะถูกแปลงเป็น YUV โดยใช้ความสัมพันธ์ที่เหมาะสม:

เมื่อคลายการบีบอัด จะใช้การแปลงผกผันที่สอดคล้องกัน:

2. การแปลงเวฟเล็ตแบบไม่ต่อเนื่อง

การแปลงเวฟเล็ตแบบแยก (DWT) ยังสามารถมีได้สองประเภท - สำหรับกรณีของการบีบอัดที่สูญเสีย และสำหรับการบีบอัดแบบไม่สูญเสีย

การเปลี่ยนแปลงในกรณีมิติเดียวนี้เป็นผลคูณสเกลาร์ของสัมประสิทธิ์ที่สอดคล้องกันและสตริงของค่า แต่เพราะว่า ค่าสัมประสิทธิ์จำนวนมากเป็นศูนย์ จากนั้นการแปลงเวฟเล็ตแบบตรงและแบบผกผันสามารถเขียนได้ด้วยสูตรต่อไปนี้ (เพื่อแปลงองค์ประกอบสุดขีดของเส้น จะใช้การขยาย 2 พิกเซลในแต่ละทิศทาง ซึ่งค่าจะสมมาตรกับ ค่าขององค์ประกอบของเส้นที่สัมพันธ์กับพิกเซลสุดขีด):
y(2*n + 1) = x(2*n + 1) - (int)(x(2*n) + x(2*n + 2)) / 2

y(2*n) = x(2*n) + (int)(y(2*n - 1) + y(2*n + 1) + 2) / 4

และในทางกลับกัน

x(2*n) = y(2*n) - (int)(y(2*n - 1) + y(2*n + 1) + 2) / 4

x(2*n + 1) = y(2*n + 1) + (int)(x(2*n) + x(2*n + 2)) / 2

3. การหาปริมาณของสัมประสิทธิ์

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


4. ขั้นตอนการบีบอัดรอง

. เช่นเดียวกับ JPEG ขั้นตอนสุดท้ายในอัลกอริธึมการบีบอัดในรูปแบบใหม่คือการเข้ารหัสแบบไม่สูญเสียข้อมูล แต่ไม่เหมือนกับรูปแบบก่อนหน้านี้ JPEG2000 ใช้อัลกอริธึมการบีบอัดทางคณิตศาสตร์

การใช้งานซอฟต์แวร์

ในงานนี้มีการใช้อัลกอริธึม JPEG และ JPEG2000 อัลกอริธึมทั้งสองใช้การเข้ารหัสไปข้างหน้าและย้อนกลับ (ไม่มีขั้นตอนสุดท้ายของการบีบอัดรอง) การคำนวณ JPEG ใช้เวลานาน (ประมาณ 30 วินาที) เนื่องจากการคำนวณ DCT "โดยตรง" หากคุณต้องการเพิ่มความเร็วในการทำงานคุณควรคำนวณเมทริกซ์ DCT ในตอนแรก (ควรทำการเปลี่ยนแปลงในคลาส DCT)

ไปที่โปรแกรมกันดีกว่า:


  1. หลังจากเปิดตัวจะมีหน้าต่างปรากฏขึ้นที่ตำแหน่งนั้น

และคุณสามารถบันทึกได้โดยคลิกปุ่ม (2) และป้อนชื่อที่ต้องการในกล่องโต้ตอบ

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

    หลังจาก:



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

    แน่นอนว่าหลายคนที่ทำงานเกี่ยวกับกราฟิกบนคอมพิวเตอร์มีความสนใจในคำถาม: รูปภาพที่ใช้พื้นที่ในหน่วยความจำพีซีที่น่าประทับใจมากจะถูกบีบให้มีขนาดเล็กลงมากบนดิสก์ได้อย่างไร ฉันจำได้ว่าในช่วงรุ่งสางของอาชีพการพิมพ์ของฉัน คำว่า "การบีบอัด" นั้นลึกลับและน่าประหลาดใจสำหรับฉัน... อันที่จริง การบีบอัดรูปภาพเกิดขึ้นได้อย่างไร - ท้ายที่สุดแล้ว หากไม่มีตอนนี้ ก็คิดไม่ถึงเลยที่จะจินตนาการถึงเว็บ หรือการถ่ายภาพดิจิทัลหรือการพิมพ์สี?

    ดังนั้นการบีบอัด อาจทำให้เสียคุณภาพหรือไม่ก็ได้ กรณีสุดท้ายคือวิธีการเช่น RLE (Run Length Encoding, การเข้ารหัส run lengths ซึ่งให้ผลลัพธ์เป็นคู่เช่น ( ข้าม, ค่า, ที่ไหน ข้ามคือจำนวนศูนย์ที่อยู่ติดกัน และ ค่า- ค่าที่ตามมา) และ LZW (การบีบอัดโดยใช้วิธี Lempel-Ziff-Welch) ใช้งานในรูปแบบ PSD, GIF และ TIFF นอกจากนี้ยังใช้กันอย่างแพร่หลายโดยผู้จัดเก็บเช่น RAR และ ZIP ระดับการบีบอัดแบบไม่สูญเสียข้อมูลโดยเฉลี่ยอยู่ที่ 2-3 เท่า

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

    วิธีการบีบอัดแบบ Lossy ที่ได้รับความนิยมมากที่สุดคือ JPEG ซึ่งแม้จะมีการบีบอัดสามสิบเท่า แต่ยังคงคุณภาพของภาพไว้เพียงพอ อย่างไรก็ตาม วิธีการบีบอัดข้อมูลสมัยใหม่ส่วนใหญ่ (เช่น Layer-4 หรือที่เรียกว่า mp3 และ MPEG) ใช้กลไกที่คล้ายกับ JPEG เรามาดูรูปแบบนี้ให้ละเอียดยิ่งขึ้น โดยเฉพาะอย่างยิ่งเมื่อไม่นานมานี้ การใช้งานใหม่ล่าสุด JPEG2000 ก็ได้รับการอนุมัติในที่สุด ซึ่งรวมถึงส่วนเพิ่มเติมทั้งหมดที่ทำกับ JPEG/MPEG ตลอดระยะเวลาสิบปีของการพัฒนา

    เจเพ็ก

    ชื่อของอัลกอริธึมการบีบอัดเป็นตัวย่อของ Joint Photographic Expert Group ซึ่งเป็นกลุ่มริเริ่มที่ก่อตั้งขึ้นจากผู้เชี่ยวชาญจาก ITU (สหภาพโทรคมนาคมระหว่างประเทศ) และ ISO (องค์การระหว่างประเทศเพื่อการมาตรฐาน) นั่นคือเหตุผลที่ชื่อของมันมีคำนำหน้าร่วม ในปี 1992 JPEG ได้รับการประกาศให้เป็นมาตรฐานสากลสำหรับกราฟิก

    เมื่อทำการบีบอัดโดยใช้วิธี JPEG คุณภาพจะสูญหายไปเสมอ ในกรณีนี้ มีทางเลือกเสมอ: ให้ความสำคัญกับคุณภาพโดยเสียปริมาณ (ขนาดไฟล์จะถูกบีบอัดประมาณสามครั้ง) หรือในทางกลับกันเพื่อให้ได้ขนาดภาพขั้นต่ำที่จะยังคงอยู่ เป็นที่รู้จัก (ระดับการบีบอัดสามารถเข้าถึง 100) การบีบอัด ซึ่งความแตกต่างในคุณภาพระหว่างภาพที่ได้กับต้นฉบับยังคงไม่สามารถสังเกตเห็นได้ ส่งผลให้ขนาดไฟล์ลดลง 10-20 เท่า

    ขอบเขตการใช้งาน

    JPEG เป็นตัวบีบอัดที่ดีที่สุดสำหรับภาพสีและขาวดำคุณภาพการถ่ายภาพ หากคุณต้องการบันทึกภาพด้วยชุดดัชนี ภาพนั้นจะถูกแปลงเป็นสีเต็มก่อน เมื่อทำการบีบอัดโดยใช้วิธี JPEG คุณต้องจำไว้ว่าทุกอย่างขึ้นอยู่กับลักษณะของภาพ: ปริมาณที่น้อยกว่ามากจะถูกครอบครองโดยผู้ที่การเปลี่ยนสีไม่มีนัยสำคัญและไม่มีการเปลี่ยนสีที่คมชัด JPEG ถูกใช้ทุกที่ที่ต้องจัดเก็บภาพถ่าย: ในกล้องดิจิตอล การพิมพ์ (EPS DCS 2.0) และอินเทอร์เน็ตจะคิดไม่ถึงหากไม่มีสิ่งนี้

    การบีบอัด JPEG มีหลายประเภท แต่เราจะพิจารณาเพียงสองประเภทเท่านั้นที่ใช้ในแพ็คเกจมาตรฐานสำหรับการทำงานกับภาพแรสเตอร์ใน Adobe Photoshop - พื้นฐานและ ก้าวหน้า- อีกสองวิธี - ariphmetic และ lossless - นั้นแปลกใหม่และด้วยเหตุผลหลายประการยังไม่แพร่หลาย

    การบีบอัดเกิดขึ้นได้อย่างไร?

    1. ขั้นแรกก็คือ การแปลงโมเดลสีภาพ (โดยปกติคือ RGB) เป็นรูปแบบที่แยกส่วนประกอบความสว่างและสี (เช่น YCbCr หรือ YUV) ซึ่งช่วยให้สามารถเลือกระดับการบีบอัดสำหรับแต่ละช่องสัญญาณได้อย่างเหมาะสมที่สุด (โดยคำนึงถึงลักษณะของการรับรู้ทางตา) . การแปลงเกิดขึ้นดังนี้:

    Y = 0.299xR+0.587*G+0.114xB Cb = (BY)/0.866/2+128 Cr = (R-Y)/0.701/2+128

    2. ในขั้นต่อไปที่เรียกว่า การกรองล่วงหน้าโดยที่พิกเซลข้างเคียงแยกกันในแต่ละช่อง Cb และ Cr จะถูกจัดกลุ่มเป็นคู่ในทิศทางแนวนอนและแนวตั้ง และช่องความสว่าง Y จะไม่เปลี่ยนแปลง หลังจากนั้น กลุ่มพิกเซลทั้งสี่จะได้รับค่าเฉลี่ยของส่วนประกอบ Cb และ Cr ที่สอดคล้องกัน เพื่อความกระชับ รูปแบบดังกล่าวสามารถกำหนดเป็น 4:1:1 (รูปแบบการนำเสนอเดียวกันนี้ถูกนำมาใช้ใน DRAW - หน้าต่างส่งออก jpeg) โดยคำนึงถึงความจริงที่ว่าแต่ละพิกเซลถูกเข้ารหัส 3 ไบต์ (256 ระดับสำหรับแต่ละช่องสัญญาณทั้งสาม) ดังนั้นปริมาณข้อมูลจะลดลงโดยอัตโนมัติ 2 เท่า (แทนที่จะเป็น 12 ไบต์ในการถ่ายโอน 4 พิกเซลก็คือ เพียงพอที่จะถ่ายโอนได้เพียง 4+1+1 = 6 ไบต์) จากมุมมองทางคณิตศาสตร์ การเปลี่ยนแปลงดังกล่าวนำไปสู่การสูญเสียข้อมูลอย่างมีนัยสำคัญ แต่สายตามนุษย์ไม่รับรู้ถึงการสูญเสีย เนื่องจากมีความซ้ำซ้อนอย่างมากในภาพถ่ายธรรมดา

    3. ข้อมูลที่ได้รับซึ่งผ่านขั้นตอน "การทำความสะอาด" หลักจะถูกจัดกลุ่มแยกกันในแต่ละช่องอีกครั้งเป็นบล็อก แต่มีขนาด 8x8 แล้วหลังจากนั้นจึงใช้การบีบอัดพื้นฐานกับข้อมูลเหล่านั้น - สิ่งที่เรียกว่า การแปลงโคไซน์แบบไม่ต่อเนื่องสำหรับระยะสั้น - DCT (การแปลงโคไซน์แบบไม่ต่อเนื่อง) ส่งผลให้มีข้อมูล เกี่ยวกับการจัดจำหน่าย ความสว่างของพิกเซลจะถูกแปลงเป็นรูปแบบอื่น โดยจะมีการอธิบายโดยการแจกแจงตาม ความถี่ของการเกิดขึ้น ความสว่างของพิกเซลอย่างน้อยหนึ่งพิกเซล DCT มีข้อได้เปรียบเหนือการแปลงอื่นๆ หลายประการ (เช่น การแปลงฟูริเยร์) ทำให้สามารถกู้คืนข้อมูลได้ดีขึ้น

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

    1

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

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

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

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

    4

    ในรูป รูปที่ 4 แสดงผลการสร้างสี่เหลี่ยมจัตุรัสขาวดำขึ้นใหม่โดยใช้ส่วนประกอบหนึ่ง สี่ และสิบห้าตามลำดับ

    5. หลังจากงานหลักในการบีบอัดภาพเสร็จสิ้น การเปลี่ยนแปลงเพิ่มเติมจะลดลงเหลือเพียงงานรอง นั่นคือส่วนประกอบที่เหลือ จะถูกรวบรวมตามลำดับในลักษณะที่ผู้รับผิดชอบชิ้นส่วนขนาดใหญ่อยู่ก่อน แล้วจึงค้นหาชิ้นส่วนที่เล็กกว่าทั้งหมด หากดูจากภาพการเคลื่อนไหวของตัวเข้ารหัสจะดูเหมือนเส้นซิกแซก ขั้นตอนนี้เรียกว่า ZigZag (รูปที่ 5)

    5

    จากนั้นลำดับผลลัพธ์จะถูกบีบอัด: อันดับแรกด้วย RLE ปกติ จากนั้นจึงใช้วิธี Huffman

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

    โดยทั่วไปแล้ว นั่นคือการเปลี่ยนแปลงทั้งหมด ทีนี้มาคำนวณว่าการบีบอัดที่ได้มาจากตัวอย่างของเราคืออะไร เราได้รับ 7 ค่าที่จะคืนค่ารูปภาพ 8x8 ดั้งเดิม ดังนั้นการบีบอัดจากการใช้การแปลง DCT ทั้งสองช่องสีจึงเป็น 8x8/7 9 เท่า เรามาจัดสรรไม่ใช่เจ็ด แต่ให้ 11 สัมประสิทธิ์ให้กับช่องความสว่าง ซึ่งจะให้ 8x8/11 6 สำหรับทั้งสามช่องจะเป็น (9+9+6)/3=8 เท่า การลดคุณภาพในช่วง "การทำให้ผอมบาง" ของภาพซึ่งเกิดขึ้นในขั้นตอนที่สองทำให้เพิ่มขึ้นสองเท่า (รูปแบบ 4-1-1 โดยคำนึงถึงลักษณะเฉพาะของการเข้ารหัสองค์ประกอบความสว่าง) ซึ่งจะให้ ผลการแข่งขันนัดสุดท้าย 16 ครั้ง นี่เป็นการคำนวณคร่าวๆ ที่ไม่ได้คำนึงถึงบางแง่มุม แต่สะท้อนภาพจริง หากต้องการลดขนาดไฟล์ลงสามสิบเท่า คุณต้องเหลือองค์ประกอบไว้เพียง 3-4 ส่วนเท่านั้น

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

    ข้อเสียของ JPEG

    1. ไม่สามารถบรรลุอัตราส่วนการบีบอัดสูงได้เนื่องจากข้อจำกัดด้านขนาดบล็อก (8x8 เท่านั้น)
    2. โครงสร้างแบบบล็อกที่มีการบีบอัดในระดับสูง
    3. ปัดเศษมุมที่คมชัดและเบลอองค์ประกอบเล็กๆ ในภาพ
    4. รองรับเฉพาะภาพ RGB เท่านั้น (JPEG สำหรับภาพ CMYK สามารถใช้ได้ในรูปแบบ EPS ผ่าน DCS เท่านั้น)
    5. ไม่สามารถแสดงภาพได้จนกว่าจะโหลดเสร็จสมบูรณ์

    เป็นเวลาสิบปีแล้วที่ JPEG ได้รับการอนุมัติเป็นมาตรฐาน ในช่วงเวลานี้ กลุ่มนักวิจัยได้เสนอการเพิ่มเติมที่สำคัญหลายประการจากเวอร์ชันดั้งเดิม ซึ่งส่งผลให้เกิดมาตรฐานใหม่เมื่อปลายปีที่แล้ว

    JPEG2000

    ตั้งแต่ปี 1997 งานเริ่มมุ่งเป้าไปที่การสร้างระบบการเข้ารหัสสากลที่จะลบข้อจำกัดทั้งหมดที่กำหนดโดย JPEG และสามารถทำงานกับรูปภาพทุกประเภทได้อย่างมีประสิทธิภาพ: ขาวดำ ระดับสีเทา สีเต็ม และหลายองค์ประกอบ โดยไม่คำนึงถึงเนื้อหา ( ไม่ว่าจะเป็นสิ่งเหล่านี้ จะเป็นรูปถ่าย ข้อความที่ค่อนข้างเล็ก หรือแม้แต่ภาพวาด) นอกเหนือจากองค์กรกำหนดมาตรฐานสากลแล้ว ยักษ์ใหญ่ในอุตสาหกรรมเช่น Agfa, Canon, Fujifilm, Hewlett-Packard, Kodak, LuraTech, Motorola, Ricoh, Sony และอื่น ๆ ก็มีส่วนร่วมในการพัฒนา

    เนื่องจากอัลกอริธึมใหม่อ้างว่าเป็นแบบสากล จึงได้รับมอบหมายให้ใช้วิธีการส่งข้อมูลต่างๆ เพิ่มเติม (แบบเรียลไทม์และมีแบนด์วิธแคบ) ซึ่งมีความสำคัญอย่างยิ่งในแอปพลิเคชันมัลติมีเดีย เช่น ในการออกอากาศแบบเรียลไทม์ผ่านอินเทอร์เน็ต .

    ข้อกำหนดพื้นฐานสำหรับรูปแบบ JPEG2000:

    1. บรรลุระดับการบีบอัดที่สูงกว่าเมื่อเทียบกับ JPEG
    2. รองรับภาพขาวดำซึ่งจะช่วยให้คุณสามารถใช้ในการบีบอัดภาพพร้อมข้อความได้
    3. ความเป็นไปได้ของการบีบอัดโดยไม่สูญเสียเลย
    4. ส่งออกภาพโดยมีรายละเอียดการปรับปรุงทีละน้อย (เช่นเดียวกับใน GIF แบบโปรเกรสซีฟ)
    5. การใช้พื้นที่ที่มีลำดับความสำคัญในรูปภาพ ซึ่งสามารถตั้งค่าคุณภาพให้สูงกว่าส่วนอื่นๆ ของรูปภาพได้
    6. ถอดรหัสแบบเรียลไทม์ (ไม่มีความล่าช้า)

    หลักการบีบอัด

    กลไกการบีบอัดหลักใน JPEG2000 ต่างจาก JPEG ที่ใช้การแปลงเวฟเล็ต - ระบบฟิลเตอร์ที่ใช้กับภาพทั้งหมด โดยไม่ต้องลงรายละเอียดของการบีบอัดเราจะสังเกตเฉพาะประเด็นหลักเท่านั้น

    6
    ประการแรก เช่นเดียวกับ JPEG รูปภาพจะถูกแปลงเป็นระบบ YCrCb หลังจากนั้นการลบข้อมูลที่ซ้ำซ้อนในขั้นต้นจะเกิดขึ้น (โดยทราบอยู่แล้วว่าการรวมพิกเซลที่อยู่ติดกันเป็นบล็อกขนาด 2x2) จากนั้นรูปภาพทั้งหมดจะถูกแบ่งออกเป็นส่วนที่มีขนาดเท่ากัน (ไทล์) ซึ่งแต่ละส่วนจะได้รับการเปลี่ยนแปลงเพิ่มเติมโดยไม่ขึ้นอยู่กับส่วนอื่น ๆ (ซึ่งจะช่วยลดความต้องการหน่วยความจำและทรัพยากรการประมวลผล) ถัดไป แต่ละช่องจะถูกกรองโดยตัวกรองความถี่ต่ำผ่านและความถี่สูงแยกกันในแถวและแถว ด้วยเหตุนี้ หลังจากผ่านครั้งแรก รูปภาพขนาดเล็กสี่ภาพ (แถบย่อย) จะถูกสร้างขึ้นในแต่ละส่วน ทั้งหมดมีข้อมูลเกี่ยวกับภาพต้นฉบับ แต่เนื้อหาข้อมูลแตกต่างกันมาก (รูปที่ 6)

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

    การนำไปปฏิบัติจริง

    เนื่องจากมีการวางรากฐานของการบีบอัด JPEG2000 บริษัท หลายแห่งจึงได้พัฒนาอัลกอริธึมที่มีประสิทธิภาพพอสมควรสำหรับการใช้งาน

    ในบรรดานักพัฒนาซอฟต์แวร์รายใหญ่นั้น Corel สามารถสังเกตได้ (โดยวิธีการนี้เป็นหนึ่งในคนแรก ๆ ที่แนะนำแพ็คเกจที่รองรับรูปแบบ wi โดยขึ้นอยู่กับการแปลงคลื่นซึ่งได้รับการยกย่องและยกย่อง) - มีการจัดหารูปภาพทั้งหมด บนซีดีที่มีแพ็คเกจ CorelDRAW จนถึงเวอร์ชันที่เก้า ถูกบีบอัดในลักษณะนี้ทุกประการ

    ต่อมา Adobe ได้เข้าร่วมด้วย แนวคิดบางส่วนที่มีอยู่ใน JPEG2000 ถูกนำมาใช้โดยนักพัฒนา Photoshop 6 ในรูปแบบของตัวเลือกขั้นสูงเมื่อบันทึกรูปภาพในรูปแบบ JPEG (ปกติ ขึ้นอยู่กับการแปลงโคไซน์) หนึ่งในนั้นคือ JPEG แบบโปรเกรสซีฟ (ตัวเลือก Progressive ในหน้าต่างบันทึกสำหรับเว็บ) อัลกอริทึมนี้มีไว้สำหรับระบบเรียลไทม์เป็นหลัก และทำงานเหมือนกับ Progressive GIF ทุกประการ ขั้นแรก สำเนารูปภาพคร่าวๆ จะปรากฏขึ้น ซึ่งประกอบด้วยบล็อกขนาดใหญ่เพียงไม่กี่บล็อก และเมื่อเวลาผ่านไป เมื่อโหลดข้อมูลส่วนที่เหลือ โครงสร้างจะเริ่มมองเห็นได้ชัดเจนยิ่งขึ้น จนกระทั่งในที่สุด รูปภาพสุดท้ายก็จะได้รับการกู้คืนอย่างสมบูรณ์ ต่างจาก GIF ตรงที่อัลกอริธึมนี้สร้างภาระให้กับผู้ชมมากขึ้น เนื่องจากจะต้องทำให้วงจรการเปลี่ยนแปลงทั้งหมดเสร็จสมบูรณ์สำหรับแต่ละเวอร์ชันที่ส่ง

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

    ผู้แปลงและผู้ดูเฉพาะทาง

    เนื่องจากมาตรฐานไม่ได้กำหนดการใช้งานเฉพาะของวิธีการบีบอัด/คลายการบีบอัด จึงให้ขอบเขตแก่ผู้พัฒนาอัลกอริธึมการบีบอัดจากบุคคลที่สาม ในความเป็นจริงคุณสามารถใช้อัลกอริธึมการแปลงคลื่นแบบง่าย ๆ และด้วยเหตุนี้จึงเร่งกระบวนการบีบอัดหรือในทางกลับกันใช้อัลกอริธึมที่ซับซ้อนกว่าและดังนั้นจึงต้องใช้ทรัพยากรระบบขนาดใหญ่

    โซลูชันที่ปรับแต่งตามความต้องการจากบริษัทอื่นมีจำหน่ายในรูปแบบเชิงพาณิชย์ บางตัวถูกนำไปใช้เป็นโปรแกรมแยกต่างหาก (JPEG 2000 พัฒนาโดย Aware) ส่วนอื่น ๆ - เป็นโมดูลเพิ่มเติมสำหรับโปรแกรมแก้ไขแรสเตอร์ทั่วไป (ImagePress JPEG2000 พัฒนาโดย Pegasus Imaging และโมดูล LEAD JPEG2000 จาก LEAD Technologies) บริษัท LuraTech ซึ่งทำงานเกี่ยวกับปัญหานี้มาเป็นเวลานาน มีความโดดเด่นเหนือพื้นหลังของพวกเขา โดยส่งเสริมเทคโนโลยี LuraWave ในผลิตภัณฑ์ LuraWave SmartCompress แบบครบวงจร (เวอร์ชันที่สามมีวางจำหน่ายแล้ว) และเสนอโมดูลสำหรับ Photoshop, Paintshop, Photopaint คุณสมบัติที่โดดเด่นคือความเร็วในการทำงานที่สูงขึ้น (การแปลงเกือบจะทันที) แม้ว่ารูปภาพจะมีขนาดหลายเมกะไบต์ก็ตาม ดังนั้นราคาของโมดูลนี้จึงสูงที่สุด - 79 ดอลลาร์

    หากต้องการดูภาพ JPEG2000 ในเบราว์เซอร์ คุณต้องติดตั้งโมดูลตัวแสดงพิเศษ (นักพัฒนาซอฟต์แวร์ทุกคนให้บริการฟรี) การแทรกรูปภาพลงในเอกสาร HTML เช่นเดียวกับปลั๊กอินใดๆ ก็คือการใช้โครงสร้าง EMBED (พร้อมพารามิเตอร์เพิ่มเติม) ตัวอย่างเช่น หมายความว่าจะใช้วิธีการส่งภาพแบบโปรเกรสซีฟ นั่นคือในตัวอย่างของเรา (ไฟล์ขนาด 139 KB) อันดับแรกจะมีการถ่ายโอนเพียง 250 ไบต์โดยจะสร้างอิมเมจคร่าวๆ จากนั้นหลังจากโหลด 500 ไบต์ รูปภาพจะได้รับการอัปเดต (ซึ่งจะดำเนินต่อไปจนถึง ถึงค่าจำกัดแล้ว)

    หากคุณต้องการได้ภาพที่ดีขึ้นคุณต้องเลือกรายการปรับปรุงจากเมนูที่ปรากฏขึ้นโดยใช้ปุ่มขวา (รูปที่ 9) ในการดาวน์โหลดสี่ครั้ง รูปภาพทั้งหมดจะถูกดาวน์โหลดอย่างสมบูรณ์

    9

    ข้อสรุป

    ดังนั้น JPEG2000 จึงแสดงผลลัพธ์ที่ดีกว่า JPEG เฉพาะที่ระดับการบีบอัดสูงเท่านั้น ด้วยการอัด 10-20 ครั้ง ก็ไม่ต่างกันมากนัก จะสามารถเข้ามาแทนที่หรือแข่งขันกับรูปแบบที่แพร่หลายได้หรือไม่? ในอนาคตอันใกล้นี้ ไม่น่าจะเป็นไปได้ ในกรณีส่วนใหญ่ อัตราส่วนคุณภาพ/ขนาดที่จัดทำโดย JPEG นั้นค่อนข้างยอมรับได้ และการบีบอัดเพิ่มเติม 10-20% ที่ JPEG2000 มอบให้ด้วยคุณภาพที่มองเห็นได้นั้นไม่น่าจะทำให้ความนิยมเพิ่มขึ้น

    แต่บริษัทผู้ผลิตกล้องดิจิตอลกำลังแสดงความสนใจในรูปแบบใหม่ เนื่องจากขนาดของเมทริกซ์ที่ไวต่อแสงเพิ่มขึ้นอย่างต่อเนื่องทุกปี และการเก็บภาพในหน่วยความจำก็กลายเป็นเรื่องยากมากขึ้นเรื่อยๆ จากนั้นรูปแบบใหม่จะแพร่หลายมากขึ้นและใครจะรู้บางทีหลังจากนั้นไม่นาน JPEG2000 ก็จะกลายเป็น JPEG ไม่ว่าในกรณีใด Analog Micro Devices เพิ่งเปิดตัวชิปพิเศษซึ่งมีการนำการบีบอัด/คลายการบีบอัดโดยใช้เทคโนโลยีใหม่มาใช้ในระดับฮาร์ดแวร์ และกระทรวงกลาโหมของสหรัฐอเมริกาก็กำลังใช้รูปแบบใหม่สำหรับการบันทึกภาพถ่ายที่ได้รับจากดาวเทียมสอดแนม

    ข้อเท็จจริงและการเก็งกำไร

    1. JPEG สูญเสียคุณภาพเมื่อเปิดและบันทึกไฟล์ใหม่

    ไม่จริง.คุณภาพจะหายไปก็ต่อเมื่อเลือกระดับการบีบอัดน้อยกว่าระดับการบีบอัดรูปภาพที่บันทึกไว้เท่านั้น

    2. JPEG สูญเสียคุณภาพเมื่อทำการแก้ไขไฟล์

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

    3. ผลลัพธ์ของการบีบอัดด้วยพารามิเตอร์เดียวกันในแต่ละโปรแกรมจะเหมือนกัน

    ไม่จริง.โปรแกรมต่างๆ ตีความการป้อนข้อมูลของผู้ใช้แตกต่างกัน ตัวอย่างเช่นในโปรแกรมหนึ่งคุณภาพของภาพที่บันทึกไว้จะถูกระบุ (เช่นใน Photoshop) ในอีกโปรแกรมหนึ่ง - ระดับของการบีบอัด (ค่าผกผัน)

    4. เมื่อตั้งค่าคุณภาพสูงสุด ภาพจะถูกบันทึกโดยไม่สูญเสียคุณภาพใดๆ

    ไม่จริง. JPEG จะบีบอัดโดยมีการสูญเสียเสมอ แต่การตั้งค่าคุณภาพ 90% แทนที่จะเป็น 100% ส่งผลให้ขนาดไฟล์ลดลงมากกว่าคุณภาพที่ตารับจะลดลง

    5. ไฟล์ JPEG ใดๆ สามารถเปิดได้ในโปรแกรมแก้ไขใดๆ ที่เข้าใจรูปแบบ JPEG

    ไม่จริง. JPEG ประเภทนี้เรียกว่า JPEG แบบโปรเกรสซีฟ ซึ่งบรรณาธิการบางคนไม่เข้าใจ

    6. JPEG ไม่รองรับความโปร่งใส

    จริงหรือเปล่า.บางครั้งอาจดูเหมือนบางส่วนของภาพโปร่งใส แต่จริงๆ แล้วสีของภาพนั้นถูกเลือกให้ตรงกับสีพื้นหลังในหน้า html

    7. JPEG บีบอัดได้ดีกว่า GIF

    ไม่จริง.มีพื้นที่การใช้งานที่แตกต่างกัน โดยทั่วไป รูปภาพ “GIF” ทั่วไปหลังจากแปลงเป็น JPEG จะมีปริมาณมากขึ้น

    JPEG2000 กับ JPEG

    7
    1. ด้วยการบีบอัดยี่สิบถึงสามสิบครั้ง JPEG2000 และ JPEG จะให้คุณภาพที่เท่ากันโดยประมาณ (อย่างไรก็ตาม Photoshop ไม่สามารถบีบอัดภาพถ่ายปกติเกินขีดจำกัดนี้ได้)

    2. ด้วยการบีบอัดที่สูงขึ้นคุณภาพของ JPEG2000 จะสูงกว่า JPEG อย่างมากซึ่งช่วยให้คุณสามารถบีบอัดได้สูงสุด 50 ครั้งโดยไม่มีการสูญเสียใด ๆ และด้วยการสูญเสียบางส่วน (เรากำลังพูดถึงรูปภาพสำหรับอินเทอร์เน็ต) - มากถึง 100 และมากกว่านั้น ถึง 200

    3. ที่การบีบอัดระดับสูงในพื้นที่ที่มีการเปลี่ยนสีอย่างราบรื่น รูปภาพจะไม่ได้รับลักษณะโครงสร้างบล็อกของ JPEG แบบธรรมดา JPEG2000 มีรอยเปื้อนเล็กน้อยและมีขอบคม - ดูรูปถ่าย (รูปที่ 7 และ 8)

    แสดงผลการบีบอัดไฟล์ทดสอบที่มีระดับการบีบอัดต่างกัน (ทางด้านซ้าย - บันทึกใน Photoshop ในรูปแบบ JPG ทางด้านขวา - ในรูปแบบ JPEG2000) สำหรับภาพในรูป 7, เลือกระดับการบีบอัด 20, 40, 70 และ 145 (สามารถระบุได้อย่างชัดเจนเมื่อบันทึกเป็น JPEG2000) เลือกระดับการบีบอัด JPG เพื่อให้ขนาดไฟล์เท่ากับขนาดหลังการบีบอัดโดยใช้ JPEG2000 อย่างที่พวกเขาพูดผลลัพธ์ก็ชัดเจน เพื่อความชัดเจน การทดลองครั้งที่สองได้ดำเนินการกับภาพที่มีรายละเอียดคมชัดยิ่งขึ้น (โดยมีระดับการบีบอัดที่ 10, 20, 40 และ 80) ข้อดีอยู่ที่ด้านข้างของ JPEG2000 อีกครั้ง (รูปที่ 8)

    8

    4. เนื่องจากอันที่จริงแล้ว สำเนาที่มีความละเอียดต่างกันจะถูกจัดเก็บไว้ในไฟล์ JPEG2000 ไฟล์เดียว

    ฉันหมายถึงว่าสำหรับผู้ที่สร้างแกลเลอรีรูปภาพบนอินเทอร์เน็ต ไม่จำเป็นต้องสร้างภาพขนาดย่อให้พวกเขา

    5. สิ่งที่น่าสนใจเป็นพิเศษคือการบีบอัดโดยไม่มีการบิดเบือน (โหมดไม่สูญเสีย) ดังนั้นไฟล์ทดสอบที่มีการบีบอัด LZW จาก Photoshop จึงมีขนาด 827 KB และ JPEG2000 ที่บีบอัดจะใช้ขนาด 473 KB

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

    7. ขาดการสนับสนุน JPEG2000 ในเบราว์เซอร์ หากต้องการดูภาพดังกล่าว คุณต้องดาวน์โหลดโมดูลเพิ่มเติมที่มีขนาดค่อนข้างใหญ่ (1.2 MB)

    8. ขาดซอฟต์แวร์ฟรีสำหรับบันทึกภาพในรูปแบบใหม่

    นิตยสารมีให้บริการฟรี

    ในหัวข้อเดียวกัน: