TRIỂN KHAI THUẬT TOÁN FUSION TRÊN NỀN TẢNG FPGA

73 0 0
Tài liệu đã được kiểm tra trùng lặp
TRIỂN KHAI THUẬT TOÁN FUSION TRÊN NỀN TẢNG FPGA

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Fusion là thuật toán xử lý ảnh hữu ích và được ứng dụng nhiều trong thực tế. Trong đồ án tốt nghiệp, em đã xây dựng IP Core thực hiện hai phương pháp Fusion theo chuẩn vào ra Avalon Video Streaming Interface – giao thức thường được dùng trong các IP Core xử lý ảnh/video được cung cấp bởi Intel (Altera). Phương pháp Gaussian Pyramid Decomposition trên một vài tập dataset thử nghiệm có thể thấy khá nhiều nhiễu trong khi đó hướng tiếp cận với Saliency extraction và LEP filter có kết quả tốt hơn đáng kể. Em đã tìm hiểu và xây dựng hệ thống SoC, viết chương trình thực hiện các thử nghiệm thực tế trên môi trường Linux với tập dataset gồm rất nhiều ảnh liên tục có kích thước 640x480. Kết quả thử nghiệm trực tiếp được trên board tương tự kết quả mô phỏng trên sơ đồ khối Simulink đã xây dựng, và qua quan sát có thể thấy kết quả hình ảnh đầu ra khá tốt. Cuối cùng, một vài thông số về thời gian, năng lượng được so sánh khi thực hiện giữa CPU và FPGA nhằm mục đích tham khảo

Trang 1

TRIN KHAI THUT TOÁN FUSION

Trang 2

MỤC LỤC

PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP 2

TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP 4

LỜI NÓI ĐẦU 5

DANH MỤC BẢNG 8

DANH MỤC HÌNH VẼ 9

DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ 11

PHẦN I: AVALON INTERFACES 13

1 Giới thiệu Avalon Interfaces 14

2 Avalon Streaming/Video Streaming Interface 14

PHẦN II BOARD DE2i-150 và DE1-SoC 18

1.2 Gaussian Pyramid Decomposition 24

1.2.1 Triển khai thuật toán trên MATLAB 25

1.2.2 Kết quả trên một vài tập dataset 27

1.3 LEP filter và Saliency extraction 27

1.3.1 Triển khai thuật toán trên MATLAB 29

1.3.2 Kết quả trên một vài tập dataset 31

2 Phương pháp triển khai trên FPGA 32

2.1 Sơ đồ khối Gaussian pyramid decomposition 32

2.2 Sơ đồ khối LEP filter & saliency extraction 33

2.3 Sơ đồ khối tổng quan của hệ thống 35

PHẦN IV TRIỂN KHAI THUẬT TOÁN TRÊN FPGA 37

1 Tổng quan về công cụ Altera DSP Builder 37

2 Triển khai 39

2.1 IP Core Convolution 39

2.2 IP Core Gaussian Pyramid Decomposition 42

2.3 IP Core LEP filter & Saliency extraction 45

Trang 3

DANH MỤC BẢNG

Bảng 01: Avalon Video Streaming Interface Signals 15

Bảng 02: So sánh tài nguyên FPGA trên DE2i-150 và DE1-SoC 20

Bảng 03: Video thử nghiệm hai thuật toán Fusion trên KIT DE2i-150 74

Bảng 04: Video thử nghiệm hai thuật toán Fusion trên KIT DE1-SoC 74

Bảng 05: So sánh tài nguyên sử dụng giữa hai thuật toán Fusion 75

Bảng 06: So sánh thời gian tính toán, công suất giữa FPGA và CPU 76

Trang 4

DANH MỤC HÌNH VẼ

Hình 01: Avalon Switch Fabric 13

Hình 02: Avalon Video Streaming Interface 14

Hình 03: Avalon Streaming Interface Signals Waveform 15

Hình 04: Avalon Streaming Interface IP Design Example 16

Hình 05: DE2i-150 Block Diagram 18

Hình 11: Image input and kernel matrix 22

Hình 12: Line buffer example 23

Hình 13: Line buffer progress states 23

Hình 14: Gaussian Pyramid 24

Hình 15: Kết quả thuật toán Gaussian pyramid decomposition trên MATLAB 27

Hình 16: Kết quả thuật toán LEP filter & Saliency extraction trên MATLAB 32

Hình 17: Sơ đồ khối tổng quan Gaussian pyramid decomposition 33

Hình 18: Sơ đồ khối tổng quan LEP filter và saliency extraction 33

Hình 19: Sơ đồ tổng quan khối LEP filter 34

Hình 20: Sơ đồ tổng quan khối tính trọng số 34

Hình 21: Sơ đồ tổng quan khối combine 35

