OSI Layer 6 of 7

Presentation Layer

แปลงรูปแบบข้อมูลที่โปรแกรมใช้อยู่ ให้เป็นชุด byte ที่ส่งผ่านเครือข่ายได้ ครอบคลุมทั้งการจัดข้อมูลทั่วไป (marshalling) การบีบอัดภาพ เสียง และวิดีโอ รวมถึง JPEG และ MPEG

🔗
เทียบเท่าใน TCP/IP: Application Layer (TCP/IP ไม่มี Presentation แยกต่างหาก) — อ่านคำอธิบายเพิ่ม →

1บทบาทของ Presentation Layer ใน OSI

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

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

ปัญหาที่ชั้นนี้กำลังตอบ

  • Representation: เลขจำนวนเต็มหนึ่งตัวใช้กี่ byte เรียง byte จากซ้ายไปขวาหรือขวาไปซ้าย และข้อความใช้ UTF-8 หรือรูปแบบอื่น
  • Structure: ข้อมูลแต่ละช่องเริ่มและจบตรงไหน ช่องใดเป็นชื่อ ช่องใดเป็นราคา และช่องใดเป็นรายการย่อย
  • Compression: จะลดจำนวน bit ลงอย่างไร โดยข้อมูลยังเหมือนเดิมทุกประการ หรือยอมให้ต่างจากเดิมเล็กน้อย
  • Protection: จะเปลี่ยนข้อมูลให้อ่านไม่ออกสำหรับผู้ที่ไม่มีกุญแจได้อย่างไร

ในระบบ TCP/IP จริง เราไม่ค่อยเห็นโปรโตคอลชื่อ Presentation Layer แยกออกมาเป็นชิ้นชัด ๆ หน้าที่เหล่านี้มักอยู่ใน library, file format, serialization framework, codec หรือ TLS ที่แอปพลิเคชันเรียกใช้ ถึงชื่อชั้นจะหายไป แต่งานของชั้นไม่ได้หายตาม เหมือนบริษัทที่ยุบแผนกธุรการ แต่เอกสารก็ยังต้องมีคนทำอยู่ดี

2Presentation Formatting (Marshalling)

ความหมาย
การจัดข้อมูลหลายชนิดให้อยู่ในรูป byte ที่พร้อมส่ง เรียกว่า marshalling ส่วนการแกะ byte กลับมาเป็นข้อมูลที่โปรแกรมใช้งานได้ เรียกว่า unmarshalling คำนี้พบมากในระบบ RPC การทำงานคล้ายการจัดของลงกล่อง ฝั่งส่งต้องบอกลำดับและวิธีห่อ ฝั่งรับจึงจะแกะออกมาได้เป็นของชิ้นเดิม ไม่ใช่กองวัสดุที่ไม่รู้ว่าอะไรเป็นอะไร

ปัญหา Byte Order: Big-Endian vs Little-Endian

รูปแบบหลักการ
Big-Endianเก็บ most significant byte ไว้ตำแหน่งแรกสุด — ใช้ใน Network byte order, XDR
Little-Endianเก็บ least significant byte ไว้ตำแหน่งแรกสุด — ใช้ใน x86 CPU

Taxonomy ของ Argument Marshalling — 3 คำถามหลัก

(1) Data Types

Base types เช่น integer, float และ char เป็นหน่วยพื้นฐาน เมื่อนำมารวมกันจะเป็น Flat types เช่น structure และ array ส่วน Complex types อาจมี pointer หรือการอ้างถึง object อื่น ความยากไม่ได้อยู่ที่การคัดลอก byte อย่างเดียว แต่อยู่ที่การรักษาความสัมพันธ์ของข้อมูลด้วย เพราะ pointer ซึ่งมีความหมายในหน่วยความจำของเครื่องหนึ่ง ไม่มีความหมายเมื่อส่งเลข address เดิมไปให้อีกเครื่อง

(2) Conversion Strategy

กลยุทธ์หลักการ
Canonical Intermediate Formตกลงรูปแบบกลางที่ใช้ภายนอกไว้ล่วงหน้า ฝั่งส่งแปลงจากรูปแบบภายในเป็นรูปแบบกลาง และฝั่งรับแปลงจากรูปแบบกลางเป็นรูปแบบภายในของตน
Receiver-Makes-Rightผู้ส่งส่งข้อมูลตามรูปแบบภายในของตน พร้อมข้อมูลที่จำเป็นต่อการแปล ภาระการปรับรูปแบบจึงอยู่ที่ผู้รับ

(3) Tags

