Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 125 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
125
Dung lượng
2,19 MB
Nội dung
giáo dục đào tạo trờng đại học bách khoa hà nội - L£ THÕ THANH Nghiªn cøu vỊ xử lý ảnh FPGA Chuyên ngành: điện tử viễn thông luận văn thạc sĩ KHOA Học Ngời hớng dẫn khoa học : TS Phạm Ngọc Nam Hà Nội - 2010 LỜI GIỚI THIỆU Trong năm gần đây, nhu cầu xử lý ảnh số phát triển mạnh mẽ Các hệ thống xử lý ảnh số đươc triển khai rộng khắp công cụ đắc lực không cho quan đoàn thể mà cho cá nhân nhiều lĩnh vực khác Hiện nay, với phát triển cơng nghệ máy tính số, công nghệ xử lý ảnh số dễ dàng trực tiếp nhiều phần mềm chuyên dụng máy tính Tuy nhiên, việc xử lý ảnh số máy tính gặp nhiều vấn đề mặt giá thành, kích thước khối lượng Mục đích luận văn nghiên cứu ứng dụng cơng nghệ mạch tích hợp logic khả trình FPGA để thực xử lý ảnh số trực tiếp phần cứng với nhiều ưu điểm vượt trội mà cho kết giống việc xử lý phần mềm chuyên dụng Tác giả xin chân thành cám ơn TS Phạm Ngọc Nam, Bộ môn Kỹ thuật Điện tử tin học, Khoa Điện tử viễn thông, tận tình hướng dẫn, trao đổi kinh nghiệm ý kiến quý báu Xin gửi lời cám ơn tới Thầy, Cô Khoa Điện tử viễn thông, tới gia đình, bạn bè giúp đỡ tạo điều kiện để tác giả hồn thành luận văn khóa học Cuối cùng, phải nói dù cố gắng, không tránh khỏi sai sót q trình thực luận văn Nhưng tác giả ln ý thức rằng, sai sót hội cho tác giả rèn luyện kỹ năng, khắc phục nhược điểm Đó tất nhờ theo dõi, hướng dẫn, phản biện tận tình nghiêm túc thầy, cô hội đồng bảo vệ Xin chân thành cảm ơn! Hà Nội, ngày 20 tháng 04 năm 2010 Tác giả I Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 MỤC LỤC LỜI GIỚI THIỆU I TÓM TẮT II MỤC LỤC DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ PHẦN MỞ ĐẦU PHẦN I - CƠ SỞ LÝ THUYẾT XỬ LÝ ẢNH SỐ 1.1 Một số khái niệm xử lý ảnh số 1.1.1 Phần tử ảnh - Pixel 1.1.2 Pixel lân cận 1.1.3 Đường liên kết 1.1.4 Mức xám 1.2 Tổng quan hệ thống xử lý ảnh số 1.2.1 Thu thập ảnh 11 1.2.2 Tiền xử lý ảnh: 12 1.2.3 Phân vùng ảnh: 13 1.2.4 Phân tích ảnh: 13 1.2.5 Nhận dạng ảnh: 13 1.3 Các thành phần hệ thống xử lý ảnh: 14 1.4 Các thuật toán xử lý ảnh số 16 1.4.1 Toán tử cửa sổ (windowing operator) 16 1.4.2 Tăng độ tương phản 16 1.4.3 Nhân chập (convolution) 17 1.4.4 Các lọc 18 1.4.5 Dò biên 22 1.4.6 Phân ngưỡng, phân vùng nhị phân hóa ảnh số 23 1.4.7 Xử lý đồng cấu ảnh nhị phân 25 1.4.8 Bài toán đánh nhãn đối tượng: 26 1.4.9 Xác định đặc trưng hình học đối tượng 28 Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 1.5 Một số giải pháp phần cứng cho hệ thống xử lý ảnh số 29 1.5.1 FPGA 29 1.5.2 DSP Processor 29 1.5.3 Mainboard, laptop 30 PHẦN II - KHÁI QUÁT VỀ FPGA 32 2.1 Giới thiệu chung FPGA ngôn ngữ VHDL 32 2.1.1 Khái niệm ứng dụng FPGA 32 2.1.2 Kiến trúc FPGA 34 2.1.4 Ngôn ngữ mô tả phần cứng VHDL 46 2.3 Giới thiệu hãng Xilinx cơng cụ lập trình: 49 2.3.1 Hãng Xilinx 49 2.3.2 ISE 9.2 49 2.3.3 LogicCore 9.2 50 2.3.4 EDK 9.2 50 2.3.5 System Generator 9.2 50 PHẦN III - THỰC HIỆN XỬ LÝ ẢNH SỐ 52 3.1 Bộ lọc hạng 52 3.1.1 Thực lọc hạng 52 3.1.2 So sánh thuật toán VHDL MATLAB 56 3.2 Xử lý đồng cấu nhị phân 57 3.2 Tích chập 60 3.2.1 Thực thuật tốn tính tích chập 60 3.2.2 So sánh thuật toán VHDL MATLAB 62 KẾT LUẬN 64 TÀI LIỆU THAM KHẢO 66 APPENDIX - VHDL SOURCE FILES 67 Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 DANH MỤC CÁC HÌNH VẼ Hình 1.1: Những kiểu liên kết điểm ảnh Hình 1.2: Những kiểu đường liên kết điểm ảnh Hình 1.3: Các giai đoạn xử lý ảnh 10 Hình 1.4: Các thành phần hệ thống xử lý ảnh 14 Hình 1.5: Ví dụ tích chập 18 Hình 1.6: Kết phép lọc Gaussian với cửa sổ 3x3 21 Hình 1.7: Kết thuật tốn dị biên 23 Hình 1.8: Phân ngưỡng theo lược đồ xám 24 Hình 1.9: Loại bỏ nhiễu khơi phục đối tượng trình làm mảnh làm đầy 26 Hình 1.10: Sơ đồ thuật tốn gán nhãn đối tượng 27 Hình 2.1: Kiến trúc chung FPGA 34 Hình 2.2: Một Logic Block điển hình 35 Hình 2.3: Configurable Logic Blocks 36 Hình 2.4: Programmable Interconnect 37 Hình 2.5: Cấu trúc thành phần Spartan 3A 40 Hình 2.6: Trình tự thiết kế hệ thống FPGA 41 Hình 2.7: Qui trình thiết kế chip dựa VHDL 48 Hình 3.1: Thiết kế phần cứng cho thuật toán xếp 53 Hình 3.2: Cấu trúc thuật tốn lọc hạng VHDL 55 Hình 3.3: Ảnh xử lý lọc hạng có hạng VHDL MATLAB 56 Hình 3.4: So sánh kết xử lý ảnh VHDL MATLAB 57 Hình 3.5: Ảnh xử lý thuật toán làm mảnh VHDL MATLAB 58 Lê Thế Thanh - Điện Tử Viễn Thơng 2007-2009 Hình 3.6: So sánh kết xử lý ảnh VHDL MATLAB 58 Hình 3.7: Ảnh xử lý thuật tốn làm đầy VHDL MATLAB 59 Hình 3.8: So sánh kết xử lý ảnh VHDL MATLAB 59 Hình 3.9: Thiết kế phần cứng cho tích chập 61 Hình 3.10: Cấu trúc thuật tốn VHDL 62 Hình 3.11: Ảnh xử lý tích chập VHDL MATLAB 63 Hình 3.12: So sánh kết xử lý ảnh VHDL MATLAB 63 Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 PHẦN MỞ ĐẦU Xử lý ảnh số lĩnh vực phát triển, có liên quan tới nhiều ngành học hướng nghiên cứu khác Từ năm 1970 mà lực tính tốn máy tính ngày trở nên mạnh mẽ hơn, máy tính lúc xử lý tập liệu lớn hình ảnh, đoạn phim khái niệm kỹ thuật xử lý ảnh số ngày nhắc đến nghiên cứu nhiều ngày Ngày nay, ứng dụng xử lý ảnh số trở nên rộng lớn đa dạng, len lỏi vào lĩnh vực từ quân sự, khoa học, vũ trụ, y học, sản xuất, tự động hóa tịa nhà Xử lý ảnh số có liên quan đến nhiều ngành khác như: hệ thống tin học, lý thuyết thông tin, lý thuyết thống kê, trí tuệ nhân tạo, nhận dạng, v.v Trên sở đó, tác giả lựa chọn luận văn tốt nghiệp “Xử lý ảnh FPGA” với mục đích nghiên cứu vấn đề lĩnh vực xử lý ảnh số Đồng thời, từ kiến thức thu nhận đó, tiến hành thực số thuật toán xử lý ảnh số FPGA (hardware), sau so sánh, đánh giá với ảnh xử lý MATLAB (software) Trong phần luận văn đề cập đến khái niệm hệ thống xử lý ảnh số, ứng dụng thành phần Đồng thời tác giả trình bày sở kiến thức xử lý ảnh số Trong phần trình bày khái niệm chip khả trình FPGA, hãng Xilinx cơng cụ lập trình phát triển hệ thống với FPGA Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 Phần sâu vào thực số thuật toán xử lý ảnh ngơn ngữ lập trình VHDL cho FPGA, so sánh với kết xử lý máy tính MATLAB Và cuối cùng, tác giả tổng kết kết đạt được, ưu điểm, nhược điểm giải pháp, hiệu giải pháp hướng phát triển Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 PHẦN I CƠ SỞ LÝ THUYẾT XỬ LÝ ẢNH SỐ 1.1 Một số khái niệm xử lý ảnh số 1.1.1 Phần tử ảnh - Pixel Ảnh thực tế ảnh liên tục không gian giá trị độ sáng Để xử lý ảnh máy tính cần thiết phải tiến hành số hố ảnh Trong q trình số hố, người ta biến đổi tín hiệu liên tục sang tín hiệu rời rạc thơng qua q trình lấy mẫu (rời rạc hóa khơng gian) lượng hố thành phần giá trị mà thể nguyên tắc mắt thường không phân biệt hai điểm kề Trong trình này, người ta sử dụng khái niệm Picture element mà ta quen gọi hay viết Pixel - phần tử ảnh Ở cần phân biệt khái niệm pixel hay đề cập đến hệ thống đồ hoạ máy tính Để tránh nhầm lẫn ta tạm gọi khái niệm pixel pixel thiết bị Khái niệm pixel thiết bị xem xét sau: ta quan sát hình (trong chế độ đồ hoạ), hình khơng liên tục mà gồm nhiều điểm nhỏ, gọi pixel Mỗi pixel gồm cặp toạ độ x, y màu Cặp toạ độ x, y tạo nên độ phân giải (resolution) Như hình máy tính có nhiều loại với độ phân giải khác nhau: hình CGA có độ phân giải 320 x 200; hình VGA 640 x 350, Như vậy, ảnh tập hợp điểm ảnh Khi số hố, thường biểu diễn bảng hai chiều I(n,p): n dịng p cột Ta nói ảnh gồm n x p pixels Người ta thường kí hiệu I(x,y) để pixel Thường giá trị n chọn p 256 Hình 1.2 cho ta thấy việc Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 biểu diễn ảnh với độ phân giải khác Một pixel lưu trữ 1, 4, hay 24 bit 1.1.2 Pixel lân cận Như biết, khung ảnh mô tả dạng ma trận chiều, phần tử ma trận tương ứng với mức xám điểm ảnh (pixel) Mỗi điểm ảnh có lân cận xung quanh Nếu hiển thị pixel dạng vng, điểm có chung biên với điểm lân cận, có chung góc với điểm lân cận khác Hai điểm lân cận gọi "liên kết 4" chúng có chung biên với nhau, "liên kết 8" chung góc chung biên với a) Liên kết b) Liên kết Hình 1.1: Những kiểu liên kết điểm ảnh 1.1.3 Đường liên kết Đường liên kết đường nối từ pixel [i1, j1] đến pixel, [in, jn], qua chuỗi pixel [i1, j1], [i2, j2], , [ik, jk] , pixel liên kết với pixel trước Ta có đường liên kết liên kết pixel liên kết với Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 - Company: Engineer: - Create Date: 01:20:18 02/23/2010 Design Name: Module Name: ro_filt_3x3 - Behavioral Project Name: Target Devices: Tool versions: Description: - Dependencies: - Revision: Revision 0.01 - File Created Additional Comments: library IEEE; use IEEE.std_logic_1164.all; entity ro_filt_3x3 is generic ( vwidth: integer:=8; order: integer:=4; num_cols: integer:=128; num_rows: integer:=128 ); port ( Clk : in std_logic; 109 Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 RSTn : in std_logic; D : in std_logic_vector(vwidth-1 downto 0); Dout : out std_logic_vector(vwidth-1 downto 0); DV : out std_logic ); end ro_filt_3x3; architecture ro_filt_3x3 of ro_filt_3x3 is component sort_3x3 generic ( vwidth: integer:=8 ); port ( Clk : in std_logic; RSTn : in std_logic; w11 : in std_logic_vector((vwidth-1) downto 0); w12 : in std_logic_vector((vwidth-1) downto 0); w13 : in std_logic_vector((vwidth-1) downto 0); w21 : in std_logic_vector((vwidth-1) downto 0); w22 : in std_logic_vector((vwidth-1) downto 0); w23 : in std_logic_vector((vwidth-1) downto 0); w31 : in std_logic_vector((vwidth-1) downto 0); w32 : in std_logic_vector((vwidth-1) downto 0); w33 : in std_logic_vector((vwidth-1) downto 0); DVw : in std_logic; DVs : out std_logic; s1 : out std_logic_vector(vwidth-1 downto 0); s2 : out std_logic_vector(vwidth-1 downto 0); s3 : out std_logic_vector(vwidth-1 downto 0); s4 : out std_logic_vector(vwidth-1 downto 0); 110 Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 s5 : out std_logic_vector(vwidth-1 downto 0); s6 : out std_logic_vector(vwidth-1 downto 0); s7 : out std_logic_vector(vwidth-1 downto 0); s8 : out std_logic_vector(vwidth-1 downto 0); s9 : out std_logic_vector(vwidth-1 downto 0) ); end component sort_3x3; signal w11: std_logic_vector((vwidth-1) downto 0); signal w12: std_logic_vector((vwidth-1) downto 0); signal w13: std_logic_vector((vwidth-1) downto 0); signal w21: std_logic_vector((vwidth-1) downto 0); signal w22: std_logic_vector((vwidth-1) downto 0); signal w23: std_logic_vector((vwidth-1) downto 0); signal w31: std_logic_vector((vwidth-1) downto 0); signal w32: std_logic_vector((vwidth-1) downto 0); signal w33: std_logic_vector((vwidth-1) downto 0); signal DVw: std_logic; signal DVs: std_logic; signal s1: std_logic_vector(vwidth-1 downto 0); signal s2: std_logic_vector(vwidth-1 downto 0); signal s3: std_logic_vector(vwidth-1 downto 0); signal s4: std_logic_vector(vwidth-1 downto 0); signal s5: std_logic_vector(vwidth-1 downto 0); signal s6: std_logic_vector(vwidth-1 downto 0); signal s7: std_logic_vector(vwidth-1 downto 0); signal s8: std_logic_vector(vwidth-1 downto 0); signal s9: std_logic_vector(vwidth-1 downto 0); component window_3x3 generic ( 111 Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 vwidth: integer:=8 ); port ( Clk : in std_logic; RSTn : in std_logic; D : in std_logic_vector(vwidth-1 downto 0); w11 w12 w13 w21 w22 w23 : out std_logic_vector(vwidth-1 downto 0); : out std_logic_vector(vwidth-1 downto 0); : out std_logic_vector(vwidth-1 downto 0); : out std_logic_vector(vwidth-1 downto 0); : out std_logic_vector(vwidth-1 downto 0); : out std_logic_vector(vwidth-1 downto 0); w31 : out std_logic_vector(vwidth-1 downto 0); w32 : out std_logic_vector(vwidth-1 downto 0); w33 : out std_logic_vector(vwidth-1 downto 0); DV : out std_logic:='0' ); end component window_3x3; component rc_counter generic ( num_cols: integer:=128; num_rows: integer:=128 ); port ( Clk : in std_logic; RSTn : in std_logic; En : in std_logic; ColPos : out integer; RowPos : out integer ); 112 Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 end component rc_counter; signal ColPos: integer:=0; signal RowPos: integer:=0; signal ColPos_c: integer:=0; corrected positions signal RowPos_c: integer:=0; signal rt1: integer:=0; signal rt2: integer:=0; signal rt3: integer:=0; signal rt4: integer:=0; signal rt5: integer:=0; signal rt6: integer:=0; signal rt7: integer:=0; signal rt8: integer:=0; signal rt9: integer:=0; signal rt10: integer:=0; signal rt11: integer:=0; signal rt12: integer:=0; signal rt13: integer:=0; signal rt14: integer:=0; signal rt15: integer:=0; signal rt16: integer:=0; signal flag: std_logic:='0'; begin sort_3x3x: sort_3x3 generic map ( vwidth => ) 113 Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 port map ( Clk => Clk, RSTn => RSTn, w11 => w11, w12 => w12, w13 => w13, w21 w22 w23 w31 w32 w33 => w21, => w22, => w23, => w31, => w32, => w33, DVw => DVw, DVs => DVs, s1 => s1, s2 => s2, s3 => s3, s4 => s4, s5 => s5, s6 => s6, s7 => s7, s8 => s8, s9 => s9 ); window_3x3x: window_3x3 generic map ( vwidth => ) port map ( Clk => Clk, 114 Lê Thế Thanh - Điện Tử Viễn Thông 2007-2009 RSTn => RSTn, D => D, w11 => w11, w12 => w12, w13 => w13, w21 => w21, w22 => w22, w23 => w23, w31 => w31, w32 => w32, w33 => w33, DV => DVw ); rc_counterx: rc_counter generic map ( num_cols => 128, num_rows => 128 ) port map ( Clk => Clk, RSTn => RSTn, En => RSTn, ColPos => ColPos, RowPos => RowPos ); ro_filt_proc: process(RSTn,Clk) begin if RSTn = '0' then ColPos_c