UIT CAR RACING 2026 – Bảng chuyên nghiệp: Giới thiệu về ảnh số và xử lý ảnh số

Hình ảnh, một trong những dữ liệu quen thuộc chúng ta gặp hàng ngày. Dữ liệu hình ảnh số tồn tại khắp nơi xung quanh ta. Từ những tấm hình selfie, những video tiktok, những chiếc meme, cho đến những thước phim CGI, những bản vẽ khoa học, hay những bức tranh do AI sáng tạo. Dữ liệu ảnh còn là nền tảng quan trọng trong sự phát triển của công nghệ tiên tiến, như công nghệ chẩn đoán bệnh sớm qua ảnh chụp MRI hay công nghệ tự hành cho robot và ô tô. Vậy nhưng máy tính nhìn thấy hình ảnh như nào? Máy tính lưu trữ và xử lý hình ảnh để cho ra những tấm hình đẹp ra sao? Hãy cùng tìm hiểu nhé!

Ảnh số là hình ảnh được biểu diễn và lưu trữ dưới dạng dữ liệu số, nhờ đó máy tính có thể lưu trữ, hiển thị và xử lý hình ảnh. Một ảnh số có thể được biểu diễn dưới dạng một ma trận các điểm ảnh (pixel). Pixel là phần tử nhỏ nhất cấu tạo nên ảnh số. Mỗi pixel nằm tại một vị trí xác định trong ảnh và mang giá trị biểu diễn độ sáng hoặc màu sắc tại vị trí đó. Kích thước của ảnh thường được biểu diễn dưới dạng chiều rộng × chiều cao.
Ví dụ, ảnh có kích thước 1920 × 1080 pixel nghĩa là ảnh có 1920 pixel theo chiều ngang và 1080 pixel theo chiều dọc. Giá trị mà mỗi pixel lưu trữ phụ thuộc vào loại ảnh, chẳng hạn như ảnh nhị phân, ảnh xám hoặc ảnh màu.

Ảnh số thường được chia thành 3 loại chính:

  • Ảnh nhị phân: loại ảnh mà mỗi pixel chỉ có hai giá trị, thường được biểu diễn bằng 0 và 1. Hai giá trị này tương ứng với hai trạng thái đen và trắng.
  • Ảnh xám (grayscale): ảnh mà mỗi pixel chỉ biểu diễn mức độ sáng, không chứa thông tin về màu sắc. Đối với ảnh xám 8 bit, mỗi pixel có giá trị từ 0 đến 255, trong đó 0 tương ứng với màu đen, 255 tương ứng với màu trắng và các giá trị ở giữa biểu diễn các mức xám khác nhau. Có 256 mức giá trị vì 8 bit có thể biểu diễn 2^8 = 256 giá trị khác nhau.
  • Ảnh màu: ảnh mà mỗi pixel chứa thông tin về màu sắc tại vị trí tương ứng. Khác với ảnh xám chỉ cần một giá trị để biểu diễn độ sáng, một pixel của ảnh màu có thể cần nhiều giá trị để biểu diễn màu sắc. Số lượng và ý nghĩa của các giá trị này phụ thuộc vào không gian màu được sử dụng. Ví dụ, trong không gian màu RGB, mỗi pixel được biểu diễn bởi ba thành phần màu R, G và B.

Không gian màu là phương pháp biểu diễn màu sắc bằng các giá trị số. Một ảnh màu có thể được biểu diễn bằng nhiều không gian màu khác nhau tùy thuộc vào mục đích sử dụng:

– RGB: biểu diễn màu sắc dựa trên sự kết hợp của ba kênh màu R (Red – đỏ), G (Green – xanh lá) và B (Blue – xanh dương). Đối với ảnh RGB 8 bit trên mỗi kênh, giá trị của mỗi kênh nằm trong khoảng từ 0 đến 255. Một pixel được biểu diễn dưới dạng (R, G, B). Ví dụ: (255, 0, 0) là màu đỏ, (0, 255, 0) là màu xanh lá, (0, 0, 255) là màu xanh dương, (255, 255, 255) là màu trắng và (0, 0, 0) là màu đen. Một ảnh RGB có thể được xem như sự kết hợp của ba ma trận tương ứng với ba kênh R, G và B.

This image has an empty alt attribute; its file name is image-28.png