Tagged data แนบป้ายกำกับไปกับข้อมูล เช่น บอกว่าส่วนนี้คือชื่อและส่วนนี้คืออายุ ฝั่งรับจึงอ่านได้ยืดหยุ่นกว่า แต่ต้องแลกกับขนาดข้อมูลที่เพิ่มขึ้น ส่วน Untagged data ไม่ส่งป้ายไปด้วย ฝั่งรับต้องรู้โครงสร้างล่วงหน้า คล้ายกล่องยาแบบมีฉลากกับกล่องแบ่งช่องที่ทุกคนตกลงกันไว้แล้วว่าช่องแรกเป็นยาเช้า ช่องที่สองเป็นยาเย็น แบบหลังประหยัดพื้นที่กว่า แต่ถ้าเข้าใจกติกาคนละแบบก็ผิดทันที

ตัวอย่างมาตรฐานจริง

มาตรฐานConversionTagหมายเหตุ
XDR (SunRPC)Canonicalไม่ใช้ (ยกเว้นความยาว array)ใช้ big-endian เสมอ, pad เป็นทวีคูณ 4 byte
ASN.1 (BER)Canonicalใช้<tag, length, value> — ใช้ใน SNMP
NDR (DCE)Receiver-makes-rightarchitecture tag เดียวหัว messagecompiled จาก IDL
คำถามยอดฮิต
ทำไม XDR เลือก big-endian และเติมช่องว่างให้มีขนาดเป็นทวีคูณของ 4 byte? เพราะทุกฝ่ายจะได้ใช้กติกากลางเดียวกัน ไม่ขึ้นกับสถาปัตยกรรมของ CPU และไม่ต้องเดาว่าควรตีความข้อมูลอย่างไร

Markup Language: XML

XML คือแนวคิด tagged data ที่ใส่ป้ายกำกับไว้ค่อนข้างครบ โครงสร้างแบบ tag ซ้อน tag มองได้เป็นต้นไม้ ส่วน schema เช่น XML Schema ในไฟล์ .xsd ทำหน้าที่เหมือนแบบฟอร์มกลางว่า tag ใดมีได้บ้าง ต้องเป็นข้อมูลชนิดใด และซ้อนกันอย่างไร ข้อดีคืออ่านและตรวจสอบได้ชัด ข้อเสียคือมีข้อความประกอบมาก จึงมีขนาดใหญ่กว่ารูปแบบ binary หลายชนิด

3Multimedia Data: การบีบอัด

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

ทำไมการบีบอัดจึงจำเป็น
ภาพวิดีโอ Full HD ขนาด 1920×1080 ถ้าใช้สี 24 bit และแสดง 30 ภาพต่อวินาที จะมีข้อมูลดิบประมาณ 1.49 Gbps โดยยังไม่รวมเสียงและข้อมูลกำกับ แต่บริการวิดีโอจริงอาจส่งด้วยอัตราเพียงไม่กี่ Mbps กล่าวอีกแบบคือ ถ้าไม่บีบอัด การดูวิดีโอหนึ่งเรื่องก็เหมือนสั่งให้รถบรรทุกขนภาพถ่ายเต็มคันรถเข้าบ้านทุกวินาที การบีบอัดช่วยจัดของซ้ำ ๆ ออก และเก็บเฉพาะสิ่งที่ผู้ชมจำเป็นต้องเห็น

ก่อนบีบอัด ต้องเข้าใจก่อนว่าภาพกลายเป็นข้อมูลได้อย่างไร

ภาพดิจิทัลแบบ raster ประกอบด้วยจุดเล็ก ๆ ที่เรียกว่า pixel เรียงเป็นตาราง แต่ละ pixel เก็บค่าที่แทนสีหรือความสว่าง การบอกว่าภาพมีขนาด 1920×1080 หมายถึงมี 1,920 pixel ตามแนวนอนและ 1,080 pixel ตามแนวตั้ง รวมประมาณ 2.07 ล้าน pixel ไม่ได้หมายถึงขนาดกว้างยาวเป็นเซนติเมตร เพราะภาพเดียวกันอาจแสดงบนโทรศัพท์หรือฉายเต็มผนังก็ได้

คำที่ควรรู้ความหมายผลที่เห็น
Spatial resolutionจำนวน pixel ตามแนวนอนและแนวตั้งยิ่งมีมาก ยิ่งเก็บรายละเอียดของรูปร่างและขอบวัตถุได้มาก แต่ไฟล์ดิบก็ใหญ่ขึ้น
Bit depthจำนวน bit ที่ใช้แทนค่าของแต่ละช่องสียิ่งมาก การไล่ระดับสียิ่งเรียบ ลดอาการสีเป็นแถบ แต่ใช้พื้นที่เพิ่ม
Color modelวิธีแยกสีหนึ่งสีออกเป็นตัวเลขหลายช่อง เช่น RGB หรือ YCbCrรูปแบบที่เลือกมีผลต่อวิธีบีบอัดและการนำไปแสดงผล
Frame rateจำนวนภาพที่แสดงต่อวินาทียิ่งมาก การเคลื่อนไหวยิ่งลื่น แต่ข้อมูลวิดีโอก็มากขึ้น
ขนาดภาพดิบโดยประมาณ
ขนาดภาพ = ความกว้าง × ความสูง × จำนวน bit ต่อ pixel
1920 × 1080 × 24 bit = 49,766,400 bit ≈ 5.93 MiB ต่อภาพ

