Chương 1: Cơ sở lý thuyết 1. Tổng quát xử lý ảnh Trong lĩnh vực thị giác máy tính, nhóm kiến thức sau về cấu tạo ảnh cũng như tiền xử lý ảnh là vô cùng quan trọng để phát triển thuật toán. Trong đó, các phép toán được chia thành từng cấp độ, từ việc cơ bản như lọc nhiễu, làm sắc nét, cân bằng sáng cho đến việc phân đoạn ảnh giúp nắm bắt được cái bên ngoài, cái vỏ bọc của vật thể, và cuối cùng là nắm bắt được cái bên trong, phần nội dùng của vật thể. Hình 1: So sánh các mức của xử lý ảnh 1.
Không gian màu Đối với phương pháp xử lý ảnh, người lập trình cần có kiến thức về các thành phần cơ bản cấu thành điểm ảnh cũng như không gian màu – được hiểu như một cách số hóa màu sắc. Như ta đã biết, hình ảnh mà các thiết bị kỹ thuật số hiển thị cho chúng ta thấy được là do sự kết hợp giữa các kênh màu. Trong đó, chúng ta không thể không kể đến một hệ màu thông dụng là RGB (Red, Green, và Blue) với mỗi kênh màu có cường độ từ 0 bit đến 8 bit (giá trị từ 0 đến 255) tạo thành một ma trận 3 chiều. Hình 1 cho thấy một bức ảnh màu được cấu tạo từ 3 ma trận 5x5 tương ứng với màu đỏ, màu xanh lá, và màu xanh dương.
Sự kết hợp này tạo ra độ đa dạng cho màu sắc trong kỹ thuật số khi một điểm ảnh sẽ mang dải giá trị từ 0 đến 2563-1 ứng với 16.216 màu có thể hiển thị. Tuy nhiên, không phải lúc nào sự đa dạng cũng mang đến tính tiện lợi cho con người. Đối với các màn hình bị giới hạn về độ sâu của màu sắc, chúng chỉ có thể hiển thị 216 màu RGB tương ứng với 6 giá trị màu cho mỗi kênh theo hệ thập lục phân: #00, #33, #66, #99, 18 Luan van #CC, và #FF. Hình 2 bên dưới trình bày cách kết hợp màu sắc giữa kênh xanh dương với kênh đỏ (trục tung) và kênh xanh lá (trục hoành) theo mô hình Netscape Color Cube.
Hình 2: Minh họa hệ màu RGB Hình 3: Mô hình Netscape Color Cube hiển thị qua kênh xanh dương 19 Luan van Tuy nhiên, với sự phát triển vượt bậc về công nghệ hiển thị, giờ đây việc hiển thị đầy đủ giá trị màu của kênh RGB với 24 bit mỗi điểm ảnh (24bpp) không còn là vấn đề quá lớn. Thậm chí, các màn hình với công nghệ tiên tiến hiện nay có thể hiển thị với độ sâu lên đến 48bpp (16bit mỗi kênh), mang đến khả năng hiển thị hơn 68 tỷ màu. Thế nhưng, hệ màu RGB không đóng vai trò quá trọng tâm trong các bài toán về thị giác máy tính, ngay cả với các bài toán có liên quan đến việc nhận diện vật thể dựa trên màu sắc. Việc này đến từ tính phức tạp trong cách tính toán cũng như việc hệ RGB chú trọng việc diễn đạt màu sắc kỹ thuật số cho con người, điều này thiếu sự đồng nhất và bị ảnh hưởng bởi những thứ không thể điều khiển như cấu trúc vật thể hay ánh sáng.
Cùng một bức ảnh với hệ màu RGB, hình ảnh con người nhìn thấy đôi khi lại rất khác so với thứ mà các bộ vi xử lý có khả năng nhìn thấy và hiểu được. Thay vào đó, một số hệ màu khác có cấu tạo tách biệt phần ánh sáng và được định nghĩa gần gũi hơn với thường thức của con người sẽ được sử dụng, tiêu biểu là các hệ màu như LAB, HSV, YCbCr,. Lấy ví dụ, màu sắc trong hệ HSV có thể được nhận biết qua “hình 4”. Hình 4: Vùng màu trong hệ HSV Trục hoành tương ứng với giá trị H-Hue–Màu sắc.
Khi Hue tăng dần từ 0 đến 180, màu sắc hiển thị sẽ tương ứng với sự giảm dần của bước sóng từ màu đỏ cho đến màu tím. Vùng (1) trong “hình 4” (phía trên trục hoành) là khu vực mà giá trị S-Saturation - Bão hòa chưa đạt ngưỡng tối đa. Độ bão hòa đặc trưng cho độ đậm nhạt của màu sắc, S càng thấp sẽ cho ra màu sắc càng nhạt và ngược lại. Vùng (2) trong “hình 4” (phía dưới 20 Luan van trục hoành) là khu vực mà giá trị bão hòa đã đạt ngưỡng, màu sắc không thay đổi khi chúng ta tiếp tục tăng giá trị bão hòa.
Trong hình, con số V-Value–Giá trị (vì không được chuẩn hóa nên đôi khi còn được gọi là I-Intensity-Độ sâu, L-Lightness-Độ sáng hay B-Brightness-Độ chói tạo thành hệ màu HIS hay HSB với cùng ý nghĩa). Trong hình trên, giá trị luôn được đặt ở mức ngưỡng là 255 tại mọi điểm để mang lại cái nhìn chân thực nhất về màu sắc, nếu giá trị quá thấp, màu sắc sẽ hoàn toàn bị phủ đen. Một cách hiểu khác, giá trị là sự kết hợp giữa màu sắc với màu trắng, khi được thay đổi, giá trị càng thấp thì ảnh hiển thị ra càng tối. Ngoài tính dễ hiểu, việc tách biệt các giá trị về màu sắc, sắc độ cũng như cường độ sáng còn mang lại lợi ích trong các thuật toán tiền xử lý ảnh.
Lấy ví dụ, trong phép cân bằng biểu đồ, nếu không tách biệt màu sắc khỏi cường độ sáng, việc cân bằng sẽ mang lại kết quả rất khác so với mong đợi. Một ví dụ thực tế khác, trong việc nhận diện biển báo giao thông, điều kiện ánh sáng như chói sáng hoặc nhiễu đổ bóng dễ làm phần mềm không nhận diện được các biển báo do phần cạnh cần thiết để nhận diện bị chìm trong nhiễu. Như vậy, việc tách biệt bóng hay các phần ảnh bị chói sẽ gia tăng độ chính xác và tính hiệu quả của mô hình nhận diện liên quan đến màu sắc. Tạo ảnh xám Đây là một trong những phương pháp được sử dụng phổ biến trong quá trình tiền xử lý.
Tương tự với giá trị Brightness, Lightness, hay Value trong các hệ màu HSB, HSL, hay HSV, giá trị của hệ màu xám trình bày đặc điểm về cường độ sáng của điểm ảnh. Giá trị của các điểm ảnh trong hệ màu xám được xác định từ 0 (màu đen) đến 255 (màu trắng), từ 1 đến 254 là các sắc độ từ xám đậm đến xám nhạt. “Hình 5” minh họa quá trình chuyển đổi từ ảnh màu sang ảnh xám. Hình 5: Phép chuyển đổi ảnh xám 21 Luan van Như chúng ta thấy, phép chuyển đổi từ ảnh màu sang ảnh xám giữ nguyên tính chất ảnh về các cấu trúc, chiều sâu, và ánh sáng, trừ yếu tố màu sắc.
Việc chuyển đổi hình ảnh thành hệ màu xám để sử dụng trong quá trình xử lý giúp giảm dùng lượng bộ nhớ và tăng tốc độ xử lý của hệ thống một cách đáng kể do ảnh xám chỉ yêu cầu 8 bits dữ liệu cho mỗi điểm ảnh thay vì ít nhất 24 bits như trong các hệ màu khác (lưu ý rằng với mỗi điểm ảnh RGB, hệ thống luôn cấp đủ 24 bits cho dù tất cả các giá trị của hệ màu là 0). Vì vậy, phần lớn các thuật toán xử lý ảnh đều yêu cầu ảnh đầu vào là một ảnh xám vì chúng giúp đơn giản hóa thuật toán cũng như giảm số lượng phép tính cần phải thực hiện, nhờ đó bộ nhớ máy tính có thể lưu trữ nhiều dữ liệu hơn, khả năng xử lý đa nhiệm cũng được cải thiện một cách đáng kể. Nói đến phép tính chuyển đổi ảnh màu thành ảnh xám, như được đề cập trong bài báo khoa học của Christopher Kanan và Garrison W. Cottrell trên tập san PLOS One, có ít nhất 13 cách chuyển đổi ảnh màu thành ảnh xám, lựa chọn dựa trên yêu cầu về việc loại bỏ nhiễu sáng.
Tuy nhiên, trong bài báo cáo này, nhóm chỉ sử dụng phép chuyển đổi Luminance. Đây là phép toán được sử dụng trong các mã nguồn xử lý ảnh phổ biến như OpenCV và MATLAB. Trong đó, giá trị xám của điểm ảnh khi chuyển đổi từ ảnh màu hệ RGB sang ảnh xám là: 𝐺𝐿𝑢𝑚𝑖𝑛𝑎𝑛𝑐𝑒 = 0.11𝐵 (1) Công thức (1) cũng chỉ ra khả năng nhận diện màu sắc về khía cạnh sinh lý của con người: nhạy cảm nhất với ánh sáng xanh lá, ít hơn là màu đỏ, và ít nhất là màu xanh dương. Cân bằng biểu đồ Bước cân bằng biểu đồ được ứng dụng để lọc bớt nhiễu sáng trong ảnh.
Trong phép cân bằng biểu đồ, những thông số sau cần được xác định cho việc tính toán: 𝑟𝑘 : mức xám của điểm ảnh. 𝑛𝑘 : số lần xuất hiện của điểm ảnh có giá trị 𝑟𝑘 trong ảnh. 𝑛𝑘 𝑝𝑟 = : tỉ lệ xuất hiện của điểm ảnh có giá trị 𝑟𝑘 trong ảnh, với MN là tích chiều 𝑀𝑁 dài và chiều rộng của ảnh. 22 Luan van 𝑠𝑘 : giá trị xác suất mật độ của từng cường độ sáng trong ảnh Giá trị 𝑠𝑘 được tính toán bằng công thức sau: 𝑠𝑘 = (𝐿 − 1) ∑𝑘𝑗=0 𝑝𝑟 (𝑟𝑗 ) (2) Với 𝐿 là giá trị cao nhất của mức xám trong ảnh (2𝑠ố 𝑏𝑖𝑡 ả𝑛ℎ − 1) và 𝑘 ∈ [0, 𝐿 − 1] Sau khi tính toán, giá trị 𝑠𝑘 được làm tròn để gán vào giá trị các điểm ảnh.
Hình 6 minh họa sự khác biệt về biểu đồ xám giữa hình được cân bằng biểu đồ và hình chưa qua xử lý. Hình 6: Kết quả phép cân bằng biểu đồ xám Với ảnh chưa được cân bằng biểu đồ xám, cường độ các điểm ảnh chỉ nằm ở một phía biểu đồ, hoặc nằm giữa biểu đồ. Sau bước cân bằng, cường độ các điểm ảnh được san bằng xuyên suốt biểu đồ, mang lại độ tương phản cao cho ảnh. Phép phân ngưỡng Phép phân ngưỡng được sử dụng để chuyển đổi ảnh đa cấp xám (mỗi điểm ảnh có giá trị cường độ xám từ 0 đến 255) thành ảnh nhị phân (mỗi điểm ảnh chỉ mang giá trị 0 hoặc 255).
Việc phân ngưỡng được ứng dụng nhiều trong các bài toán về phát hiện vật thể, phân lớp, và giúp tăng tốc các bài toán liên quan đến vùng ảnh. Đối với một ảnh xám, nếu độ đậm G của điểm ảnh lớn hơn giá trị ngưỡng đặt trước, điểm ảnh sẽ được gán một giá trị ở đầu ra của phép phân ngưỡng. Trường hợp độ đậm G của điểm ảnh nhỏ hơn hoặc bằng giá trị ngưỡng, điểm ảnh sẽ được gán một giá trị khác. Các giá trị 23 Luan van đầu ra được quyết định dựa trên sự lựa chọn về phương pháp phân ngưỡng.
Một số phương pháp phân ngưỡng cơ bản có thể được kể đến như: - Phân ngưỡng nhị phân: Nếu G lớn hơn ngưỡng, điểm ảnh được gán giá trị 255 (hoặc giá trị bất kỳ được đặt trước), ngược lại, điểm ảnh được gán giá trị là 0. - Phân ngưỡng nhị phân đảo: Nếu G lớn hơn ngưỡng, điểm ảnh được gán giá trị 0.