– HSV: biểu diễn màu sắc thông qua ba thành phần: H (Hue – màu sắc chủ đạo), S (Saturation – độ bão hòa, thể hiện mức độ đậm hoặc nhạt của màu) và V (Value – độ sáng). Khác với RGB biểu diễn màu bằng cách kết hợp ba thành phần đỏ, xanh lá và xanh dương, HSV tách thông tin về màu sắc và độ sáng thành các thành phần riêng biệt. Cách biểu diễn này có thể thuận tiện trong một số bài toán xử lý ảnh, chẳng hạn như xác định hoặc phân tách đối tượng dựa trên màu sắc.

– Ngoài RGB và HSV, còn có một số không gian màu khác như HSL, YCbCr và CMYK

Xử lý ảnh là quá trình chuyển đổi một hình ảnh sang dạng kỹ thuật số và thực hiện các thao tác nhất định để nhận được một số thông tin hữu ích từ hình ảnh đó. Hệ thống xử lý hình ảnh thường coi tất cả các hình ảnh là tín hiệu 2D khi áp dụng một số phương pháp xử lý tín hiệu đã xác định trước.

Tùy vào đối tượng và yêu cầu xử lý dữ liệu, chúng ta sẽ có các loại xử lý ảnh khác nhau. Các loại xử lý ảnh thường được quan tâm bao gồm:

  • Nhận diện – Phân biệt hoặc phát hiện các đối tượng trong hình ảnh
  • Làm sắc nét và phục hồi – Tạo hình ảnh nâng cao từ hình ảnh gốc
  • Nhận dạng mẫu – Đo các mẫu khác nhau xung quanh các đối tượng trong hình ảnh
  • Truy xuất – Duyệt và tìm kiếm hình ảnh từ một cơ sở dữ liệu lớn gồm các hình ảnh kỹ thuật số tương tự như hình ảnh gốc

Ở nội dung bài viết này, chúng ta sẽ cùng nhau tìm hiểu một số khái niệm về kỹ thuật xử lý ảnh cơ bản.

Điều chỉnh độ sáng: Trong ảnh thì màu tối nhất là màu đen [0, 0, 0], và sáng nhất là màu trắng [255, 255, 255]. Để thay đổi độ sáng, ta tăng giảm giá trị của từng pixel trong ảnh bằng phép cộng trừ đơn giản.

This image has an empty alt attribute; its file name is image-29.png

Điều chỉnh độ tương phản: Đối với tương phản ta sẽ chia dải màu thành 2 nửa, một nửa thiên sáng và một nửa thiên tối. Để tăng tương phản, chúng ta sẽ khiến 2 dải màu khác biệt nhau hơn, nửa sáng sáng hơn, nửa tối tối hơn. Để giảm tương phản thì ngược lại, nửa tối sáng hơn, nửa sáng tối hơn.

This image has an empty alt attribute; its file name is image-30.png

Grayscale: Như mình đã đề cập ở trên, ảnh đen trắng (grayscale) là ảnh chỉ có 1 kênh màu đen trắng thay vì 3 kênh. Để chuyển ảnh màu về đen trắng, ta sẽ dùng 3 giá trị của pixel gốc để tính giá trị của pixel mới. Công thức là: grayscale = 0.299R + 0.587G + 0.114B.

This image has an empty alt attribute; its file name is image-31.png

Crop: Chúng ta chọn một vùng trên ảnh bằng cách xác định tọa độ 2 điểm, 2 điểm này là 2 góc của vùng hình chữ nhật. Sau đó thì ta “cắt” vùng hình chữ nhật ấy ra tạo thành một bức ảnh mới.

This image has an empty alt attribute; its file name is image-32.png

Tịnh tiến hình ảnh (Translate): Tịnh tiến hình ảnh là di chuyển bức ảnh đi một đoạn. Ta xác định vector dời t = (tx, ty), sau đó ta lấy tọa độ từng điểm cộng với vector dời. Các pixel có tọa độ vượt ra khỏi kích thước sẽ bị loại bỏ, những vị trí mà không có pixel nào dời đến sẽ được đặt bằng một giá trị khác (ví dụ màu đen).

This image has an empty alt attribute; its file name is image-33.png

Co dãn hình ảnh (Scale): Ta có thể tăng hoặc giảm kích thước của ảnh bằng cách xác định các hệ số dãn của mỗi chiều. Sau đó lấy ảnh gốc nhân với hệ số dãn để tạo thành bức ảnh mới.

This image has an empty alt attribute; its file name is image-34.png