ถ้านำภาพขนาดนี้มาเรียง 30 ภาพต่อวินาที จะใช้ข้อมูลประมาณ 178 MiB ต่อวินาที ตัวเลขนี้ช่วยให้เห็นว่า codec ไม่ใช่ของตกแต่งระบบ แต่เป็นเงื่อนไขที่ทำให้ multimedia ผ่านเครือข่ายทั่วไปได้จริง

RGB, YCbCr และเหตุผลที่ “สี” ถูกลดได้มากกว่าความสว่าง

จอภาพมักสร้างสีจาก RGB ได้แก่ Red, Green และ Blue แต่ JPEG มักแปลงข้อมูลไปเป็น YCbCr ก่อน โดย Y แทนความสว่าง ส่วน Cb และ Cr แทนความแตกต่างของสี เหตุผลไม่ได้มาจากความสวยงามทางคณิตศาสตร์อย่างเดียว แต่มาจากข้อจำกัดของสายตามนุษย์ เราสังเกตความเปลี่ยนแปลงของความสว่างและขอบวัตถุได้ละเอียดกว่าความแตกต่างของสี

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

Chroma subsampling

หลังแปลงเป็น YCbCr ระบบอาจลดจำนวนตัวอย่างของช่องสีลง เรียกว่า chroma subsampling เช่น 4:4:4 เก็บรายละเอียดสีเต็ม 4:2:2 ลดสีตามแนวนอน และ 4:2:0 ลดรายละเอียดสีทั้งสองทิศทาง เมื่อใช้กับภาพถ่ายทั่วไป ความต่างอาจสังเกตได้ยาก แต่ตัวอักษรสีสดบนพื้นสีตรงข้าม ภาพหน้าจอ หรือกราฟเส้นบาง อาจเห็นขอบสีฟุ้งชัดขึ้น

รูปแบบสิ่งที่เก็บเหมาะกับ
4:4:4ความละเอียดของสีใกล้เคียงช่องความสว่างงานกราฟิก ตัวหนังสือสี งานที่ต้องแก้สีต่อ
4:2:2ลดรายละเอียดสีในแนวนอนงานวิดีโอคุณภาพสูงและงานผลิตรายการ
4:2:0ลดตัวอย่างสีมากกว่าเพื่อประหยัดข้อมูลภาพ JPEG และวิดีโอที่ผู้ใช้พบทั่วไป

Lossless กับ Lossy: ไม่ใช่ดีและไม่ดี แต่ตอบคนละโจทย์

Lossless compression ถอดกลับมาแล้วได้ bit เดิมทุกตัว เหมาะกับ source code เอกสาร ผลตรวจทางการแพทย์บางชนิด หรือข้อมูลที่ผิดหนึ่ง bit ก็เปลี่ยนความหมาย ส่วน lossy compression ยอมให้ข้อมูลหลังถอดต่างจากต้นฉบับ เพื่อแลกกับขนาดที่เล็กลงมาก เหมาะกับภาพถ่าย เสียง และวิดีโอ เมื่อความต่างนั้นอยู่ในบริเวณที่คนสังเกตได้ยาก

อุปมา: พับเสื้อกับสรุปหนังสือ
Lossless เหมือนพับเสื้อใส่กระเป๋า เสื้อยับได้แต่เมื่อคลี่ออกยังเป็นเสื้อตัวเดิมครบทุกส่วน ส่วน lossy เหมือนสรุปหนังสือ จาก 300 หน้าเหลือ 10 หน้า ใจความสำคัญยังอยู่ แต่ไม่สามารถกู้ทุกประโยคกลับมาได้ การเลือกวิธีจึงขึ้นอยู่กับว่าเราต้องการ “ของเดิมทุกชิ้น” หรือ “ประสบการณ์ที่ใกล้เคียงในพื้นที่น้อยลง”

Lossless Compression Techniques

