Ảnh JPEG bao gồm nhiều đoạn (segment) khác nhau ghép lại, mỗi đoạn sẽđược
loại marker nào. Một số marker chỉ có vẻn vẹn 2 byte này, tuy nhiên có một số khác thì
có thêm 2 byte theo sau xác định chiều dài của dữ liệu trong đoạn đó (giá trịđộ dài này bao gồm cả2 byte độ dài và không bao gồm 2 byte marker). Một vài marker có thêm phần dữ liệu nén (entropy-coded data) và vì thế chiều dài của marker này sẽ không bao gồm phần dữ liệu nén.
Bên cạnh việc dùng với chức năng đánh dấu đoạn, byte 0xFF còn dùng để chèn thêm vào với chức năng là byte đệm (tránh làm phá vỡ cấu trúc chung) khi gặp byte dữ
liệu nén là 0x00 (nghĩa là khi ghi byte 0x00 thì chương trình sẽ chèn thêm 0xFF vào
đầu (0xFF00) sau đó mới ghi xuống nơi lưu trữ). Vì vậy khi chương trình xửlý đối với 2 byte dạng 0xFF00 thì đây không phải là một marker, và nó chỉ xuất hiện trong phần dữ liệu nén chứ không có trong phần dữ liệu của marker (marker payload data).
Bảng dưới đây liết kê một số marker thông dụng của JPEG
Bảng 4.1
Viết tắt Bytes Dữ liệu Tên Nội dung
SOI 0xFFD8 không Start of Image
SOFO 0xFFC0 tùy biến Start of Frame (Baseline DCT)
Đánh dấu đây là DCT-
based JPEG, dùng để xác
định chiều dài, chiều rộng
ảnh, số component, mẫu chia (ví dụ: 4:2:0). SOF2 0xFFC2 tùy biến Start of Frame
(Progressive DCT)
Đánh dấu đây là DCT-
based JPEG, dùng để xác
định chiều dài, chiều rộng
Viết tắt Bytes Dữ liệu Tên Nội dung
chia (ví dụ: 4:2:0). DHT 0xFFC4 tùy biến Define Huffman
Table(s) Xác định các bảng huffman. DQT 0xFFDB tùy biến Define Quantization Table(s) Xác định các bảng lượng tử.
DRI 0xFFDD 2 byte Define Restart Interval
Xác định khoảng cách của các RST. Theo sau marker là 2 byte chỉđịnh độ dài. SOS 0xFFDA tùy biến Start of Scan Bắt đầu dòng quét ảnh. Đối
với ảnh baseline DCT thì chỉ có 1 dòng quét duy nhất, nhưng với progressive DCT JPEG thì gồm nhiều dòng quét khác nhau. Theo sau marker này là phần dữ
liệu nén. RSTn 0xFFD0
… 0xFFD7
không Restart Được chèn vào sau mỗi r
MCU, trong đó r là khoảng
cách giũa các RST do marker DRI qui định. Chỉ
dùng marker này khi marker DRI hiện diện và r khác 0. 3 bit cuối cùng của
Viết tắt Bytes Dữ liệu Tên Nội dung
marker có giá trị từ 0 → 7.
APPn 0xFFEn tùy biến Application- specific
Ví dụảnh Exif dùng APP1
đểlưu metadata, laid out
gần giống với TIFF. COM 0xFFFE tùy biến Comment Chứa các chú thích cần
thiết. EOI 0xFFD9 Không End of image
Các nhà sản xuất thường dùng APPn marker để cho vào một số thông tin về hãng ví dụnhư “Exif” hoặc “Adobe” hay một sốthông tin định danh khác.
Cứ mỗi restart marker thì một block các MCU được ghi. Restart marker có tác dụng phục hồi lỗi của chuỗi bit, do quá trình truyền trên các mạng không tốt hoặc khi file ảnh bị lỗi. Khảnăng sửa được lỗi là nhờ vào việc các block MCU giũa các restart
Hình 1. Cấu trúc chung của ảnh JPEG
Chi tiết một số marker chính
Cấu trúc của frame header (SOFn): Bảng 4.2
Tag Ký hiệu Số bit
Frame header length Lf 16
Sample precision P 8
Number of lines Y 16
Samples per line X 16
No. of component in frame Nf 8
Tag Ký hiệu Số bit
Horizontal sampling factor Hi 4
Vertical sampling factor Vi 4
Quantization table selector Tqi 8
Cấu trúc của scan header (SOS):
Bảng 4.3
Tag Ký hiệu Số bit
Scan header length Ls 16
No. of components in scan Ns 8
Scan components (1..Ns) Scan components selector Csk 8
DC entropy coding table selector
Tdk 4
AC entropy coding table selector
Tak 4
Start of spectral selector of predictor selection
Ss 8
End of spectral selection Se 8
Successive approximation bit position hight
Ah 4
Successive approximation bit position low or point
Quantization table destination selector
Tag Ký hiệu Số bit
transform
Cấu trúc huffman marker (DHTn)
Bảng 4.4
Tag Ký hiệu Số bit
Huffman table length Lh 16
DHTi Table class Tc 4
Huffman table id Th 4
Number of Huffman codes length (1..16)
Li 8
Value associated with each Huffman codes (1..16)(1..Li)
Lij 8
Cấu trúc DQT marker:
Bảng 4.5
Tag Ký hiệu Số bit
Quantization table length
Lq 16
DQTi Quantization table element precision Pq 4
Tag Ký hiệu Số bit
Quantization table element (0..63) Qk 8 hoặc 16
Cấu trúc DRI marker:
Bảng 4.6
Tag Ký hiệu Số bit
Define restart interval segment length Lr 16
Restart interval Ri 16