Đoàn Vĩnh Nhân – Toán Tin 03 – K68
Video minh hoạ: Xem tại đây
Khi bạn đưa điện thoại lên chụp lại một ánh hoàng hôn rực rỡ hay một nụ cười của người thân, chỉ mất một phần ngàn giây để khoảnh khắc đó được lưu lại. Nhưng bạn có bao giờ tự hỏi: Dưới lớp kính màn hình, bức ảnh rực rỡ ấy thực chất là gì?
Một bức ảnh kỹ thuật số không chỉ là khoảnh khắc được ghi lại, mà là kết quả của một quá trình số hóa từ hàm liên tục thành những ma trận đa chiều khổng lồ. Và ẩn sâu bên trong nó, thuật toán nén JPEG đóng vai trò như một kiệt tác toán học, giúp “gói gém” khối lượng dữ liệu khổng lồ này một cách tinh vi bằng cách lợi dụng chính những giới hạn trong đôi mắt của chúng ta. Bài viết này sẽ giúp bạn giải mã bản chất của hình ảnh kỹ thuật số dưới góc độ toán học.
1. Từ thế giới thực vào máy tính: Sự ra đời của Pixel
Thế giới thực mà chúng ta đang sống là một dòng chảy liên tục không ngừng nghỉ. Ánh sáng chiếu vào các vật thể và phản xạ lại mắt người tạo ra hình ảnh. Về mặt toán học, đây là một hàm số liên tục hoàn hảo:
- f (Cường độ ánh sáng): Đại diện cho cường độ năng lượng ánh sáng tại một vị trí và bước sóng cụ thể.
- x, y (Tọa độ không gian): Vị trí các điểm trong không gian vật lý 2 chiều.
- λ (Bước sóng ánh sáng): Bước sóng quyết định màu sắc mà vật thể phản xạ.
Tuy nhiên, máy tính lại là một cỗ máy hữu hạn. Nó không thể lưu trữ sự “vô hạn” và “liên tục” của hàm số trên. Để máy tính có thể hiểu được, bức ảnh buộc phải trải qua quá trình “rời rạc hóa” gồm 3 bước cốt lõi:
- Lấy mẫu không gian: Không gian liên tục (x, y) bị băm nhỏ thành một tấm lưới caro. Mỗi ô vuông trên tấm lưới đó chính là một Pixel (điểm ảnh). Độ phân giải của ảnh (từ 8 × 8 đến 2048 × 2048) chính là số lượng các ô vuông trên tấm lưới này.
- Rời rạc hóa quang phổ: Dải bước sóng λ liên tục vô hạn được giản lược chỉ còn 3 dải màu cơ bản: Đỏ (Red), Lục (Green) và Lam (Blue).
- Lượng tử hóa cường độ: Cường độ ánh sáng tại mỗi pixel không còn là một giá trị thực kéo dài vô tận, mà được gán tròn trịa thành một số nguyên nằm trong khoảng từ 0 đến 255.

2. Ảnh màu và Bài toán dữ liệu khổng lồ
Sau khi gộp 3 phép rời rạc hóa trên, một bức ảnh màu kỹ thuật số ra đời. Hệ màu RGB đóng vai trò đánh lừa các tế bào hình nón trong võng mạc của chúng ta bằng cách pha trộn ánh sáng. Về mặt toán học, bức ảnh RGB thực chất là một Tensor 3 chiều (3 lớp ma trận xếp chồng lên nhau). Mỗi lớp ma trận tương ứng với một kênh màu: Đỏ, Lục, Lam, chứa các con số từ 0 đến 255 đại diện cho cường độ sáng.

Nhưng lúc này, một bài toán khủng hoảng dữ liệu xuất hiện. Hãy tưởng tượng một bức ảnh chụp từ camera 12 Megapixels. Nó chứa 12 triệu pixel. Mỗi pixel cần 3 bytes (cho 3 màu R, G, B). Vậy một bức ảnh chưa nén sẽ ngốn tới 36 Megabytes bộ nhớ! Lưu trữ ma trận RGB thô tốn cực kỳ nhiều không gian, đòi hỏi sự ra đời của một cỗ máy nén ưu việt mang tên JPEG.
3. Bước đệm của JPEG: Lỗ hổng thị giác và Không gian YCbCr
Máy tính tính toán rất nhanh, nhưng mắt người thì lại mang một “lỗ hổng” sinh lý kỳ lạ: Chúng ta cực kỳ nhạy cảm với sự thay đổi độ sáng, nhưng lại khá kém cỏi trong việc phân biệt sự thay đổi chi tiết của màu sắc.
Thuật toán JPEG bóc tách bức ảnh sang một không gian mới gọi là YCbCr thông qua phép biến đổi tuyến tính:
- Y (Luma): Kênh Độ sáng, mang toàn bộ chi tiết hình khối của bức ảnh. Mắt người soi rất kỹ kênh này.
- Cb, Cr (Chroma): Hai kênh Sắc độ màu (xanh lam và đỏ), chỉ lưu thông tin màu sắc.
- R, G, B: Ma trận cường độ các kênh màu cơ bản ban đầu.
- Các hệ số thập phân: Đóng vai trò là cỗ máy dịch thuật để tách bạch ánh sáng khỏi màu sắc.
Khi dữ liệu đã ở dạng YCbCr, JPEG thực hiện Lấy mẫu xuống (Subsampling). Bằng việc tính trung bình các khối pixel liền kề (2×2), thuật toán vứt bỏ bớt độ phân giải của hai kênh Cb và Cr:
- Cnew(x, y): Giá trị sắc độ màu mới tại tọa độ thu nhỏ.
- C(…): Các giá trị sắc độ màu gốc trong khối lưới.
- (1 / 4) ∑: Phép tính trung bình cộng, “nghiền” K×L điểm ảnh thành 1 điểm ảnh duy nhất.