เทคนิคหลักการตัวอย่าง
Huffman Codingสัญลักษณ์ที่พบบ่อยใช้รหัสสั้น ส่วนสัญลักษณ์ที่พบน้อยใช้รหัสยาวเหมือนให้คำที่ใช้บ่อยมีชื่อเล่นสั้น ๆ
RLEแทน symbol ซ้ำติดกันด้วย symbol+countAAABBCDDDD → 3A2B1C4D
DPCMส่งค่าเริ่มต้น แล้วส่งเฉพาะผลต่างของค่าถัดไปถ้าอุณหภูมิเปลี่ยนทีละน้อย การส่ง +1, 0, −1 สั้นกว่าส่งค่าจริงทุกครั้ง
Dictionary/LZเก็บข้อความหรือรูปแบบที่เคยพบไว้ในพจนานุกรม แล้วอ้างด้วยหมายเลขgzip และรูปแบบที่ใช้ตระกูล LZ

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

JPEG — Image Compression (Lossy)

JPEG ไม่ได้ย่อภาพด้วยการลดทุกอย่างเท่ากัน แต่ค่อย ๆ เปลี่ยนภาพให้เห็นว่า ส่วนไหนสำคัญต่อสายตา ส่วนไหนมีผลน้อย และส่วนไหนเกิดซ้ำจนเขียนให้สั้นลงได้ กระบวนการจริงมีรายละเอียดมากกว่าสามคำว่า DCT, Quantization และ Encoding การเข้าใจเส้นทางตั้งแต่ pixel จนเป็น bitstream จะทำให้เราวิเคราะห์อาการของภาพเสียได้ ไม่ใช่เพียงท่องชื่อขั้นตอน

ขั้นที่ 1: แปลงสีจาก RGB เป็น YCbCr

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

ขั้นที่ 2: ลดรายละเอียดสีด้วย Chroma subsampling

ถ้าใช้ 4:2:0 ข้อมูลสีหลาย pixel จะใช้ตัวอย่างร่วมกัน เปรียบเหมือนระบายสีด้วยพู่กันหัวใหญ่ขึ้น แต่ยังวาดเส้นขอบด้วยดินสอหัวแหลม ขนาดลดลงมากโดยภาพถ่ายยังดูเป็นธรรมชาติ อย่างไรก็ตาม โลโก้ ตัวอักษร และภาพหน้าจออาจเสียความคม เพราะสีตรงขอบมีความหมายมากกว่าภาพถ่ายทั่วไป

ขั้นที่ 3: แบ่งภาพออกเป็นบล็อก

JPEG แบบดั้งเดิมแบ่งแต่ละช่องข้อมูลเป็นบล็อกขนาด 8×8 ตัวอย่าง แล้วประมวลผลทีละบล็อก เหมือนแบ่งพื้นกระเบื้องผืนใหญ่เป็นแผ่นเล็ก ๆ เพื่อคำนวณง่ายขึ้น ข้อดีคือใช้หน่วยความจำไม่มากและออกแบบวงจรได้ง่าย ข้อเสียคือเมื่อบีบอัดแรงเกินไป ขอบของบล็อกอาจปรากฏเป็นตารางที่เรียกว่า blocking artifact

ขั้นที่ 4: เลื่อนระดับค่าให้อยู่รอบศูนย์

ตัวอย่างภาพ 8 bit มีค่าระหว่าง 0–255 ก่อนทำ DCT มักลบ 128 ให้ช่วงกลายเป็นประมาณ −128 ถึง 127 การเลื่อนนี้ไม่ได้ลดคุณภาพ เป็นเพียงการจัดค่ารอบศูนย์เพื่อให้การแปลงทางคณิตศาสตร์ทำงานสะดวกขึ้น

ขั้นที่ 5: DCT แยกภาพออกเป็นความถี่

Discrete Cosine Transform (DCT) เปลี่ยนข้อมูลจากโลกของตำแหน่ง pixel ไปเป็นโลกของ spatial frequency ผลลัพธ์ยังเป็นตาราง 8×8 เหมือนเดิม แต่แต่ละช่องไม่ได้แทน pixel แล้ว ช่องมุมซ้ายบนแทนค่าเฉลี่ยของบล็อก เรียกว่า DC coefficient ส่วนช่องอื่นแทนการเปลี่ยนแปลงจากช้าไปเร็ว เรียกว่า AC coefficients

อุปมา: วงดนตรีของภาพ
เราอาจมองบล็อกภาพเป็นเสียงที่เกิดจากเครื่องดนตรี 64 ชิ้น เครื่องแรกให้โทนพื้นหรือค่าเฉลี่ย เครื่องถัดไปสร้างลายกว้าง ๆ และเครื่องท้าย ๆ สร้างลายถี่กับขอบเล็ก ๆ DCT ไม่ได้ลบเครื่องดนตรี มันเพียงแยกให้รู้ว่าเสียงรวมเดิมประกอบจากเครื่องใดบ้าง แล้วขั้น Quantization จึงค่อยตัดสินว่าเครื่องใดเบาจนไม่ต้องบันทึกละเอียด