Hình 22: Sơ đồ tổng quan hệ thống hoàn chỉnh 35

Hình 23: Công cụ Altera DSP Builder trên môi trường Simulink 37

Hình 24: Một vài IP Core sẵn có trên Altera DSP Builder 38

Hình 25: Cấu hình các tham số bộ nhân trên Altera DSP Builder 38

Hình 26: Gaussian Filter block-diagram 39

Hình 27: Giao diện generate mã nguồn VHDL 42

Hình 28: Gaussian Pyramid Decomposition block diagram 43

Hình 29: LEP filter & Saliency extraction block diagram 46

Hình 30: Ảnh đầu vào và đầu ra sau khi nhân chập 60

Trang 5

Hình 31: Khối Delay/Memory Delay 60

Hình 32: Các tham số cấu hình của khối Delay/Memory Delay 61

Hình 33: Khối multiplier hai đầu vào a, b 61

Hình 34: Các tham số cấu hình của khối Multiplier/Product 61

Hình 35: Khối Gain nhân đầu vào với một hằng số 62

Hình 36: Khối Parallel Adder/Subtractor 62

Hình 37: Các tham số khối Parallel Adder/Subtractor 62

Hình 38: Khối Dual-Port RAM 63

Hình 39: Các tham số khối Dual-Port RAM 63

Hình 40: Khối FIFO và các tham số cấu hình 64

Hình 41: Khối Comparator 64

Hình 42: Khối Constant 64

Hình 43: Khối Counter và các tham số cấu hình 65

Hình 44: Khối Multiplexer 65

Hình 45: Khối Logical Bit Operator 66

Hình 46: Khối Bus Concatenation 66

Hình 47: Khối Binary Point Casting 66

Hình 48: Khối Bus Conversion 67

Hình 49: Khối Extract Bit 67

Hình 50: Khối HDL Import 67

Hình 51: Sơ đồ ghép nối IP Core trên DE2i-150 69

Hình 52: Sơ đồ ghép nối IP Core trên DE1-SoC 70

Hình 53: Kết quả trên tập dataset TRI_A3 72

Hình 54: Kết quả trên tập dataset TRI_B1 73

Hình 55: Kết quả trên tập dataset TRI_B4 74

Hình 56: So sánh kết quả các thuật toán Fusion khác nhau 75

Trang 6

DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ

1 IP Core

Intellectual Property, lõi IP được xây dựng nhằm thực hiện một thao tác xử lý hay một thuật toán nào đó trên FPGA/ASIC

2 System on Chip (SoC)

Hệ thống mạch tích hợp bao gồm tất cả các thành phần cần thiết được tích hợp trên 1 chip (IC – Integrated Circuit) duy nhất Các thành phần này có thể bao gồm mạch số (digital), mạch analog và sự pha trộn giữa hai mạch này (mixed-signal)

3 Avalon Video Streaming Interface

Giao thức thường được sử dụng phổ biến trong các Altera IP Core dùng cho xử lý tín hiệu, xử lý ảnh, video, với đặc điểm là truyền dữ liệu theo một chiều từ source -> sink và không quan tâm đến địa chỉ dữ liệu

4 Fusion

Thuật toán kết hợp dữ liệu quan trọng từ hai hay nhiều ảnh đầu vào để tạo nên một ảnh duy nhất có đầy đủ thông tin

5 Convolution Phép toán nhân chập ảnh với một kernel matrix nào đó, còn được gọi là phép lọc ảnh

6 Gaussian Pyramid

Một chuỗi ảnh được sắp xếp theo các mức (level) liên tiếp, trong đó ảnh mức sau là ảnh mức trước với kích thước mỗi chiều giảm đi một nửa rồi đem nhân chập với Gaussian kernel, với mức 0 là ảnh gốc

7 Laplacian Pyramid

Được tính toán từ Gaussian Pyramid bằng cách lấy ảnh ở 2 mức (level) liên tiếp trừ cho nhau, do 2 ảnh trên 2 mức có kích thước khác nhau nên cần thực hiện expand ảnh ở mức cao hơn về kích thước ảnh ở mức thấp hơn trước khi thực hiện

Trang 7

