CHƢƠNG II : Một số kỹ thuật xử lý ảnh
3.3. Xây dựng thử nghiệm
3.3.1. Cách tiến hành
Hệ thống xử lý hình ảnh đƣợc xây dựng trên FPGA gồm 3 khối chính: khối thu thập dữ liệu, khối xử lý hình ảnh và khối hiển thị hình ảnh đƣợc biểu
diễn trong hình 3-2. Hệ thống này có thể cho phép thay đổi độ phân giải hình ảnh đầu vào đầu ra phù hợp với độ phân giải của màn hình hiển thị hình ảnh, hỗ trợ các dữ liệu đầu vào với các chế độ 8 bit, 10 bit và 12 bit. Tƣơng thích với chuẩn Avalon Streaming với ready_latency = 1. Tốc độ xung clock lên đến trên 100 MHz, tốc độ lấy mẫu dữ liệu lên đến trên 30 Msampe/s.
Hình 3-2. Mô hình hệ thống thử nghiệm
Khối thu thập dữ liệu từ camera và ghi vào SRAM, tuy nhiên do còn thiếu thiết bị nên trong phần mô phỏng trên kit DE2 em sử dụng ảnh tĩnh đƣợc chuyển thành định dạng RAW, sau đó đƣợc nạp vào SRAM thông qua Control panel DE2.
Khối xử lý ảnh đƣợc thiết kế thành 3 module: Defect pixel correction có chức năng khử nhiễu, interpolation có chức năng nội suy màu và color correction có chức năng sửa màu. Đầu tiên dữ liệu đƣợc lấy từ SRAM vào FIFO sau đó đƣợc khử nhiễu thông qua module defect correction và lại ghi vào FIFO. Tiếp theo dữ liệu đƣợc đọc từ FIFO và nội suy màu bằng module color Interpolation sau đó ghi vào FIFO. Cuối cùng dữ liệu đƣợc xử lý màu qua module Color correction rồi ghi vào FIFO. Dữ liệu đƣợc truyền theo chuẩn Avalon-ST, các module đƣợc kích hoạt bằng các switch trên Kit DE2. Thiết kế của khối xử lý hình ảnh đƣợc đƣa ra nhƣ trong hình 3-3.
Hình 3-3. Sơ đồ thiết kế bộ xử lý ảnh
Tất cả các module đều đƣợc thiết kế theo chuẩn Avalon-ST do đó các module đều có các tín hiệu vào ra nhƣ nhau cụ thể:
Tên tín hiệu Độ rộng (bit) Hƣớng Mô tả
clock 1 in Avalon Clock and Reset
resetn 1 in Avalon Clock and Reset
enable 1 In Avalon Conduit
Sink_data_in 3*DW in Avalon ST – Sink - data
Sink_sop_in 1 in Avalon ST – Sink – start of packet Sink_eop_in 1 in Avalon ST – Sink – end of packet Sink_valid_in 1 in Avalon ST – Sink – data valid Sink_ready_out 1 out Avalon ST – Sink – data ready Source_data_out 3*DW out Avalon ST – Source – data
Source_sop_out 1 out Avalon ST – Source – start of packet
Source_eop_out 1 out Avalon ST – Source – end of packet
Source_valid_out 1 out Avalon ST – Source – data valid Source_ready_in 1 in Avalon ST – Source – data ready
Bảng 3-1. Bảng mô tả các tín hiệu vào ra theo chuẩn Avalon-ST
Dữ liệu đƣợc đọc từ SRAM vào FIFO và dữ liệu này đƣợc chuyển sang khối xử lý dữ liệu ảnh để loại bỏ các điểm ảnh chết bằng module Defect Pixel Correction. Hình 3-4 mô tả cụ thể dữ liệu đƣợc truyền từ FIFO sang module Defect Pixel Correction.
Hình 3-4. Sơ đồ truyền dữ liệu module Defect Pixel Correction
Tín hiệu Sink valid và full protect dùng để đáp ứng yêu cầu ghi dữ liệu vào FIFO, nếu đƣợc đáp ứng thì sẽ ghi N+2 bit vào FIFO. Tín hiệu clken điều khiển quá trình truyền dữ liệu từ FIFO sang module Defect Pixel correction. Nếu FIFO ở đầu vào của module rỗng hoặc FIFO bên đầu ra của module đầy sẽ dừng việc truyền dữ liệu. Tín hiệu Source ready in sẽ đáp ứng yêu cầu đọc dữ liệu của FIFO phía đầu ra của module. Sau đó dữ liệu sẽ đƣợc đồng bộ hóa bởi thành phần Valid Synch.
Dữ liệu đƣợc truyền vào module là các điểm ảnh, module Defect Pixel Correction có chức năng xác định các điểm ảnh lỗi và sửa lại theo thuật toán nhƣ trong hình 3-5 dƣới đây:
Hình 3-5: Sơ đồ khối giải thuật xác định điểm ảnh lỗi
Giải thuật đề nghị sử dụng cửa sổ trung bình và so sánh ngƣỡng, kết hợp so sánh với cận trên và cận dƣới. Nếu điểm ảnh ngõ vào có giá trị gần cận trên (hoặc gần cận dƣới) và có độ sai lệch với giá trị trung bình của điểm ảnh xung quanh vƣợt ngƣỡng thì xác định đó là điểm ảnh lỗi và đƣợc chỉnh sửa bằng giá trị trung bình của điểm ảnh xung quanh. Với ảnh 24 bit màu (mỗi kênh màu 8 bit) thì ngƣỡng cận trên đƣợc chọn là 245 và ngƣỡng cận dƣới đƣợc chọn là 10. Ngƣỡng so sánh với điểm ảnh lân cận có thể đƣợc chọn trong khoảng 40 - 80. Sơ đồ chi tiết đƣợc thể hiện trên hình 3-6.
Hình 3-6 Sơ đồ chi tiết module Defect Pixel Correction.
In_data đƣợc truyền vào theo 5 line và đƣợc tính toán lại theo thuật toán đã trình bày ở trên với cửa sổ đƣợc sử dụng có kích thƣớc 5x5. Quá trình tạo cửa sổ 5x5 đƣợc trình bày ở hình 3-7.
Hình 3-7: Sơ đồ window creator
Các dữ liệu ảnh này sau khi đƣợc loại bỏ các điểm ảnh bị lỗi đƣợc truyền sang FIFO theo chuẩn avalon-ST để tiếp tục xử lý.
Sau khi kết thúc quá trình loại bỏ điểm ảnh lỗi dữ liệu đƣợc truyền sang module Color Interpolation theo chuẩn Avalon-ST. Tại module này dữ liệu ảnh sẽ đƣợc sửa các màu bằng bộ lọc trung bình.
Mặt nạ trung bình có độ phức tạp thấp và tốc độ xử lý nhanh hơn trong FPGA. Do đó đề tài chọn giải thuật mặt nạ lọc trung bình và so sánh ngƣỡng để thực hiện thiết kế.
Việc áp dụng mặt nạ lọc sẽ làm giảm chất lƣợng ảnh, đặc biệt là tại các vùng cạnh (edge). Do đó cần biện pháp để hạn chế việc áp dụng mặt nạ lọc lên toàn bộ ảnh. Nhƣ đã phân tích ở trên, các điểm ảnh bị lỗi có 2 trƣờng hợp là điểm nóng (là điểm bị kẹt ở mức cao) và điểm lạnh (điểm tín hiệu trả về luôn ở mức thấp) do đó ta có thể kết hợp so sánh với cận trên và dƣới để áp dụng mặt nạ lọc cho hợp lý.
Một lƣu ý nữa là các sắp xếp các điểm ảnh đặc trƣng cho các màu là khác nhau đối với Bayer pattern. Do đó tùy từng màu ta sẽ có các cửa sổ trung bình khác nhau. Cụ thể ta có 2 cửa sổ cho mặt nạ lọc trung bình:
1 1 1
1 1
1 1 1
Mặt nạ trung bình cho điểm ảnh R&B
1 1 1
2 2
1 1
2 2
1 1 1
Mặt nạ trung bình cho điểm ảnh G
Tổng trọng số của cả 2 cửa sổ đƣợc chọn để có đƣợc tổng là lũy thừa của 2, để tiện cho việc tính toán trong FPGA.
Cuối cùng dữ liệu ảnh đƣợc truyền sang module Matrix Color Correction để xử lý. Đây là quá trình xử lý cuối cùng trƣớc khi ảnh đƣợc chuyển sang bộ hiện thị ảnh. Trong quá trình này các điểm ảnh sẽ đƣợc sửa lại màu sắc cho phù hợp với cảm nhận màu của mắt ngƣời trƣớc khi hiển thị ra màn hình. Các màu đƣợc tính theo công thức sau:
𝑅_𝑜𝑢𝑡 𝐺_𝑜𝑢𝑡 𝐵_𝑜𝑢𝑡 = 𝑎11 𝑎12 𝑎13 𝑎21 𝑎22 𝑎23 𝑎31 𝑎32 𝑎33 𝑥 𝑅_𝑖𝑛 𝐺_𝑖𝑛 𝐵_𝑖𝑛
Trong module này các phép cộng, nhân sử dụng kỹ thuật pipeline, còn phép chia đƣợc thực hiện bằng phép dịch bit để tăng tốc độ xử lý của module. Hình 3-8 mô tả chi tiết cách thực hiện sử dụng ma trận sửa màu.
Hình 3-8. Sơ đồ chi tiết Color Correction Matrix
Sau nhiều thực nghiệm với các ma trận có trọng số khác nhau, ma trận cho ra màu sắc tốt nhất với các trọng số cụ thể nhƣ sau:
1.6 −0.3 −0.3
−0.3 1.6 −0.3
Khối hiển thị: Chuyển dữ liệu ảnh từ hệ màu RGB sang hệ màu CMY và hiện thị lên màn hình.
Việc kiểm tra chức năng của hệ thống xử lý ảnh đƣợc thực hiện trên modelsim để đảm bảo các module chạy đúng theo chuẩn giao tiếp Avalon-ST.
Sau khi reset hệ thống và tín hiệu ready đạt đƣợc mức tích cực (nghĩa là sink sẵn sàng nhận dữ liệu), tín hiệu valid và startofpacket đạt tích cực, dữ liệu lúc này bắt đầu đƣợc truyền đi đƣợc thể hiện trong hình 3-6 dƣới đây:
Hình 3-9. Kết quả mô phỏng theo từng tín hiệu
Khi ready mất tích cực, nghĩa là sink không sẵn sàng nhận dữ liệu), tín hiệu valid và data cũng mất sau 1 chu kỳ clock (vì ready latency = 1). Khi ready tích cực trở lại, tín hiệu valid lên mức tích cực và data tiếp tục truyền.