บล็อกท้องฟ้าหรือผนังเรียบมักมีพลังงานกองอยู่ในความถี่ต่ำเพียงไม่กี่ค่า ส่วนรายละเอียดอย่างเส้นผม ใบไม้ หรือพื้นผิวผ้าจะกระจายไปยังความถี่สูงมากกว่า คุณสมบัตินี้เรียกว่า energy compaction คือ DCT ช่วยรวบข้อมูลสำคัญจาก 64 ค่าให้กระจุกอยู่ใน coefficient จำนวนน้อย

สิ่งที่มักเข้าใจผิด
DCT ไม่ได้ทำให้ไฟล์เล็กลงทันที และไม่ได้โยนรายละเอียดทิ้งด้วยตัวมันเอง หากเก็บ coefficient ด้วยความละเอียดเพียงพอ เราสามารถทำ inverse DCT กลับได้ใกล้เคียงข้อมูลก่อนแปลงมาก จุดที่ตั้งใจทำให้ข้อมูลสูญเสียจริงคือ Quantization

ขั้นที่ 6: Quantization — จุดที่ JPEG ยอมทิ้งข้อมูล

แต่ละ DCT coefficient ถูกหารด้วยค่าจาก quantization table แล้วปัดเป็นจำนวนเต็ม ถ้าตัวหารใหญ่ coefficient ขนาดเล็กจำนวนมากจะถูกปัดเป็นศูนย์ ความถี่สูงมักใช้ตัวหารใหญ่กว่าความถี่ต่ำ เพราะรายละเอียดเล็กและการเปลี่ยนแปลงถี่มักสังเกตได้ยากกว่า

แนวคิดของ Quantization
ค่าที่เก็บ = Round(DCT coefficient ÷ Quantization step)
ค่าประมาณตอนถอด = ค่าที่เก็บ × Quantization step

สมมุติ coefficient มีค่า 43 และ quantization step เป็น 10 เราจะเก็บ 4 เมื่อถอดกลับจะได้ประมาณ 40 ส่วนต่าง 3 หายไปอย่างถาวร ถ้า coefficient มีค่า 3 และหารด้วย 10 ผลอาจถูกปัดเป็น 0 รายละเอียดส่วนนั้นจึงหายไปเลย ยิ่งตั้ง quality ต่ำ ตัวหารโดยรวมยิ่งใหญ่ จำนวนศูนย์ยิ่งมาก ไฟล์ยิ่งเล็ก แต่ร่องรอยของการบีบอัดก็ยิ่งชัด

คำถามที่ควรตอบให้แม่น
ขั้นตอนไหนทำให้ข้อมูลสูญเสีย? คำตอบหลักคือ Quantization และในระบบที่ใช้ chroma subsampling การลดตัวอย่างสีก็เป็น lossy เช่นกัน ดังนั้นคำตอบว่า “มีเพียง Quantization เท่านั้น” ใช้ได้เฉพาะเมื่อเราพูดถึงแกน DCT–Quantization–Entropy coding แบบย่อ และสมมุติว่าไม่ได้ลด chroma ไว้ก่อน

ขั้นที่ 7: Zigzag scan ทำให้ศูนย์มาอยู่ติดกัน

หลัง Quantization ค่าในตาราง 8×8 มักมีค่าที่ไม่เป็นศูนย์อยู่บริเวณความถี่ต่ำ และมีศูนย์จำนวนมากบริเวณความถี่สูง JPEG อ่านตารางเป็นเส้นทางซิกแซ็กจากมุมซ้ายบนไปขวาล่าง เพื่อเรียงค่าจากความถี่ต่ำไปสูง ผลคือศูนย์ท้ายแถวมารวมกันยาว ๆ และพร้อมสำหรับ RLE

ขั้นที่ 8: DPCM, RLE และ Huffman coding

ค่า DC ของบล็อกข้างกันมักใกล้กัน จึงส่งผลต่างด้วยแนวคิด DPCM ส่วนค่า AC ใช้ RLE บอกจำนวนศูนย์ที่นำหน้าค่าถัดไป แล้วจึงใช้ Huffman coding ให้รูปแบบที่พบบ่อยมีรหัสสั้นลง ขั้นนี้เรียกรวมว่า entropy coding เป็น lossless เพราะจัดรหัสให้สั้นลงโดยไม่ทิ้งค่าที่ผ่าน Quantization มาแล้ว

