L ời cảm ơn
3.2.4. Image Processing core
Image Processing core là thành phần quan trọng nhất của hệ thống xử lý
ảnh, trong đó thực thi tất cả các thuật toán từ cơ bản( lọc, dò biên, phân
ngưỡng...) đến nâng cao ( gán nhãn đối tượng, xác định các đặc trưng ). Hoạt
động của thành phần này được điều khiển bởi bộxửlý trung tâm.
Như đã thấy ở trên, mỗi pixel được thu thập, xử lý và lưu vào SDRAM có
dạng một word 16bit chứa thông tin như sau :
thịmức xám của pixel, sẽ được xử lý trong các thuật toán về sau. Còn lại 6 bit
cao sau field_change chưa được sử dụng đến, sẽ được dùng đểgán nhãn đối
tượng.
Việc thiết kế Image Processing Core chủ yếu sử dụng công cụ System Generator. Với công cụ này, người thiết kế có thể sử dụng các core có sẵn đã
được cung cấp bởi Xilinx, giảm thiểu công sức và thời gian thiết kế, đồng thời vẫn có thể tự tạo ra các block riêng cho mình sử dụng công cụ Black Box, và
đặc biệt, việc gỡ rối và mô phỏng hệ thống có thể thực hiện hoàn toàn trên Matlab, vốn đã rất quen thuộc với sinh viên Điều khiển tự động.
Hình 3.10: Sơ đồkhối xửlý ảnh.
Khối xử lý ảnh giao tiếp với SDRAM thông qua 2 FIFO là read_fifo và store_fifo.
read_fifo có nhiệm vụ đọc tuần tự dữ liệu từ SDRAM vào để khối xử lý
ảnh lưu vào buffer và xử lý. Việc đọc bắt đầu khi tín hiệu báo read_fifo không còn trống (read_fifo_empty='0' hay read_fifo_avail='1') và dừng khi
store_fifo có nhiệm vụlấy dữliệu đã xử lý từkhối xử lý ảnh và lưu tuần tự trở lại vào SDRAM tại vị trí xác định. Cũng như read_fifo, việc ghi của
store_fifo điều khiển quá trình xử lý, khi store_fifo đầy thì tạm dừng việc xử
lý.
Cấu trúc của Image Processing Core gồm 2 thành phần :
fifo_to_buffer : thực thi việc giao tiếp với read_fifo và lưu dữ liệu vào một bộ đệm. Thực chất bộ đệm dữ liệu là một Block Ram trong FPGA, có khả năng lưu đến 27 dòng của frame. Việc lưu dữ liệu được điều khiển sao cho
tránh xung đột với thành phần xửlý.
Hình 3.11 : Khối ghi dữliệu từread_fifo vào Buffer
processing_algorithms : lựa chọn, thực thi tất cảcác thuật toán xửlý ảnh, từ lọc, dò biên, các thuật toán xử lý đồng cấu,... cho đến phân ngưỡng, phân vùng và gán nhãn đối tượng. Đồng thời thành phần này còn thực hiện giao tiếp giữa Image Processing Core trong việc giao tiếp với store_fifo để đưa dữ
Hình 3.12 : Khối thuật toán xửlý ảnh
Khối xửlý này đọc dữ liệu từ bộ đệm theo cùng một phương pháp trong
tất cảcác thuật toán xử lý. Điều này có thểgây kéo dài thời gian xử lý đối với một sốít thuật toán, nhưng lại giúp tiết kiệm rất nhiều tài nguyên và công sức thiết kếcũng như giảm thiểu khả năng gây lỗi hoặc nhầm lẫn trong quá trình thiết kế.
Việc ghi và đọc dữliệu ởbộ đệm buffer như sau:
Ban đầu ta đọc tuần tự dữ liệu vào buffer cho đến khi đầy 10 dòng, ta lại
quay ngược trở lại vị trí ban đầu và tiếp tục đọc. Đồng thời, cửa sổ ghi ra để
xử lý được dịch tuần tự cho đến hết 10 dòng , rồi cũng quay ngược trở lại dòng đầu tiên. Việc ghi và đọc được điều khiển sao cho không xảy ra sự xung
đột : chỉ ghi vào những dòng đã xử lý và chỉ đọc khi đã ghi đủ số dòng cần thiết đểxửlý.
Việc đọc và ghi như trên cho phép sử dụng một cách hiệu quả số block ram hữu hạn của FPGA, tránh hoàn toàn khả năng xung đột đọc/ghi, đồng thời loại giúp cho việc đọc và ghi trở nên tương đối độc lập với nhau, giảm thiểu sai sót trong quá trình xử lý.
Các khối xửlý cơ bản
Khối đọc dữ liệu : các cửa sổ được đọc ra từ bộ đệm, để đưa vào một thanh ghi dịch 9 word. Việc đọc được thực hiện tuần tự từ trên xuống theo từng cột từtrái sang, dữ liệu đọc ra được dịch dần vào thanh ghi dịch.
Hình 3.13 : Khối đọc dữliệu từbuffer
Khi chuyển sang cửa sổkế tiếp, do 2 cửa sổ kề nhau có chung 6 word nên
để tiết kiệm thời gian, ta sẽ không đọc lại từ đầu 6 word cũ mà sử dụng lại chúng với sự trợ giúp của thanh ghi dịch. Do đó ta sẽchỉviệc đọc tiếp 3 pixel
ởcột tiếp theo. Tín hiệu full_win báo hiệu một cửa sổvừa được đọc xong, cần
đưa vào quá trình xửlý.
Thanh ghi dịch Pixel register : Thanh ghi này có nhiệm vụ ghi dần các
pixel đọc từ buffer do khối đọc dữ liệu điều khiển. Các pixel được dịch dần trong quá trình xử lý, do đó, cứ mỗi 3 chu kì xử lý, trong thanh ghi lại lưu
Có thểthấy, với thanh ghi dịch này, ta có thể tận dụng tối đa khả năng xử
lý song song của FPGA cho các thuật toán xửlý ảnh số.
Khối xử lý : Khối xử lý bao gồm nhiều thuật toán xử lý khác nhau. Tuy nhiên, cấu trúc của các thuật toán là tương đối giống nhau và ta có thể tận dụng một cơ chế đọc duy nhất đểdùng chung cho tất cảcác thuật toán.
Cấu trúc bộ lọc tuyến tính, dò biên : Bộ lọc tuyến tính và dò biên theo
phương pháp Laplacien cùng sử dụng phép nhân chập với 2 mặt nạ khác
nhau. Do đó ta có thể ghép chung lại thành một khối. Phép nhân chập có thể được thực hiện rất nhanh chóng sử dụng cấu trúc song song. Dưới đây là cấu trúc bộnhân chập trong các bộxửlý này :
Hình 3.15 : Cấu trúc nhân chập
Bộxử lý đồng cấu ảnh nhịphân : Khối này chủyếu tính ra giá trịmax,min của các pixel trong cửa sổ, do đó sử dụng các block so sánh. Cấu trúc như
Hình 3.16 : Cấu trúc bộxửlý đồng cấu ảnh nhịphân.
Khối tính ngưỡng và phân ngưỡng : Ngưỡng được tính theo phương pháp
trung bình. Tổng mức xám của các pixel sẽ được cộng dần vào một thanh ghi và thực hiện phép chia bằng cách dịch bit. Kết hợp nhiều khối dịch bit với nhau cho phép ta thực hiện phép chia với sai số của ngưỡng nhỏ hơn 3 và
thuật toán chỉcần thực hiện trong 1 chu kì xung.
Khối đếm đối tượng: Khối đếm đối tượng cũng tận dụng khả năng xử lý song song của FPGA để thực hiện đếm đối tượng. Với khối này, việc gán nhãn cho mỗi pixel dựa trên nhãn của các pixel lân cận chỉ cần thực hiện trong 1 chu kì đồng hồ.
Hình 3.17 : Khối gán nhãn đối tượng
Đầu vào khối gán nhãn đối tượng là 9 pixel của cửa sổhiện tại, với pixel 5 là trung tâm, cần được xem xét để gán nhãn. Việc gán nhãn cho pixel trung tâm thực hiện như thuật toán đã trình bày ởphần 1.