Cách hoạt động của nén JPEG
Giải thích đơn giản về các bước phía sau việc nén ảnh hiệu quả
24. January 2025 bởi Bianca Palmer
Bạn đã bao giờ tự hỏi làm thế nào điện thoại hoặc máy ảnh có thể chụp một bức hình và chỉ trong chốc lát, nó được lưu dưới dạng JPEG, nhỏ hơn, tải nhanh hơn và vẫn sắc nét? Đằng sau đó là một quy trình mạnh mẽ, thu nhỏ các tệp ảnh lớn xuống chỉ còn một phần nhỏ kích thước ban đầu mà vẫn giữ chất lượng cao. Nhưng nó thực sự hoạt động như thế nào? Trong hướng dẫn này, chúng ta sẽ xem chi tiết về Nén JPEGvà phân tích từng bước bằng ngôn ngữ đơn giản để bạn hiểu cách quy trình nén ảnh này hoạt động.
JPEG là gì?
JPEG (viết tắt của Joint Photographic Experts Group) là một trong những định dạng ảnh phổ biến nhất. Đây là lựa chọn quen thuộc để lưu trữ ảnh kỹ thuật số. Ưu điểm chính của JPEG là khả năng nén tệp ảnh, giúp chúng nhỏ hơn nhiều mà không làm giảm chất lượng đáng kể.
Ví dụ, một ảnh chất lượng cao chưa nén có thể nặng 46MB. Sau khi nén sang JPEG, cùng bức ảnh đó có thể giảm chỉ còn 4,1MB. Vậy làm sao nó làm được điều này mà vẫn giữ ảnh sắc nét?
Câu trả lời nằm ở compression process, quy trình nén, quy trình tận dụng cách mắt người hoạt động và loại bỏ dữ liệu không cần thiết.
JPEG Làm Gì?
Nói một cách đơn giản, JPEG phân tích hình ảnh và loại bỏ những yếu tố mà mắt chúng ta khó nhận ra. Khi bạn nén ảnh bằng JPEG, bạn có thể kiểm soát mức độ nén được áp dụng. Bằng cách điều chỉnh cài đặt "chất lượng", bạn quyết định muốn tiết kiệm bao nhiêu dung lượng. Khi chất lượng giảm từ 100% xuống 0%, kích thước tệp cũng giảm theo.
Khi bạn nén nhiều hơn, độ phân giải của ảnh vẫn giữ nguyên, nhưng bạn có thể bắt đầu thấy một số lỗi hoặc "tạo tác" xuất hiện. Những lỗi này trông như các ô vuông nhỏ và thường khó nhận ra nếu bạn không phóng to. Mục tiêu của JPEG là làm tệp nhỏ nhất có thể mà không khiến ảnh trông xấu đi trong mắt người xem.
Các Bước Nén JPEG
Nén JPEG không chỉ là một quy trình duy nhất; đó là một chuỗi các bước được thiết kế để giảm kích thước ảnh. Dưới đây là năm bước chính giúp JPEG hoạt động hiệu quả.
Bước 1: Chuyển đổi không gian màu
Ảnh được tạo từ các điểm ảnh (pixel), và mỗi điểm ảnh có ba thành phần đỏ, lục, lam (RGB) kết hợp lại để tạo ra màu sắc. JPEG bắt đầu bằng cách chuyển các giá trị RGB này sang một không gian màu khác:
- Luminance (Độ sáng): Đây là độ sáng hoặc độ nhạt của một điểm ảnh và rất quan trọng để xác định độ tương phản tổng thể của ảnh.
- Chrominance (Màu sắc): Đây là thông tin về màu, bao gồm cả sắc độ và độ bão hòa.
Việc chuyển đổi này sử dụng thực tế là mắt người nhạy với độ sáng (luminance) hơn là màu sắc (chrominance). Bằng cách tách độ sáng khỏi màu, JPEG cho phép giảm dữ liệu có chọn lọc ở các bước sau mà vẫn giữ được các chi tiết hình ảnh quan trọng nhất.
Không có dữ liệu nào bị mất trong bước này, nhưng nó chuẩn bị cho ảnh được nén hiệu quả.
Bước 2: Giảm mẫu chrominance/Chroma Subsampling
Chroma Subsampling là là một kỹ thuật được áp dụng sau khi chuyển đổi không gian màu. Hãy nhớ là chúng ta đã nói mắt người không giỏi nhận ra màu sắc (chrominance) bằng độ sáng (luminance)?
JPEG tận dụng điều này bằng cách giảm lượng dữ liệu màu. Nó thu nhỏ các kênh chrominance đỏ và lam bằng cách lấy trung bình chúng trong các khối bốn điểm ảnh. Cách này làm dữ liệu màu nhỏ hơn rất nhiều trong khi vẫn giữ nguyên dữ liệu luminance (độ sáng). Ở bước này, ảnh đã được nén đáng kể.
Bước 3: Biến đổi Cosin Rời rạc (DCT)
Biến đổi Cosin Rời rạc (DCT) là một kỹ thuật toán học được dùng để chuyển đổi dữ liệu ảnh từ miền không gian (nơi ảnh là một lưới các điểm ảnh) sang miền tần số. Quy trình này giúp xác định phần nào của ảnh chứa thông tin thị giác quan trọng nhất và phần nào có thể bị loại bỏ bị loại bỏ.
DCT chia nhỏ hình ảnh thành các khối 8x8 và chuyển từng khối thành một tập hợp các giá trị tần số. Các tần số cao đại diện cho những thay đổi nhanh trong giá trị điểm ảnh, như cạnh hoặc nhiễu, thường ít được mắt người nhận thấy hơn và có thể được giản lược hoặc loại bỏ.
Bước 4: Lượng tử hóa
Khi DCT đã được áp dụng, dữ liệu tần số thu được sẽ trải qua bước lượng tử hóa. Ở bước này, phạm vi các giá trị tần số được giảm xuống bằng cách chia chúng cho một tập hằng số được gọi là bảng lượng tử. Quy trình này về cơ bản làm tròn các giá trị tần số để đơn giản hóa chúng.
Các giá trị tần số cao được lượng tử hóa mạnh hơn, nghĩa là chúng mất nhiều độ chính xác hơn vì chúng ít quan trọng đối với chất lượng tổng thể của hình ảnh. Bước thứ tư này làm giảm lượng dữ liệu cần thiết để biểu diễn hình ảnh, giúp tệp nhỏ hơn. Tuy nhiên, lượng tử hóa quá mức có thể dẫn đến các hiện tượng nhiễu nhìn thấy được, như hiện tượng ô vuông hoặc nhòe, đặc biệt ở các mức nén cao.
Bước 5: Mã hóa Run Length và Huffman
Sau khi lượng tử hóa, dữ liệu vẫn chưa đủ gọn để lưu trữ hiệu quả. Đây là lúc Run Length Encoding (RLE) và Huffman Encoding được sử dụng.
Đầu tiên, RLE được dùng để đơn giản hóa các chuỗi dài dữ liệu lặp lại (như các số 0) bằng cách lưu trữ số lần lặp lại thay vì từng giá trị riêng lẻ. Sau đó, áp dụng Huffman Encoding, một kỹ thuật thay thế các giá trị xuất hiện thường xuyên bằng các mã bit ngắn hơn, giúp tệp còn nhỏ hơn nữa.
These two các phương pháp mã hóa kết hợp với nhau để giảm kích thước tệp đáng kể mà không làm giảm quá nhiều chất lượng hình ảnh.
Ghi chú bổ sung
Mặc dù JPEG là một định dạng rất hiệu quả, vẫn có một vài điểm quan trọng cần lưu ý:
- Mức nén: JPEG cho phép người dùng chọn mức độ nén, nhưng mức nén cao hơn sẽ giảm kích thước tệp và có thể tạo ra các hiện tượng nhiễu nhìn thấy được như viền mờ hoặc vỡ điểm ảnh. Điều này xảy ra khi các giá trị trong bảng lượng tử quá cao, dẫn đến nhiều số 0 hơn, làm tệp nhỏ lại nhưng đổi lại là chất lượng hình ảnh bị giảm.
- Mất dữ liệu tần số cao: Lượng tử hóa làm giảm độ chính xác của dữ liệu tần số cao (các chi tiết như cạnh sắc nét), đó là lý do JPEG phù hợp với các bề mặt mịn nhưng có thể gặp khó khăn với đường nét sắc và đồ họa vector.
- Không lý tưởng cho đồ họa vector: JPEG không phải lựa chọn tốt nhất để nén đồ họa vector, vì nó có thể tạo ra các hiện tượng nhiễu dễ nhận thấy tại ranh giới của các hình khối hoặc đường nét.
Bất chấp những hạn chế này, JPEG vẫn là định dạng hình ảnh phổ biến nhất, một phần vì nó ra đời sớm, được hiểu rõ và không tốn phí bản quyền. Tuy nhiên, các định dạng mới hơn như WebP hoặc HEIF cung cấp tỷ lệ nén tốt hơn mà không làm giảm chất lượng, khiến chúng trở thành lựa chọn thay thế phù hợp trong một số trường hợp.
Tổng kết
Thuật toán nén JPEG là một thành tựu đáng chú ý trong quản lý dữ liệu hình ảnh. Bằng cách chia nhỏ hình ảnh thành các khối nhỏ hơn, áp dụng các phép biến đổi toán học và sử dụng các kỹ thuật mã hóa hiệu quả như Run Length và Huffman, nó cho phép chúng ta lưu trữ hình ảnh chất lượng cao trong các tệp có kích thước nhỏ hơn nhiều.
Mặc dù JPEG có một số hạn chế, đặc biệt với các mức nén cao hoặc đồ họa vector, việc được sử dụng rộng rãi và khả năng cho ra kết quả tốt với ảnh chụp giúp nó trở thành một tiêu chuẩn bền vững.