เส้นทางของภาพหนึ่งภาพใน Baseline JPEG

  1. รับค่า RGB จากภาพต้นฉบับ
  2. แปลงเป็น YCbCr เพื่อแยกความสว่างออกจากสี
  3. อาจลดจำนวนตัวอย่าง Cb และ Cr
  4. แบ่งข้อมูลเป็นบล็อก 8×8 และเลื่อนค่ารอบศูนย์
  5. ใช้ DCT เปลี่ยนจาก pixel เป็น coefficient ความถี่
  6. Quantize และปัดค่า ทำให้รายละเอียดบางส่วนหายไป
  7. เรียง coefficient แบบ zigzag เพื่อรวมศูนย์
  8. ใช้ DPCM กับ DC และใช้ RLE กับ AC
  9. ใช้ Huffman coding แล้วบรรจุเป็น JPEG bitstream พร้อม header และตารางที่จำเป็น

Quality ของ JPEG หมายถึงอะไร

ค่า Quality 90, 75 หรือ 50 ที่เห็นในโปรแกรมไม่ใช่มาตรฐานหน่วยกลางที่ทุกโปรแกรมตีความเหมือนกัน โดยทั่วไปมันใช้ปรับ quantization table แต่โปรแกรม A ที่ Quality 80 อาจให้ขนาดและภาพต่างจากโปรแกรม B ที่ Quality 80 ได้ ดังนั้นการเทียบควรดูไฟล์จริงและคุณภาพจริง ไม่ควรดูตัวเลขหน้า slider อย่างเดียว

อีกประเด็นหนึ่งคือ ขนาดไฟล์ไม่ได้ขึ้นกับ resolution และ quality เท่านั้น แต่ขึ้นกับเนื้อหาของภาพด้วย ภาพท้องฟ้าเรียบ ๆ บีบอัดง่ายกว่าภาพใบไม้จำนวนมาก เพราะภาพแรกมีความถี่สูงน้อย ส่วนภาพหลังเต็มไปด้วยขอบและรายละเอียด แม้สองภาพจะมีขนาด pixel เท่ากันและตั้ง quality เท่ากัน ไฟล์ก็อาจต่างกันมาก

ร่องรอยของ JPEG บอกเราได้ว่าข้อมูลส่วนไหนถูกทิ้ง

อาการลักษณะที่เห็นสาเหตุหลัก
Blockingเห็นภาพแบ่งเป็นสี่เหลี่ยม 8×8 โดยเฉพาะบริเวณสีเรียบแต่ละบล็อกถูกประมวลผลแยกกันและเหลือ coefficient น้อยเกินไป
Ringingมีเงาหรือคลื่นบาง ๆ รอบขอบที่คมความถี่สูงถูกลดมากจนการสร้างขอบกลับมาไม่สมบูรณ์
Color bleedingสีฟุ้งหรือไหลข้ามขอบ โดยเฉพาะตัวอักษรสีสดรายละเอียด chroma ถูก subsample หรือบีบอัดมากเกินไป
Bandingการไล่สีเรียบกลายเป็นแถบระดับค่าที่เหลือไม่พอแทนการเปลี่ยนแปลงอย่างต่อเนื่อง
Mosquito noiseจุดหรือคลื่นรบกวนรอบเส้นและตัวหนังสือการแทนขอบคมด้วย coefficient ที่เหลือจำกัด
ทำไมบันทึก JPEG ซ้ำแล้วแย่ลง
การเปิด JPEG แล้วบันทึกเป็น JPEG อีกครั้งไม่เหมือนพับเสื้อซ้ำ แต่เหมือนสรุปจากบทสรุป ทุกครั้งที่ Quantize จะมีการปัดค่าใหม่ รายละเอียดที่หายไปแล้วเรียกคืนไม่ได้ และอาจเกิดความคลาดเคลื่อนเพิ่มขึ้น ถ้าต้องแก้ภาพหลายรอบ ควรเก็บต้นฉบับในรูปแบบที่ไม่สูญเสียหรือเก็บข้อมูลคุณภาพสูง แล้ว export เป็น JPEG เมื่อส่งงาน

JPEG เหมาะกับภาพใด และไม่เหมาะกับภาพใด