phép trừ 8 Local edge-preserving (LEP

Trang 8

PHẦN I: AVALON INTERFACES

FPGA là viết tắt của thuật ngữ tiếng anh “Field Programmable Gate Array”, dịch nôm na có nghĩa là mảng các cổng logic có thể lập trình được Altera là một trong những nhà sản xuất, chế tạo FPGA lớn trên thế giới, và hiện nay đã được bán lại cho Intel Tuy nhiên, FPGA của hãng Intel (Altera) vẫn được sử dụng rất phổ biến trên thị trường Đi cùng với sản phẩm phần cứng, hãng cũng cung cấp sẵn các công cụ cần thiết cho việc thiết kế, triển khai, debug… và đặc biệt là hỗ trợ sẵn một loạt các IP Core quan trọng, có thể kể đến như bộ vi xử lý mềm (soft processor) Nios II, các interface controller giao tiếp với SDRAM, Ethernet, giao tiếp PCIe, DMA, Scatter-Gather DMA Tất nhiên các IP Core có sẵn đó được thiết kế dựa trên một chuẩn interface thống nhất được gọi là Avalon, giúp chúng ta có thể ghép nối thành một hệ thống hoàn chỉnh một cách dễ dàng Hiển nhiên trong các bài toán thực tế, ta cũng cần tự xây dựng các IP Core mới cho riêng mình nếu chúng chưa có sẵn, và việc tạo IP Core theo chuẩn Avalon giúp ta nhanh chóng ghép nối vào hệ thống hơn là một chuẩn nào đó khác tự định nghĩa Ví dụ như hình vẽ bên dưới, ta có thể xây dựng Custom Logic rồi ghép nối vào hệ thống đầy đủ từ vi xử lý đến các ngoại vi bên ngoài, Avalon Switch Fabric được tự động sinh ra bởi công cụ Altera Quartus với chức năng quản lý, hỗ trợ liên kết nối giữa một/nhiều Avalon Master với một/nhiều Avalon Slave Như vậy, tuân theo chuẩn Avalon interface giúp ta có thể tái sử dụng các IP Core rất quan trọng có sẵn bởi hãng sản xuất Các tín hiệu trong Avalon interface đều có ý nghĩa cụ thể, rõ ràng và có thể được tiếp cận bởi người thiết kế trong thời gian ngắn

Hình 1: Avalon Switch Fabric

Trang 9

1 Giới thiệu Avalon Interfaces

Tài liệu Avalon Interface Specifications của Intel cung cấp thông tin chi tiết về 7 interface bao gồm:

- Avalon Streaming Interface (Avalon-ST): truyền dữ liệu theo một chiều, không quan tâm đến địa chỉ dữ liệu, thường là dữ liệu ảnh, video, các tín hiệu số…

- Avalon Memory Mapped Interface (Avalon-MM): đọc/ghi dữ liệu dựa trên địa chỉ, thường dùng để đọc ghi các thanh ghi điều khiển/trạng thái hoặc các vùng nhớ như RAM, ROM…

- Avalon Interrupt Interface: tín hiệu ngắt để điều khiển các module khác - Avalon Clock Interface: tín hiệu clock

- Avalon Reset Interface: tín hiệu reset

- Avalon Conduit Interface: tín hiệu hoặc nhóm các tín hiệu không nằm trong các interface bên trên, thường là các tín hiệu riêng biệt dùng để ghép nối với các tín hiệu từ IP Core khác

- Avalon Tri-state Conduit Interface: tín hiệu kết nối tới các ngoại vi bên ngoài FPGA (input hoặc output)

2 Avalon Streaming/Video Streaming Interface

- Avalon Video Streaming là interface được sử dụng trong các IP Core xử lý dữ liệu ảnh/video được cung cấp sẵn bởi Intel Do vậy để sử dụng cũng như thiết kế các IP Core xử lý số cho FPGA Intel cần tìm hiểu rõ interface này

- Các tín hiệu được sử dụng trong Avalon Video Streaming Interface:

Hình 2: Avalon Video Streaming Interface

Trang 10

+ Dữ liệu truyền theo một chiều từ bên Source -> Sink

+ Không có bus thông tin địa chỉ (address), luồng dữ liệu được truyền một cách liên tục giữa 2 bên Source và Sink

- Ý nghĩa của các tín hiệu:

valid Báo hiệu dữ liệu đang truyền là hợp lệ

ready Báo hiệu trạng thái có thể nhận dữ liệu hay không Bảng 1: Avalon Video Streaming Interface Signals

- Ví dụ về quá trình truyền dữ liệu theo đặc tả Avalon Video Streaming:

Hình 3: Avalon Streaming Interface Signals Waveform - Nhận xét:

Trang 11

+ Tín hiệu startofpacket ở mức cao trong 1 chu kỳ duy nhất ứng với gói dữ liệu đầu tiên

+ Tín hiệu endofpacket ở mức cao trong 1 chu kỳ duy nhất ứng với gói dữ liệu cuối cùng

+ Tín hiệu valid ở mức cao trong khi bên gửi (Source) đang gửi ra dữ liệu

+ Tín hiệu ready ở mức cao trong khi bên nhận (Sink) có thể nhận dữ liệu, tín hiệu này có độ trễ là 1 chu kỳ, nên sau khi bên nhận (Sink) có ready ở mức cao, thì 1 chu kỳ sau tín hiệu valid từ bên gửi (Source) mới ở mức cao, tương tự khi bên nhận (Sink) chuyển trạng thái ready sang mức thấp

- Trong công cụ Qsys, khi tự tạo thêm các IP Core tự thiết kế, ta có thể sắp xếp, định nghĩa các interface tương ứng với ý nghĩa của nó:

Hình 4: Avalon Streaming Interface IP Design Example

Trang 12

- Với IP Core được thiết kế như trên, có thể thấy bao gồm các loại Avalon Interface sau đây:

+ Avalon Streaming Interface: data1_sink và data2_sink (tương ứng hai đầu vào) và data_source (đầu ra)

+ Avalon Clock Interface: clock + Avalon Reset Interface: reset

IP Core thực hiện xử lý tính toán với đầu vào là Avalon Video Streaming và đầu ra cũng là Avalon Video Streaming Ở mục 3 & 4 sẽ nói chi tiết về thuật toán nằm bên trong IP Core này

Trang 13

PHẦN II BOARD DE2i-150 và DE1-SoC

Phần triển khai thuật toán Fusion phía sau sẽ được thử nghiệm thực tế trên hai KIT DE2i-150 và DE1-SoC để đánh giá mức độ ảnh hưởng của hiệu suất phần cứng cũng như mức độ tiêu tốn tài nguyên của thuật toán Dưới đây sẽ giới thiệu về từng board và so sánh tài nguyên FPGA giữa chúng

1 DE2i-150

Hình 5: DE2i-150 Block Diagram

- DE2i-150 được xây dựng dựa trên kiến trúc nền tảng kết hợp giữa bộ xử lý Intel CPU N2600 với Altera Cyclone IV GX FPGA, được kết nối với nhau qua hai đường bus PCIe Gen1 x1 Kit được tích hợp FPGA với gần 150K phần tử logic và khả năng kết nối với rất nhiều ngoại vi bên ngoài: Video In/Out, Ethernet, TV Decoder, HSMC…

Trang 14

Hình 6: DE2i-150 Board

2 DE1-SoC

Hình 7: DE1-SoC Block Diagram

- DE1-SoC Development Kit được xây dựng trên nền tảng Altera on-Chip (SoC) FPGA Ngoài các phần từ logic khả cấu hình, Cyclone V còn

Trang 15

System-được tích hợp sẵn ARM-based hard processor system (HPS) chứa bộ vi xử lý, các interface giao tiếp ngoại vi bên ngoài và memory… HPS và FPGA được kết nối với nhau qua các high-bandwidth interconnect backbone, do vậy tốc độ truyền dữ liệu qua lại rất cao Kit cũng chứa đầy đủ các thành phần từ bộ nhớ DDR3 high-speed, Video in/out, Ethernet, ADC…

Hình 8: DE1-SoC Board

3 So sánh

- So sánh tài nguyên trên FPGA giữa 2 board:

DE2i-150 (Cyclone IV EP4CGX150DF31)

DE1-SoC (Cyclone V SoC 5CSEMA5F31C6)

N2600 1.6GHz

Dual-core ARM Cortex-A9 800 MHz

Trang 16

PHẦN III THUẬT TOÁN FUSION

Fusion là phương pháp nhằm kết hợp dữ liệu quan trọng từ hai hay nhiều ảnh đầu vào để tạo nên một ảnh duy nhất có đầy đủ thông tin và hữu ích Ảnh fusion được ứng dụng rộng rãi trong nhiều lĩnh vực như: robot thông minh, camera giám sát an ninh, ảnh y tế, hệ thống giám sát quy trình sản xuất…

- Khi đó, để thực hiện một phép biến đổi hay dò tìm đặc trưng trên ảnh, chúng ta chỉ cần tiến hành “nhân chập” ảnh đầu vào với một ma trận hay cửa sổ nhân chập gọi là “kernel” Toàn bộ các pixel trên ảnh sẽ được tiến hành nhân chập với cửa sổ nhân chập (tâm của cửa sổ nhân chập sẽ được đặt trùng vào vị trí của pixel đang được tính nhân chập), làm thay đổi giá trị của pixel ban đầu

- Dưới đây là công thức tính nhân chập:

Trang 17

𝒀(𝒎, 𝒏) = 𝑿(𝒎, 𝒏) ∗ 𝑯(𝒌, 𝒍) = 𝑿(𝒎 − 𝒌, 𝒏 − 𝒍)𝑯(𝒌, 𝒍)

(1)

- Trong đó:

+ X(m,n) là ma trận ban đầu của ảnh kích thước mxn

+ H(k,l) là ma trận hạt nhân của phép nhân chập hay còn gọi là mặt nạ + Y(m,n) là ma trận đầu ra của phép nhân chập giữa X và H

Hình 10: Line buffer

- Trên FPGA, IP Core thực hiện convolution nhận vào các pixel lần lượt theo chiều từ trái sang phải, từ trên xuống dưới, do vậy cần line buffer đóng vai trò lưu trữ lại các pixel để thực hiện nhân chập, ví dụ: ảnh đầu vào có kích thước 640x480 và kernel có kích thước 3x3, đến khi pixel hàng 3 cột 3 được đưa vào thì phép nhân chập mới hoàn thành xong cho pixel đầu tiên ảnh đầu ra

Trang 18

- Ví dụ line buffer với ảnh đầu vào 5x5 như dưới đây:

- Với kernel kích thước 3x3, line buffer cần có kích thước như dưới đây:

Hình 12: Line buffer example *** Trạng thái line buffer lần lượt từ pixel đầu tiên:

(Pixel đầu vào đầu tiên) (Pixel đầu vào thứ hai)

(Tính xong pixel đầu ra đầu tiên) (Tính xong pixel đầu ra thứ hai)

Hình 13: Line buffer progress states

Trang 19

1.2 Gaussian Pyramid Decomposition

Hình 14: Gaussian Pyramid

- Phương pháp dùng Gaussian Pyramid dựa trên ý tưởng biểu diễn ảnh dưới nhiều độ phân giải (multi-resolution) tương ứng với các tỷ lệ (scale) khác nhau, khái niệm pyramid ở đây bao gồm một chuỗi ảnh, trừ ảnh ở level 0 là ảnh gốc thì các ảnh phía sau có được bằng cách lấy ảnh ở mức trước đó down-sample một hệ số bằng 2 (hay kích thước mỗi chiều giảm đi một nửa) rồi áp dụng bộ lọc Gaussian (kích thước 5x5):

𝑮𝒌= 𝝎(𝒎, 𝒏)𝑮𝒌 𝟏(𝟐𝒊 + 𝒎, 𝟐𝒋 + 𝒏)

𝒏𝟐𝟐

Trang 20

- Laplacian Pyramid thu được bằng phép trừ ảnh trừ hai level liên tiếp của Gaussian Pyramid, vì ảnh ở hai level liên tiếp đó có kích thước khác nhau, nên để trừ được ta cần thực hiện up-sample lại để có sự tương đồng về mặt kích thước:

- Để thực hiện thuật toán Fusion với đầu vào là hai ảnh thu được từ camera thường và camera nhiệt, ta thực hiện tính toán Laplacian Pyramid trên ảnh nhiệt, expand lại nếu kích thước ảnh trên các level nhỏ hơn ảnh gốc về lại kích thước ban đầu rồi cộng với ảnh từ camera thường đầu vào

- Khi triển khai trên FPGA, thay vì việc xây dựng các IP Core để thực hiện các thao tác REDUCE, EXPAND, ta áp dụng thuật toán àtrous để đơn giản hóa các thao tác về phép nhân chập (convolution) thông thường nhưng với bộ lọc Gaussian được chèn vào các hàng, các cột có giá trị 0 Như vậy với level đầu tiên Gaussian kernel có kích thước gốc là 5x5, level tiếp theo có kích thước 9x9 (vì chèn thêm vào giữa các hàng, cột ban đầu một hàng, một cột chỉ chứa giá trị 0), tiếp theo nữa là 17x17… Thuật toán àtrous giúp tránh được việc down-sample với mỗi level trên Gaussian Pyramid trước khi thực hiện nhân chập, đồng thời vì ảnh đầu ra có kích thước giống với ảnh đầu vào nên thao tác up-sample khi kết hợp thông tin cũng có thể được bỏ qua

- Sau khi tính toán xong Laplacian Pyramid với ảnh nhiệt, thực hiện cộng các level với ảnh camera thường đầu vào, ta thu được ảnh Fusion đầu ra

1.2.1 Triển khai thuật toán trên MATLAB

- Dưới đây là mã nguồn cài đặt thử nghiệm thuật toán trên MATLAB: % clearvars; close all; clc

% Thư mục dataset

folder = '/home/tunglt/Fusion/TRI_A3/frames';imagefiles = dir(fullfile(folder, '*.bmp'));

% Hiển thị ảnh kết quả trong quá trình tính toán

figure;

% Lưu lại video đầu ra

v = VideoWriter('ADWT_A3.avi');open(v);

% Duyệt từng ảnh trong tập dataset

for n = 1:length(imagefiles)

currentfile = imagefiles(n).name; % Đọc ảnh

Trang 21

img = imread(fullfile(folder, currentfile)); % Ảnh thường

vis = cast(img(:,:,1), 'double'); % Ảnh nhiệt

ir = cast(img(:,:,3), 'double');

% Tạo Laplacian pyramid với 3 level

level = 3;

w = zeros([size(ir), level]); p = zeros([size(ir), level]); % Khởi tạo ảnh đầu ra là ảnh thường

imOut = vis; for i = 1:level

% Chèn 0 vào giữa các hàng, cột để mở rộng kích thước % bộ lọc từ 5x5 ra thành 9x9 và 17x17

a = zeros(2^(i-1)*(size(h)-1)+1); a(1:2^(i-1):end, 1:2^(i-1):end) = h; % Nhân chập ảnh nhiệt với bộ lọc Gaussian

p(:,:,i) = filter2(a, ir, 'same'); % Trừ ảnh đầu vào với ảnh đầu ra

w(:,:,i) = ir - p(:,:,i);

% Ảnh sau nhân chập là đầu vào cho tính toán Laplacian % pyramid ở mức kế tiếp

ir = p(:,:,i);

% Cộng hiệu số với ảnh thường để tạo ảnh fusion

imOut = imOut + w(:,:,i); end

% Hiển thị ảnh đầu ra

out = uint8(imOut); imshow(out);

Trang 22

1.2.2 Kết quả trên một vài tập dataset

- Dưới đây là kết quả khi chạy thử nghiệm mã nguồn đã trình bày trên MATLAB:

Hình 15: Kết quả thuật toán Gaussian pyramid decomposition trên MATLAB

1.3 LEP filter và Saliency extraction

- LEP Filter (local edge-preserving) có tác dụng làm trơn ảnh ngoại trừ các cạnh Ký hiệu I là ảnh đầu vào và B là ảnh được làm trơn B thu được từ I bằng cách tối ưu hóa công thức (5):

Trang 23

𝐦𝐢𝐧: (𝑰𝒊− 𝑩𝒊)𝟐+ 𝜶|𝛁𝑰𝒊|𝜷𝒊 ∈ 𝝎

Trong đó:

+ 𝜔 là vùng cửa sổ áp dụng bộ lọc LEP +

|∇ | là hệ số cân bằng hai đại lượng

+ 𝛽 xác định độ nhạy (sensitivity) đối với gradient của ảnh + 𝛼 là tham số tự do

- Ý nghĩa: nếu giá trị gradient của I lớn (tại các cạnh), hệ số

|∇ | sẽ có giá trị nhỏ, và B sẽ tương tự với I tại các vị trí đó, do vậy các cạnh sẽ được giữ lại Ngược lại, nếu giá trị gradient của I nhỏ, hệ số

|∇ | sẽ có giá trị lớn, đại lượng thứ hai trong công thức sẽ được tối ưu, tạo ra ảnh B được làm trơn Giả sử B được biểu diễn theo công thức (6):

- Với 𝑎 và 𝑏 là các hệ số hằng trong cửa sổ 𝜔 Thay thế B trong công thức (5) bởi công thức (6) và theo quy tắc đạo hàm hàm hợp ta có:

(𝑰𝒊− 𝒂𝝎𝑰𝒊− 𝒃𝝎)𝟐+ 𝜶|𝛁𝑰𝒊|𝟐 𝜷𝒊 ∈ 𝝎

Trang 24

Trong đó Ω là một vùng ảnh, 𝑎 là trung bình của 𝑎 trong cửa sổ lân cận, tương tự 𝑏

- Saliency extraction dùng cho việc tính toán trọng số để kết hợp thông tin hai ảnh từ camera thường và camera nhiệt với ý nghĩa trên ảnh nhiệt, điểm ảnh có giá trị càng lớn thì có trọng số càng cao (áp dụng với ảnh nhiệt white-hot, có thể áp dụng tương tự với ảnh black-hot) Công thức tính toán trọng số cho điểm ảnh có giá trị 𝑎 của ảnh nhiệt như sau:

kết hợp dựa trên công thức:

𝑩𝒇 = 𝑩𝒊𝒓 𝑺𝒊𝒓+ 𝑩𝒗𝒊 (𝟏 − 𝑺𝒊𝒓), (12) Trong đó:

- Dưới đây là mã nguồn cài đặt thử nghiệm thuật toán trên MATLAB:

clearvars; close all; clc

% Hiển thị ảnh kết quả trong quá trình tính toán

Trang 25

figure;

% Lưu lại video đầu ra

v = VideoWriter('Saliency_v1.avi');open(v);

% Duyệt từng ảnh trong dataset

% Saliency extraction, tính các hệ số để kết hợp hai ảnh % Tham khảo công thức (10)

% Tính histogram của ảnh nhiệt

histo = imhist(uint8(ir))/numel(ir); graylevel = (0:255)';

% Tính ảnh kết hợp từ hai ảnh theo công thức (12)

imOut = weight_ir.*p_ir + (1 - weight_ir).*p_vis; out = uint8(ir);

Trang 26

function [B, meana, varI] = localedgepreserve(A, filtSize, alpha, beta)

corrI = imfilter(A.*A, meanFilter, 'replicate');

% Tính gradient và trung bình gradient

gradI = imgradient(A, 'Sobel');

meanG = imfilter(gradI.^(2 - beta), meanFilter, 'replicate');

1.3.2 Kết quả trên một vài tập dataset

- Dưới đây là kết quả khi chạy thử nghiệm mã nguồn đã trình bày trên MATLAB:

Trang 27

Hình 16: Kết quả thuật toán LEP filter & Saliency extraction trên MATLAB

2 Phương pháp triển khai trên FPGA

- Các IP Core đều được xây dựng tương thích với chuẩn Avalon Video Streaming Interface Việc xây dựng IP Core với chuẩn đầu vào/ra này có nhiều lợi ích như: + Đơn giản, dễ triển khai vì dữ liệu truyền theo một chiều từ Source -> Sink, không quan tâm đến địa chỉ dữ liệu

+ Intel (Altera) hỗ trợ sẵn rất nhiều IP Core xử lý ảnh/video, đọc ghi bộ nhớ RAM, hiển thị VGA… tương thích với chuẩn Avalon, ta có thể dùng trực tiếp những IP Core đó trong hệ thống tổng thể triển khai trên board thực tế về sau

- IP Core thực hiện thuật toán Fusion sẽ bao gồm 2 đầu vào Avalon Video Streaming Sink và 1 đầu ra Avalon Video Streaming Source

2.1 Sơ đồ khối Gaussian pyramid decomposition

- Dưới đây là sơ đồ theo thuật toán Gaussian pyramid decomposition tương ứng với mã nguồn đã trình bày trong phần 1.2.1 sẽ thiết kế trên FPGA:

Trang 28

Hình 17: Sơ đồ khối tổng quan Gaussian pyramid decomposition

- Các khối Gaussian 5x5, Gaussian 9x9, Gaussian 17x17 thực hiện nhân chập Gaussian với kích thước tương ứng

- Ảnh đầu ra của các khối nhân chập được trừ đi từ ảnh đầu vào, và cộng với ảnh thường để tạo ảnh fusion

- Các khối nhân chập hoạt động đồng thời, các pixel được đưa vào tuần tự và liên tục từ đầu vào tới đầu ra

2.2 Sơ đồ khối LEP filter & saliency extraction

- Dưới đây là sơ đồ theo thuật toán LEP filter và saliency extraction sẽ thiết kế:

Hình 18: Sơ đồ khối tổng quan LEP filter và saliency extraction

Trang 29

- Khối LEP filter bao gồm:

Hình 19: Sơ đồ tổng quan khối LEP filter - Khối tính trọng số 𝑆(𝑎 ):

+ Ta tạo hai bộ nhớ RAM, mỗi cái gồm 256 ô nhớ (ảnh 8 bit tương đương 256 mức xám từ 0 đến 255) để tính toán histogram và tính các trọng số được chuẩn hóa về [0 1] dùng để tạo ảnh fusion về sau:

Hình 20: Sơ đồ tổng quan khối tính trọng số - Khối combine:

+ Ảnh thường và ảnh nhiệt sau LEP filter được đưa vào khối kết hợp để tạo ảnh Fusion đầu ra dựa trên trọng số đã tính toán

Trang 30

Hình 21: Sơ đồ tổng quan khối combine

2.3 Sơ đồ khối tổng quan của hệ thống

- Dưới đây là sơ đồ ghép nối giữa IP Core Fusion và các module khác trên hệ thống hoàn chỉnh cuối cùng chạy trên board DE2i-150 để thử nghiệm Với board DE1-SoC hoàn toàn tương tự vì nhìn chung cả hai đều theo kiến trúc SoC, nhưng thay vì bus PCIe như DE2i-150, DE1-SoC có hệ thống bus high-bandwidth interconnect backbone tốc độ cao giữa FPGA và HPS

- Sơ đồ tổng quan hệ thống hoàn chỉnh:

Hình 22: Sơ đồ tổng quan hệ thống hoàn chỉnh

Trang 31

- IP Core IP Compiler PCIe thực hiện theo chuẩn giao thức PCIe để truyền dữ liệu qua lại giữa CPU và FPGA, các Base Address Register (BAR1, BAR2) được dùng để ghép nối với bus điều khiển của các IP Core khác và từ đó CPU có thể điều khiển các IP Core này bằng cách đọc/ghi giá trị các thanh ghi qua bus PCIe

- Hai ảnh đầu vào được gửi từ RAM (HPS/CPU) qua đường bus PCIe Gen1 x1 đến hai vùng nhớ khác nhau trên SDRAM, IP Core Scatter-Gather DMA trên FPGA nhận lệnh từ CPU để làm nhiệm vụ truyền dữ liệu này

- Các IP Core Video DMA có hai mode: Memory To Avalon-ST (mode 1) hoặc Avalon-ST To Memory (mode 2), để đọc dữ liệu từ SDRAM, ta cấu hình mode 1, dữ liệu sẽ được gửi ra theo đúng giao thức Avalon Video Streaming Source, ngược lại để ghi dữ liệu ra SDRAM, ta cấu hình mode 2

- IP Core Clipper làm nhiệm vụ padding ảnh đầu vào giá trị 0 xung quanh viền ảnh, ta thêm vào IP Core này vì trong quá trình thực hiện nhân chập kích thước ảnh sẽ bị giảm đi, ta cần giữ lại theo đúng chuẩn 640x480 để hiển thị ra VGA

- Khối hiển thị VGA bao gồm hai IP Core là Frame Reader và Clocked Video Output Frame Reader đọc ảnh từ SDRAM và gửi ra theo giao thức Avalon Video Streaming Source cho IP Core Clocked Video Output để tạo các tín hiệu đầu ra VGA theo đúng chuẩn, bao gồm các tín hiệu: R, G, B, HSync, VSync

- Ở phần sau, ta sẽ nói về cơ chế thêm vào một switch để chuyển đổi hình ảnh hiển thị đầu ra trên màn hình VGA theo cơ chế polling, cho phép người dùng lựa chọn hiển thị kết quả của hoặc thuật toán Fusion thứ nhất hoặc của thuật toán Fusion thứ hai

Trang 32

PHẦN IV TRIỂN KHAI THUẬT TOÁN TRÊN FPGA

1 Tổng quan về công cụ Altera DSP Builder

Hình 23: Công cụ Altera DSP Builder trên môi trường Simulink

- Công cụ Altera DSP Builder được tích hợp trực tiếp vào môi trường Simulink trên MATLAB, tạo ra khả năng triển khai thiết kế FPGA theo mô hình sơ đồ khối (block-diagram) Hơn nữa, việc kiểm thử thiết kế được thực hiện trực tiếp trong môi trường MATLAB, ta có thể viết chương trình trên MATLAB để tạo dữ liệu đầu vào và kiểm tra dữ liệu đầu ra, áp dụng các hàm được xây dựng sẵn trên MATLAB để xử lý và hiển thị dữ liệu, hoặc sử dụng module Scope trong Simulink

- Bên cạnh đó, công cụ cung cấp sẵn các phần tử và IP Core cơ bản được tối ưu riêng cho Altera FPGA, từ bộ mux, demux, delay, dịch bit, so sánh tới các phần tử phức tạp hơn như counter, multiplier, adder, RAM, ROM…

- Với từng IP Core, ta có thể cấu hình các tham số để tối ưu nhất với từng thiết kế và thuật toán cụ thể

- Công cụ cho phép thêm (import) các IP Core khác được xây dựng bằng ngôn ngữ HDL vào để sử dụng trong thiết kế

Trang 33

- Hiện tại, công cụ chỉ hỗ trợ generate ra mã nguồn VHDL hoặc SystemVerilog Các thông tin về tài nguyên, khả năng đáp ứng điều kiện timing của thiết kế cũng được đưa ra trong quá trình generate

Hình 24: Một vài IP Core sẵn có trên Altera DSP Builder

Trang 34

Hình 26a: Sơ đồ mức top của GaussianFilter

- Bên trong khối GaussianFilter bao gồm các khối khác, LineBuffer thực hiện lưu trữ các pixel để thực hiện nhân chập, MultiplierAccumulator thực hiện nhân, cộng các pixel, GenerateSignals tạo các tín hiệu theo chuẩn Avalon Video Streaming:

Trang 35

Hình 26b: Sơ đồ bên trong của GaussianFilter- Bên trong khối LineBuffer:

Hình 26c: Sơ đồ bên trong của LineBuffer

Trang 36

Hình 26d: Sơ đồ bên trong của Multiplier Accumulator (Các hệ số trong Gaussian Kernel 5x5)

*** Với các phép nhân với số dạng 2 , ta thay thế bằng phép dịch trái, làm như vậy giúp tiết kiệm tài nguyên trên FPGA

- Bên trong khối GenerateSignals:

Hình 26e: Sơ đồ bên trong của GenerateSignals

- Để generate ra mã VHDL, click đúp vào biểu tượng , lựa chọn dòng chip FPGA đang sử dụng, và nhấn Compile Sau đó chương trình sẽ chạy và hiển thị một vài thông số về timing:

Ngày đăng: 16/05/2024, 14:28

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan