1 Toán học trong những tấm ảnh

Một trong những câu hỏi mà tôi thường nghe thấy là: “Học sin, cos để làm gì?” Chắc hẳn nhiều người trong chúng ta vẫn còn có chút ấn tượng về các hàm lượng giác được học thời phổ thông, với các phép tính phức tạp được chuyển thể thành thơ cho dễ nhớ, như: “Cos cộng cos bằng hai cos cos, cos trừ cos trừ hai sin sin, …” Nhưng những hàm sin, cos đó có vai trò gì không trong cuộc sống của chúng ta thì chắc nhiều người cũng thắc mắc.

Trong thực tế thì những hàm sin, cos được sử dụng rất nhiều. Trong bài này, tôi sẽ nói về một ứng dụng của chúng mà có lẽ ai trong chúng ta cũng đã từng dùng qua: đó là trong lưu trữ hình ảnh trên máy tính hoặc điện thoại.

Khi lưu trữ hình ảnh trên máy tính hoặc điện thoại, một trong những định dạng ảnh thường dùng là JPEG, với các file có đuôi .jpeg hoặc .jpg. Để lưu trữ ảnh dưới định dạng này, bức ảnh gốc sẽ được chuyển đổi bằng một phép toán gọi là phép biến đổi cos rời rạc (discrete cosine transform), sau đó sẽ được số hoá thành một chuỗi ký tự 0 và 1 để lưu trữ trên máy.

Từ tên của phép toán, chúng ta có thể đoán được nó dùng đến hàm cos. Vậy cụ thể thì phép toán này hoạt động như thế nào?

Giải thích một cách khái quát, phép biến đổi cos rời rạc sẽ chuyển bức ảnh gốc thành tổng của nhiều hàm số có dạng tích của hai hàm cos. Ví dụ, một bức ảnh với kích thước 8 \(\times\) 8 điểm ảnh (pixel) có thể được viết thành:

\[ \begin{aligned} \textrm{Image} &= 6.1 \times \frac{1}{8}cos(...)cos(...) \; + \; 0.3 \times \frac{1}{4\sqrt{2}}cos(...)cos(...) \\ &\quad + (-0.2) \times \frac{1}{4}cos(...)cos(...) \; + \; ... \end{aligned} \]

Trong công thức trên thì các hàm số \(\frac{1}{8}cos(...)cos(...)\), \(\frac{1}{4\sqrt{2}}cos(...)cos(...)\), \(\frac{1}{4}cos(...)cos(...)\) được gọi là các hàm cơ sở (basis function), còn các số \(6.1, 0.3, -0.2\) là trọng số của các hàm cơ sở này. Đối với những ảnh trắng đen có kích thước 8 \(\times\) 8, có tổng cộng 64 hàm cơ sở. Đối với các ảnh màu, chúng ta phải thực hiện phép biến đổi cos rời rạc như trên cho từng kênh màu riêng biệt (trong định dạng JPEG, hệ màu YCbCr thường được dùng thay cho hệ RGB).

Một điểm thú vị ở đây là tất cả các ảnh có cùng kích thước sẽ có chung các hàm cơ sở, chỉ có các trọng số là thay đổi tuỳ theo mỗi ảnh. Do đó, để lưu trữ một tấm ảnh, máy tính chỉ cần lưu lại các trọng số này là đủ. Mỗi khi chúng ta mở một file ảnh ra xem, máy tính sẽ dùng công thức bên trên để tính lại ảnh gốc và hiển thị ra trên màn hình.

Sau khi tính toán cụ thể, chúng ta có thể vẽ ra giá trị của mỗi hàm cơ sở. Khi đó, mỗi hàm cơ sở cũng tương đương với một ảnh có kích thước bằng với ảnh gốc, như trong hình vẽ bên dưới. Tần số (tức là sự thay đổi giữa các màu đen và trắng) của các hàm cơ sở tăng dần từ trái sang phải và từ trên xuống dưới.

64 hàm cơ sở của các bức ảnh 8 x 8. Các số màu vàng trong ảnh là trọng số của mỗi hàm cơ sở và thay đổi tùy theo ảnh gốc. (Nguồn: Wikimedia Commons)

Figure 1.1: 64 hàm cơ sở của các bức ảnh 8 x 8. Các số màu vàng trong ảnh là trọng số của mỗi hàm cơ sở và thay đổi tùy theo ảnh gốc. (Nguồn: Wikimedia Commons)

Vậy tại sao chúng ta lại phải dùng phép biến đổi cos rời rạc để lưu trữ ảnh?

Có một vài lợi ích khi lưu trữ ảnh theo cách này. Thứ nhất, do mắt người có thể dễ dàng nhận ra sự thay đổi về độ sáng trên tổng thể một bức ảnh, nhưng lại khó phân biệt được sự thay đổi nhỏ ở các tần số cao, nên chúng ta có thể làm tròn các trọng số có tần số cao (là các hàm cơ sở gần phía dưới bên phải trong ảnh trên) và lưu trữ chúng dưới dạng số nguyên để tiết kiệm dung lượng. Lợi ích thứ hai là chúng ta có thể dễ dàng giảm kích thước ảnh mà vẫn giữ lại được các thông tin quan trọng trong ảnh. Như trong ví dụ dưới đây, dù đã loại bỏ gần 85% số lượng hàm cơ sở, chúng ta vẫn có thể nhận ra được nội dung trong ảnh gốc.

Ảnh gốc (trái) và ảnh sau khi đã loại bỏ gần 85% số lượng hàm cơ sở (phải). (Nguồn: MathWorks)

Figure 1.2: Ảnh gốc (trái) và ảnh sau khi đã loại bỏ gần 85% số lượng hàm cơ sở (phải). (Nguồn: MathWorks)

Đây là do một tính chất của phép biến đổi cos rời rạc, gọi là tính chất nén năng lượng (energy compaction): nó có thể nén một lượng lớn thông tin (năng lượng) trong ảnh vào trọng số của rất ít các hàm cơ sở. Do đó chúng ta có thể loại bỏ phần lớn các hàm cơ sở mà không bị mất quá nhiều thông tin.

Ngoài việc được sử dụng với các ảnh JPEG, phép biến đổi cos rời rạc cũng được dùng để lưu trữ và nén các video định dạng MPEG, các file âm thanh định dạng MP3, cũng như trong nhiều ứng dụng xử lý tín hiệu khác.