ชนิดภาพเหตุผลตัวเลือกที่มักเหมาะกว่า
ภาพถ่ายและภาพที่มีสีต่อเนื่องรายละเอียดกระจายแบบธรรมชาติและยอมให้คลาดเคลื่อนเล็กน้อยได้JPEG มักเหมาะและให้ไฟล์เล็ก
โลโก้ ไอคอน เส้นคม และตัวหนังสือartifact รอบขอบมองเห็นง่าย และมักมีสีไม่กี่สีPNG, SVG หรือ WebP แบบ lossless
ภาพที่ต้องมีพื้นหลังโปร่งใสJPEG แบบทั่วไปไม่มี alpha channelPNG, WebP หรือ AVIF ตามระบบที่รองรับ
ภาพทางการแพทย์ วิทยาศาสตร์ หรือข้อมูลวัดรายละเอียดเล็กอาจมีความหมาย ไม่ควรทิ้งเพียงเพราะตามนุษย์เห็นไม่ชัดรูปแบบ lossless หรือรูปแบบเฉพาะงานพร้อม metadata
ภาพสำหรับแก้ไขต่อหลายขั้นการ encode ซ้ำสะสมความเสียหายเก็บ master แบบ lossless หรือไฟล์งานต้นฉบับ

Progressive JPEG กับ Baseline JPEG

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

Compression ratio, Fidelity และสิ่งที่คำว่า “คุณภาพดี” ซ่อนไว้

Compression ratio เปรียบเทียบขนาดข้อมูลเดิมกับข้อมูลหลังบีบอัด แต่ไฟล์เล็กไม่ได้แปลว่าดีกว่าเสมอ เพราะเราอาจได้ไฟล์เล็กด้วยการทำลายรายละเอียดจนใช้การไม่ได้ ในทางกลับกัน ไฟล์ใหญ่ก็ไม่ได้รับประกันว่าดีกว่า หากต้นฉบับเสียหรือถูกบีบอัดมาก่อนแล้ว

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

ข้อมูลเสียง: จากคลื่นต่อเนื่องไปเป็นตัวเลข

เสียงในโลกจริงเป็นคลื่นต่อเนื่อง ไมโครโฟนแปลงแรงสั่นสะเทือนเป็นสัญญาณไฟฟ้า แล้วระบบดิจิทัลวัดค่าตามช่วงเวลา กระบวนการนี้เรียกว่า sampling จำนวนครั้งที่วัดต่อวินาทีคือ sampling rate เช่น 44.1 kHz หมายถึงวัด 44,100 ครั้งต่อวินาที ส่วน bit depth บอกความละเอียดของค่า amplitude ในแต่ละครั้ง

อุปมา: วัดระดับน้ำ
ถ้าคลื่นเสียงเหมือนระดับน้ำที่ขึ้นลง Sampling rate คือเราหันไปอ่านไม้บรรทัดบ่อยแค่ไหน ส่วน bit depth คือไม้บรรทัดแบ่งละเอียดเพียงใด อ่านน้อยครั้งเกินไปจะพลาดรูปทรงของคลื่น แบ่งสเกลหยาบเกินไปจะเกิดความคลาดเคลื่อนของระดับ
ขนาด PCM ที่ยังไม่บีบอัด
bitrate = sampling rate × bit depth × จำนวน channel
44,100 × 16 × 2 ≈ 1.411 Mbps สำหรับเสียง stereo

เสียงสามารถบีบอัดแบบ lossless เช่น FLAC หรือแบบ lossy เช่น MP3 และ AAC การบีบอัดเสียงแบบ lossy ใช้แบบจำลองการได้ยิน เช่น เสียงดังบางความถี่อาจกลบเสียงเบาที่อยู่ใกล้กัน ระบบจึงลดความละเอียดของส่วนที่ผู้ฟังมีโอกาสสังเกตได้น้อย แนวคิดเหมือน JPEG ตรงที่อาศัยข้อจำกัดของมนุษย์ แต่รายละเอียดทางสรีรวิทยาและคณิตศาสตร์ต่างกัน

MPEG — Video Compression

วิดีโอไม่ใช่เพียงภาพ JPEG หลายภาพต่อกัน เพราะภาพที่อยู่ติดกันมักคล้ายกันมาก ถ้ากล้องไม่ขยับ ฉากหลังแทบไม่เปลี่ยน มีเพียงคนหรือวัตถุบางส่วนที่เคลื่อน MPEG และ video codec รุ่นต่อมาจึงใช้ทั้ง spatial redundancy ภายในภาพเดียว และ temporal redundancy ระหว่างเวลา

Frame Typeลักษณะ
I-frameถอดได้ด้วยข้อมูลในภาพนั้นเอง ทำหน้าที่คล้ายจุดเริ่มต้นใหม่ แต่มีขนาดค่อนข้างใหญ่
P-frameทำนายจากภาพอ้างอิงก่อนหน้า แล้วส่ง motion vector กับส่วนต่างที่ทำนายไม่ถูก
B-frameใช้ภาพอ้างอิงได้ทั้งทิศทางก่อนและหลัง จึงบีบอัดได้ดี แต่เพิ่มความซับซ้อนและอาจเพิ่มเวลารอ

