CấU TRÚC ảNH JPEG

Một phần của tài liệu Tìm hiểu ảnh JPEG và thuật toán giấu tin trong ảnh JPEG (Trang 35 - 42)

Ả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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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: (adsbygoogle = window.adsbygoogle || []).push({});

Bảng 4.6

Tag Ký hiệu Số bit

Define restart interval segment length Lr 16

Restart interval Ri 16

Một phần của tài liệu Tìm hiểu ảnh JPEG và thuật toán giấu tin trong ảnh JPEG (Trang 35 - 42)