4. Biến đổi DCT: Phân rã Pixel thành tần số
Sau khi dọn dẹp bớt màu sắc thừa, bức ảnh bị chia nhỏ thành hàng nghìn khối ma trận vuông. Tại đây, JPEG sử dụng công cụ toán học cốt lõi nhất: Biến đổi Cosine rời rạc (Discrete Cosine Transform – DCT). Đối với một khối kích thước m × n bất kỳ, phương trình tổng quát như sau:
- Trong đó, ∑ ∑ chạy từ 0 đến n-1 và 0 đến m-1.
- F(u, v): Biên độ của sóng tần số tại vị trí (u, v) trong miền tần số.
- m, n: Kích thước của ma trận.
- Y(x, y): Giá trị tại điểm ảnh gốc trong không gian miền N × N.
- α(u), α(v): Hệ số chuẩn hóa trực chuẩn (để bảo toàn năng lượng khi biến đổi).
- cos[…]: Các hàm lượng giác đại diện cho những làn sóng dao động cơ sở.
Phép toán này biến dữ liệu từ miền không gian (pixel) sang miền tần số. Kết quả là sự “hội tụ năng lượng”: Các thông tin quan trọng nhất (tần số thấp – những mảng màu chuyển êm ái) dồn hết về góc trên bên trái. Các chi tiết nhiễu gai góc (tần số cao) bị đẩy xuống góc dưới bên phải.
5. Cỗ máy lượng tử hóa và Quét Zig-zag
Đến đây, khối ma trận tần số đã sẵn sàng đưa qua cỗ máy Lượng tử hóa (Quantization). Đây là bước sinh ra tính chất “nén tổn hao” của JPEG.
- BY(u, v): Ma trận kết quả sau khi đã được lượng tử hóa.
- FY(u, v): Ma trận các hệ số tần số sau biến đổi DCT.
- Q(u, v) (Quantization Matrix): Ma trận lượng tử. Ở góc dưới bên phải (tần số cao), Q chứa các con số chia cực kỳ khổng lồ.
- round: Phép làm tròn toán học thành số nguyên.
Khi đem chia các tần số cao (vốn đã nhỏ) cho các số Q rất lớn rồi làm tròn, kết quả sẽ bị nghiền nát thành các số 0 tròn trĩnh. Hàng loạt chi tiết thừa thãi mà mắt người khó phân biệt đã chính thức bị xóa sổ.

Lúc này, ma trận chủ yếu chứa toàn số 0 ở nửa dưới. Thay vì đọc ngang như văn bản, JPEG chuyển qua Quét Zig-zag (chạy chéo từ góc trên bên trái xuống góc dưới bên phải) để gom chúng thành một mảng 1 chiều. Quá trình quét Zig-zag này đã được minh họa rất sinh động trong video ở đầu bài, cho thấy cách các số 0 bị loại bỏ để thu gọn dữ liệu.
Nhờ quét chéo, mảng 1 chiều này sẽ kết thúc bằng một hàng dài vô tận các số 0. Thay vì lưu hàng chục số 0, thuật toán chỉ đặt một ký hiệu chốt chặn là EOB (End of Block). Cấu trúc […, EOB] này kết hợp cùng Run-length Encoding giúp file ảnh giảm tới 90% dung lượng. Khi bạn mở file, quá trình giải mã ngược (IDCT) sẽ diễn ra tức thì để tái tạo lại ảnh RGB rực rỡ.

6. Tổng kết: Đằng sau một bức ảnh
Bất kỳ khi nào bạn lướt qua một tấm hình trên mạng xã hội, một bản giao hưởng toán học âm thầm đang vận hành trong bộ vi xử lý. Bốn từ khóa cốt lõi: Pixel (rời rạc hóa), RGB (tensor ma trận), DCT (phân rã sóng tần số) và Lượng tử hóa (triệt tiêu dữ liệu) đã cùng nhau giải quyết thành công bài toán dữ liệu khổng lồ của thời đại số.
Một bức ảnh kỹ thuật số không chỉ là câu chuyện của nghệ thuật nhiếp ảnh hay khoảnh khắc thực tại. Nó là vẻ đẹp tuyệt mỹ của ma trận toán học và những thuật toán nén tinh vi, được thiết kế vừa khít một cách hoàn hảo với cấu trúc sinh học của đôi mắt con người.
English