Motion estimation พยายามหาว่าบล็อกวัตถุจากภาพก่อนย้ายไปอยู่ตรงไหนในภาพใหม่ แทนที่จะส่งรูปเดิมซ้ำ ระบบส่งลูกศรหรือ motion vector พร้อม residual ซึ่งเป็นส่วนที่ภาพทำนายกับภาพจริงต่างกัน เปรียบเหมือนรายงานการย้ายโต๊ะในห้องว่า “โต๊ะตัวเดิมเลื่อนไปทางขวา 20 เซนติเมตร” สั้นกว่าถ่ายรายการของทั้งห้องใหม่ทุกครั้ง

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

ภาพ เสียง และวิดีโอเมื่อส่งผ่านเครือข่าย

ไฟล์ JPEG ที่ดาวน์โหลดทั่วไปต้องได้ byte ครบก่อนจึงถอดภาพถูก ถ้า TCP ช้าก็เพียงรอนานขึ้น แต่การประชุมสดมี deadline ทุก frame ภาพที่มาถึงช้าเกินเวลาฉายแทบไม่มีประโยชน์ ระบบจึงอาจลด resolution, frame rate หรือ bitrate เพื่อรักษาการสนทนาให้ต่อเนื่อง ในงาน real-time “ภาพสวยแต่ช้าสามวินาที” อาจแย่กว่า “ภาพหยาบแต่คุยโต้ตอบได้ทันที”

ตรงนี้ทำให้เห็นความสัมพันธ์ระหว่าง Presentation Layer กับชั้นอื่น Codec ตัดสินว่าจะเขียนภาพและเสียงเป็น bit อย่างไร Transport ช่วยส่งข้อมูล ส่วนระบบควบคุม session ติดตามว่าความสามารถของคู่สื่อสารและสภาพเครือข่ายเปลี่ยนไปหรือไม่ การแยกชั้นช่วยให้เรียนง่าย แต่ระบบจริงต้องทำงานร่วมกัน ไม่มี codec ใดชนะข้อจำกัดของ bandwidth ได้ด้วยการประกาศว่าตัวเองอยู่คนละชั้น

4สรุปและขั้นตอนถัดไป

  • Presentation Layer ทำให้ byte มีความหมายตรงกัน ทั้งด้านชนิดข้อมูล โครงสร้าง การบีบอัด และการป้องกันข้อมูล
  • Marshalling ต้องตอบให้ได้ว่าใช้ชนิดข้อมูลใด แปลงด้วยกติกากลางหรือให้ผู้รับแปลง และต้องแนบ tag มากน้อยเพียงใด
  • ภาพ raster คือกริดของ pixel ขนาดข้อมูลขึ้นกับ resolution, bit depth และ color model
  • JPEG ใช้ข้อจำกัดของสายตา แยกความสว่างออกจากสี แล้วลด chroma ได้มากกว่ารายละเอียดความสว่าง
  • DCT เปลี่ยนมุมมองจากตำแหน่ง pixel เป็นความถี่ ส่วน Quantization เป็นจุดสำคัญที่ยอมทิ้งรายละเอียด
  • Zigzag, DPCM, RLE และ Huffman ช่วยเขียนค่าที่เหลือให้สั้นลงโดยไม่ทิ้งเพิ่ม
  • JPEG เหมาะกับภาพถ่าย แต่ไม่ใช่คำตอบอัตโนมัติสำหรับโลโก้ ตัวอักษร ภาพโปร่งใส หรือภาพวิทยาศาสตร์
  • วิดีโอใช้ทั้งความซ้ำในภาพและระหว่างภาพ โดย I/P/B frame มีต้นทุนและหน้าที่ต่างกัน
ลองตอบด้วยความเข้าใจ
  1. เปรียบเทียบ canonical intermediate form กับ receiver-makes-right
  2. เพราะเหตุใด JPEG จึงแปลง RGB เป็น YCbCr และมักลดข้อมูลสีได้มากกว่าความสว่าง
  3. อธิบายว่า DCT ทำอะไร โดยไม่ตอบเพียงว่า “แปลงเป็นความถี่”
  4. ทำไม Quantization จึงทำให้ไฟล์เล็กลง และเหตุใดจึงย้อนกลับไปเป็นข้อมูลเดิมไม่ได้
  5. เชื่อมโยง blocking, ringing และ color bleeding กับขั้นตอนที่ทำให้เกิดอาการเหล่านั้น
  6. ถ้าต้องส่งภาพหน้าจอที่มีตัวหนังสือเล็ก ควรเลือก JPEG หรือ PNG เพราะอะไร
  7. อธิบายผลกระทบหากภาพอ้างอิงของวิดีโอสูญหาย และเหตุใดการเพิ่ม I-frame จึงมีทั้งข้อดีและต้นทุน