Xoay hình ảnh (Rotate): Để xoay ảnh, ta cần xác định được góc xoay θ. Vị trí mới của pixel được tính bởi công thức:

This image has an empty alt attribute; its file name is image-36.png

Shear: Phép biến đổi này sẽ biến dạng ảnh thành một hình thang. Ta xác định hệ số shear Shx và Shy, tọa độ mới của điểm ảnh được tính bởi công thức:

This image has an empty alt attribute; its file name is image-37.png
This image has an empty alt attribute; its file name is image-38.png

Biến đổi phối cảnh (Perspective transform): Đây là phép thay đổi vị trí 4 góc của ảnh. Khá giống với khi bạn chụp tài liệu, có thể chọn 4 góc trong ảnh để kéo dãn phẳng chúng ra. Dựa trên sự thay đổi của 4 điểm góc trước và sau khi biến đổi, ta tìm ra ma trận biến đổi H. Sau đó ta tính tọa độ và kích thước mới của từng pixel bằng cách nhân ma trận tọa độ gốc với ma trận biến đổi H.

This image has an empty alt attribute; its file name is image-39.png

Phép tính tích chập – convolution: là kỹ thuật quan trọng trong Xử Lý Ảnh, được sử dụng chính yếu trong các phép toán trên ảnh như: đạo hàm ảnh, làm trơn ảnh, trích xuất biên cạnh trong ảnh. Trong bài viết này, tôi trình bày về kỹ thuật tích chập trong lĩnh vực xử lý ảnh và cách hiện thực nó sử dụng ngôn ngữ C++ có hỗ trợ của thư viện openCV.

– Để thực hiện phép tích chập, ta sẽ dùng 1 cửa sổ trượt (Sliding Window) hay còn gọi là kernel để “trượt” qua toàn bộ bức ảnh, từ đó thu được bức ảnh khác có kích thước nhỏ hơn.

This image has an empty alt attribute; its file name is image-40.png

– Trong phép tính tích chập cho ảnh, chúng ta sẽ có một vài tham số như kích thước kernel (k), stride (s) và padding (p).
– Kích thước kernel có thể thay đổi, ví dụ như với k = 5 thì có kernel 5 * 5. Đối với ảnh có màu, kernel có thể là tensor, ví dụ 3 * 3 * 3 (với k = 3) hay 5 * 5 * 3 (với k = 5).
– Bạn có thể “nhảy cóc” và bỏ qua các pixel giữa các lần nhảy bằng cách thay đổi stride.
– Khi áp kernel lên các pixel ở cạnh biên, chúng sẽ không có đủ pixel xung quanh để tính. Khi này hoặc là bỏ qua chúng, hoặc là thêm một số pixel “viền” xung quanh ảnh, phần pixel được thêm vào được gọi là padding. Ví dụ với p = 1, chúng ta sẽ thêm phần viền với độ dày 1 pixel. Giá trị phần viền thường là giá trị của pixel biên, một hằng số (ví dụ: tất cả = 128), hoặc có thể quy định riêng.
– Các tham số trên sẽ ảnh hưởng tới kích thước của ảnh output, bạn có thể tính độ dài mỗi chiều của ảnh mới với công thức:

This image has an empty alt attribute; its file name is image-41.png

– Với n là độ dài ban đầu của chiều đang xét, k là độ dài kernel chiều tương ứng, p là padding, s là stride.

– Mỗi kernel khác nhau thì sẽ phép tính convolution sẽ có ý nghĩa khác nhau. Có thể kể đến như làm nét ảnh (sharpen), làm mờ ảnh (blur), tìm viền của các vùng trong ảnh (edge detection), …

– Các bạn có thể thử một số kernel và hiệu ứng của chúng lên ảnh tại link sau: https://setosa.io/ev/image-kernels/

– Các phương pháp xử lý ảnh trên, ngoài ứng dụng trong việc làm đẹp những tấm hình chúng ta chụp thường ngày, còn có rất nhiều ứng dụng quan trọng khác trong khoa học kỹ thuật. Các cách xử lý ảnh ở trên cũng chính là một phương pháp giúp tăng số lượng ảnh đầu vào cho các mô hình máy học, hay còn được biết đến là tăng cường dữ liệu (data augumentation). Hi vọng bài viết này có thể cung cấp cho bạn một cái nhìn sơ qua về thị giác máy tính, và giúp ích cho quá trình phát triển kỹ năng của bạn sau này.