(Đồ án hcmute) thực hiện và đánh giá hiệu năng các bộ lọc xử lý ảnh trên nền tảng soc zynq 7000

109 4 0
(Đồ án hcmute) thực hiện và đánh giá hiệu năng các bộ lọc xử lý ảnh trên nền tảng soc zynq 7000

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CƠNG NGHỆ KỸ THUẬT MÁY TÍNH THỰC HIỆN VÀ ÐÁNH GIÁ HIỆU NĂNG CÁC BỘ LỌC XỬ LÝ ẢNH TRÊN NỀN TẢNG SoC ZYNQ-7000 GVHD: PHAN VĂN CA SVTH : LÊ MẠNH TRƯỜNG MSSV: 14119107 SVTH : VŨ ĐỨC HUY MSSV: 14119132 SKL 0 Tp Hồ Chí Minh, tháng 07/2018 an TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP THỰC HIỆN VÀ ĐÁNH GIÁ HIỆU NĂNG CÁC BỘ LỌC XỬ LÝ ẢNH TRÊN NỀN TẢNG SoC ZYNQ-7000 : LÊ MẠNH TRƯỜNG - 14119107 VŨ ĐỨC HUY - 14119132 Khóa : 2014 Ngành : CƠNG NGHỆ KỸ THUẬT MÁY TÍNH GVHD : PGS.TS PHAN VĂN CA SVTH Tp Hồ Chí Minh, tháng 07 năm 2018 an TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP THỰC HIỆN VÀ ĐÁNH GIÁ HIỆU NĂNG CÁC BỘ LỌC XỬ LÝ ẢNH TRÊN NỀN TẢNG SoC ZYNQ-7000 : LÊ MẠNH TRƯỜNG - 14119107 VŨ ĐỨC HUY - 14119132 Khóa : 2014 Ngành : CƠNG NGHỆ KỸ THUẬT MÁY TÍNH GVHD : PGS.TS PHAN VĂN CA SVTH Tp Hồ Chí Minh, tháng 07 năm 2018 an CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** -Tp Hồ Chí Minh, ngày tháng năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Lê Mạnh Trường MSSV:14119107 Vũ Đức Huy MSSV:14119132 Ngành:Cơng Nghệ Kỹ Thuật Máy Tính Lớp: 14119CL1 Giảng viên hướng dẫn: PGS.TS Phan Văn Ca ĐT: Ngày nhận đề tài: 07/03/2018 Ngày nộp đề tài: 09/07/2018 Tên đề tài: Thực đánh giá hiệu lọc xử lý ảnh tảng SoC ZYNQ-7000 Các số liệu, tài liệu ban đầu: Anphy Jose, K Deepa Merlin Dixon, Naiji Joseph, E Silpa George, V Anjitha, "Performance study of edge detection operators," 2014 International Conference on Embedded Systems (ICES), pp 7-11, July 2014 Nội dung thực đề tài:  Nghiên cứu kiến trúc SoC ZYNQ-7000 chuẩn giao thức AXI, AXI4, AXI4-Stream ZYNQ-7000  Nghiên cứu giải thuật lọc xử lý phát biên ảnh (Sobel, Prewitt, Canny)  Tích hợp IPCore phần cứng với lõi ARM để tạo platform cho việc xây dựng lọc hệ thống  Xây dựng IPCore phần cứng cho lọc xử lý ảnh ZYNQ-7000  Nâng cấp hệ thống việc thay lọc ảnh phần mềm IPCore phần cứng xây dựng  So sánh tốc độ xử lý đánh giá hiệu lọc phần mềm phần cứng Sản phẩm: Chương trình lọc xử lý ảnh cho phần cứng phần mềm kit ZYNQ-7000 TRƯỞNG NGÀNH GIÁO VIÊN HƯỚNG DẪN i an CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh Phúc ******* PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên Sinh viên: Lê Mạnh Trường MSSV: 14119107 Vũ Đức Huy MSSV: 14119132 Ngành: Cơng nghệ kỹ thuật Máy Tính Tên đề tài: Thực đánh giá hiệu lọc xử lý ảnh tảng SoC ZYNQ-7000 Họ tên Giáo viên hướng dẫn: PGS.TS Phan Văn Ca NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày 17 tháng năm 2018 Giáo viên hướng dẫn (Ký & ghi rõ họ tên) ii an CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh Phúc ******* PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên Sinh viên: Lê Mạnh Trường MSSV: 14119107 … Vũ Đức Huy MSSV: 14119132 Ngành: Công nghệ kỹ thuật Máy Tính Tên đề tài: Thực đánh giá hiệu lọc xử lý ảnh tảng SoC ZYNQ-7000 Họ tên Giáo viên phản biện: NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng năm 2018 Giáo viên phản biện (Ký & ghi rõ họ tên) iii an LỜI CẢM ƠN Để nhóm nghiên cứu hồn thành tốt đề tài này, nhóm nhận hỗ trợ, giúp đỡ nhiều thầy cô, bạn bè Với tình cảm sâu sắc, chân thành, cho phép nhóm nghiên cứu bày tỏ lịng biết ơn sâu sắc đến tất cá nhân, tổ chức tạo điều kiện giúp đỡ nhóm thực đề tài suốt trình học tập nghiên cứu đề tài Trước hết nhóm nghiên cứu xin gửi lời cảm ơn sâu sắc đến thầy Phan Văn Ca giảng viên hướng dẫn đề tài cho nhóm, tận tâm, trách nhiệm, nhiệt tình bảo, định hướng cho nhóm suốt thời gian thực đề tài quan tâm giúp đỡ nhóm nghiên cứu hồn thành tốt đề tài: "Thực đánh giá hiệu lọc xử lý ảnh tảng SoC ZYNQ-7000" Đồng thời nhóm xin gửi tới thầy mơn Máy tính - Viễn thơng Trường ĐH Sư phạm Kỹ thuật Tp.HCM lời cảm ơn sâu sắc Vì quan tâm, dạy dỗ, bảo tận tình chu đáo thầy cô tạo điều kiện tốt để nhóm hồn thành tốt đề tài giao Nhóm nghiên cứu xin cảm ơn quý thầy cô hội đồng bảo vệ dành chút thời gian quý báu để xem luận văn tốt nghiệp nhóm Và đánh giá ưu khuyết điểm luận văn Đó nhận định quý báu để nhóm trau dồi thêm kiến thức hạn hẹp vận dụng tốt kiến thức học vào thực tiễn sống tương lai Cuối nhóm nghiên cứu xin gửi lời cảm ơn đến gia đình bạn bè ln đồng hành, góp ý động viên nhóm suốt thời gian thực đề tài Là điểm tựa tinh thần để nhóm hồn thành tốt đề tài Với kinh nghiệm hạn chế học viên, đề tài tránh thiếu sót Nhóm nghiên cứu mong nhận bảo, đóng góp ý kiến thầy để nhóm có điều kiện bổ sung, nâng cao kiến thức Nhóm xin chân thành cảm ơn! Thủ Đức, ngày tháng năm 2018 iv an TÓM TẮT Với ứng dụng ngày mạnh mẽ xử lý ảnh đời sống xu hướng công nghệ, yêu cầu tốc độ xử lý ngày khắc khe Song song với ngày có nhiều cơng nghệ sản phẩm đời nhằm phục vụ ứng dụng Sau q trình nghiên cứu tìm tịi nhóm nhận thấy lọc phát biên ảnh đóng vai trị quan trọng q trình xử lý ảnh biên ảnh phần có giá trị liệu hình ảnh đồng thời đặc trưng quan trọng hình ảnh có ảnh hưởng trực tiếp đến nhận thức hình ảnh người.Trên sở nhóm nghiên cứu định thực đề tài với lọc phát biên ảnh, đề tài hệ thống lọc xử lý ảnh xây dựng tảng SoC ZYNQ-7000 tảng cung cấp Xilinx, với chuỗi công cụ sử dụng cho thiết kế Vivado 2017.4, Vivao HLS (High-Level Synthesis) 2017.4, SDK (Software Development Kit) 2017.4 SDSoC (Software-Defined System On Chip) 2017.4 Trong đề tài hệ thống nhận liệu đầu vào từ cổng HDMI (HighDefinition Multimedia Interface) kit ZYNQ-7000 đầu kết xử lý thị hình kết nối với cổng VGA (Video Graphics Array) Các giải thuật phát biên ảnh Sobel, Prewitt, Canny thực thi phần mềm, sau hệ thống cải tiến việc thay lọc xử lý tảng phần mềm bằngcác IPCore xây dựng tảng phần cứng nhằm tăng hiệu suất xử lý lên nhiều lần cụ thể tốc độ xử lý cải tiến nhanh khoản 100 lần so với phần mềm lần so với thực thi Matlab R2016a Tốc độ xử lý chu trình lọc biên ảnh ảnh với kích thước khung ảnh 1080x1920 pixel tảng phần cứng vào khoản 0.018s v an MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP i PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ii PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN iii LỜI CẢM ƠN iv TÓM TẮT v MỤC LỤC vi DANH MỤC TỪ VIẾT TẮT ix DANH MỤC BẢNG BIỂU x DANH MỤC HÌNH ẢNH VÀ BIỂU ĐỒ xi Chương 1: TỔNG QUAN 1.1 GIỚI THIỆU 1.2 MỤC TIÊU ĐỀ TÀI 1.3 NỘI DUNG THỰC HIỆN 1.4 TÌNH HÌNH NGHIÊN CỨU 1.5 BỐ CỤC QUYỂN BÁO CÁO Chương 2: CƠ SỞ LÝ THUYẾT 2.1 NỀN TẢNG SoC ZYNQ-7000 2.2 GIAO THỨC AXI, AXI4 11 2.3 MƠ HÌNH PIPELINE, DATAFLOW 14 Mơ hình Pipeline 14 Mơ hình Dataflow 16 2.4 GIẢI THUẬT TÁCH BIÊN ẢNH MÀU 17 Lý thuyết ảnh màu xử lý ảnh 17 Kỹ thuật tách biên ảnh màu 20 2.4.2.1 Chuyển đổi ảnh xám 21 2.4.2.2 Tích chập xử lý ảnh 22 2.4.2.3 Bộ lọc Gaussian Blur 24 2.4.2.4 Bộ lọc Sobel 25 2.4.2.5 Bộ lọc Prewitt 26 vi an 2.4.2.6 Bộ lọc Canny 26 2.5 CƠ BẢN VỀ OPENCV 27 Chương 3: THỰC HIỆN CÁC GIẢI THUẬT XỬ LÝ LỌC ẢNH TRÊN HW/SW 29 3.1 ĐẶC TẢ HỆ THỐNG 29 3.2 THỰC THI GIẢI THUẬT TRÊN NỀN TẢNG PHẦN MỀM 29 Quy trình thực thi thiết kế 29 Xây dựng Platform cho hệ thống 31 3.2.2.1 Xây dựng platform phần cứng cho hệ thống 32 3.2.2.2 Xây dựng platform phần mềm cho hệ thống 36 Triển khai giải thuật 37 3.2.3.1 Giải thuật Sobel 37 3.2.3.2 Giải thuật Prewitt 39 3.2.3.3 Giải thuật Canny 40 3.3 THỰC THI GIẢI THUẬT TRÊN NỀN TẢNG PHẦN CỨNG 42 Quy trình thực thi thiết kế 42 Xây dựng khối giao tiếp HDMI VGA 44 Xây dựng IPCore với giải thuật phát biên ảnh 48 3.3.3.1 IPCore với giải thuật Sobel 48 3.3.3.1 IPCore với giải thuật Prewitt 51 3.3.3.2 IPCore với giải thuật Canny 52 Chương 4: KẾT QUẢ 59 4.1 SƠ ĐỒ MẠCH HỆ THỐNG TRÊN PHẦN CỨNG 59 4.2 THÔNG SỐ HỆ THỐNG TRÊN PHẦN CỨNG 63 4.3 KẾT QUẢ THỰC NGHIỆM VÀ SO SÁNH HIỆU SUẤT 65 Kết thực thi với giải thuật Sobel 66 Kết thực thi với giải thuật Prewitt 67 Kết thực thi với giải thuật Canny 68 Chương 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 69 5.1 KẾT LUẬN 69 vii an addrMap.mapAddAddr(XPAR_AXI_DYNCLK_0_BASEADDR,MAP_SIZE_DRIVERS); addrMap.mapAddAddr(XPAR_AXI_VDMA_0_BASEADDR,MAP_SIZE_DRIVERS); #ifdef DBG printf("Check with printMap :\n"); addrMap.printMap(); #endif /* * Khoi tao VDMA driver tu xparameters.h */ vdmaConfig = XAxiVdma_LookupConfig(VGA_VDMA_ID); if (!vdmaConfig) { printf("No video DMA found for ID %d\r\n", VGA_VDMA_ID); return; } //cau hinh vdma voi dia chi ao Status = XAxiVdma_CfgInitialize(&vdma, vdmaConfig, addrMap.getVirtAddr(XPAR_AXI_VDMA_0_BASEADDR)); if (Status != XST_SUCCESS) { printf("VDMA Configuration Initialization failed %d\r\n", Status); return; } /* * Khoi tao hien thi */ Status = DisplayInitialize(&dispCtrl, &vdma, DISP_VTC_ID, addrMap.getVirtAddr(XPAR_V_TC_0_BASEADDR), addrMap.getVirtAddr(XPAR_AXI_DYNCLK_0_BASEADDR), (u8**) pPhysFrames, IM_STRIDE_BYTE); if (Status != XST_SUCCESS) { printf("Display Ctrl initialization failed during demo initialization%d\r\n", Status); return; } else { printf("Display init ok\n"); } //bat dau hien thi Status = DisplayStart(&dispCtrl); if (Status != XST_SUCCESS) { printf("Couldn't start display during demo initialization%d\r\n", Status); return; } #ifdef DBG 80 an printf("DEBUG :Time to init capture (HDMI input) and get timings\n"); #endif /* * Khoi tao Video Capture * Warning : chan hien thi cho den phat hien tin hieu HDMI dau vao */ Status = VideoInitialize(&videoCapt, &vdma, VID_VTC_ID, VID_GPIO_ID,addrMap.getVirtAddr(XPAR_V_TC_1_BASEADDR),addrMap.getVirtAddr(XPAR_AXI _GPIO_VIDEO_BASEADDR), (u8**) pPhysFrames , IM_STRIDE_BYTE, startOnDetect); if (Status != EXIT_SUCCESS) { printf("Video Ctrl initialization failed during demo initialization\r\n"); return; } //Hien thi tu HDMI Status = VideoStart(&videoCapt); if (Status != EXIT_SUCCESS) { printf("Video start failed during demo initialization\r\n"); return; } } u_int32_t chooseMenu() { std::string input = ""; u_int32_t myNumber = 0; while(1) { std::cout > myNumber) { if (myNumber (2*abs_gx)) dir_g = 2; else dir_g = 3; } else { if (abs_gy > (2*abs_gx)) dir_g = 0; else dir_g = 3; } // Tinh gia tri moi cho pixel (gia tri huong la LSB) element_gd = ( ( abs_g pixel_gd; element_gd = pixel_gd.val[0]; } // Luu gia tri vao bo dem dong // va dich gia tri len dong if( j < cols ) { tmp1 = linebuff.getval(1, j); tmp0 = linebuff.getval(0, j); // dich gia tri len dong linebuff.val[1][j] = tmp0; } // Chep du lieu hien tai vao bo dem dong if( j < cols && i < rows ){ linebuff.insert_bottom( element_gd, j ); } // Dich phai cua so truot win.shift_right(); // Chep du lieu tu bo dem dong sang kernel tinh toan if( j < cols ) { win.insert( element_gd, 0, ); win.insert( tmp0, 1, ); win.insert( tmp1, 2, ); } // Tach huong va lon Gradient current_dir = win.getval(1, 1) & 3; current_grad = win.getval(1, 1) >> 2; // xac dinh pixel dang xet co cuc dai cuc bo khong if( i cols-1 ) { out_pixel_val = 0; } else { // Kiem tra theo huong if ( current_dir == ) { ga = win.getval( 1, )>>2; gb = win.getval( 1, )>>2; } // Kiem tra theo huong 45 else if ( current_dir == ){ ga = win.getval( 2, )>>2; gb = win.getval( 0, )>>2; } // Kiem tra theo huong 90 90 an else if ( current_dir == ){ ga = win.getval( 0, )>>2; gb = win.getval( 2, )>>2; } // Kiem tra theo huong 135 else { ga = win.getval( 2, )>>2; gb = win.getval( 0, )>>2; } // Pixel duoc chap nhan neu la cuc dai if( current_grad > ga && current_grad > gb ) { out_pixel_val = current_grad; } else { out_pixel_val = 0; } } // Xuat du lieu if( j > && i > ) { out_pixel.val[0] = out_pixel_val; dst > pixel_gd; element_gd = pixel_gd.val[0]; } if( j < cols ) { tmp1 = linebuff.getval(1, j); tmp0 = linebuff.getval(0, j); linebuff.val[1][j] = tmp0; } if( j < cols && i < rows ){ linebuff.insert_bottom( element_gd, j ); } win.shift_right(); if( j < cols ) { win.insert( element_gd, 0, ); win.insert( tmp0, 1, ); win.insert( tmp1, 2, ); } // so sanh pixel hien tai voi nguong if( i cols-1 ) { out_pixel_val = 0; } else { if( win.getval(1,1) < threshold_low ){ out_pixel_val = 0; } else if( win.getval(1,1) > threshold_high || win.getval(0,0) > threshold_low win.getval(0,1) > threshold_low win.getval(0,2) > threshold_low win.getval(1,0) > threshold_low win.getval(1,2) > threshold_low win.getval(2,0) > threshold_low win.getval(2,1) > threshold_low win.getval(2,2) > threshold_low out_pixel_val = 255; } else { out_pixel_val = 0; } } || || || || || || || ) { 92 an if( j > && i > ) { out_pixel.val[0] = out_pixel_val; dst

Ngày đăng: 02/02/2023, 09:30

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

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

Tài liệu liên quan