ỨNG DỤNG xử lý ẢNH để ĐỊNH HƯỚNG DI CHUYỂN ĐÚNG LINE (có code bên dưới) ỨNG DỤNG xử lý ẢNH để ĐỊNH HƯỚNG DI CHUYỂN ĐÚNG LINE (có code bên dưới) ỨNG DỤNG xử lý ẢNH để ĐỊNH HƯỚNG DI CHUYỂN ĐÚNG LINE (có code bên dưới)
ĐỒ ÁN ỨNG DỤNG XỬ LÝ ẢNH ĐỂ ĐỊNH HƯỚNG DI CHUYỂN ĐÚNG LINE MỤC LỤC DANH MỤC HÌNH ẢNH DANH MỤC TỪ VIẾT TẮT DIM Digital Image Processing GIF Graphic Interchange Format JPEG Joint Photo - Graphic Experts Group RGB Pixel Picture Element PNG Portable Network Graphic Red Green Blue ĐỒ ÁN Trang 5/17 CHƯƠNG GIỚI THIỆU ĐỀ TÀI 1.1 Giới thiệu - Trong bối cảnh công nghệ ngày phát triển mạnh mẽ nay, việc ứng dụng thuật toán xử lý ảnh ngày phổ biến sống - Tùy vào mục đích nghiên cứu sử dụng, có thuật tốn xử lý hình ảnh khác nhau, từ hình ảnh trắng đen ảnh màu Ví dụ nhận diện biển số xe, nhận diện gương mặt… - Trong đó, thuật tốn Roberts Hough giúp xác định đường biên, đường thẳng Nhờ vậy, ta ứng dụng để định hướng cho vật thể hay xe di chuyển xác hơn, ko bị lệch đường - 1.2 Mục tiêu đề tài Mục tiêu đề tài viết chương trình code ngơn ngữ Matlab để xử lý ảnh Qua đó, thu thập thơng tin xử lý thông số Cuối cùng, nhờ vào thuật toán để xác định hướng vật thể lệch trái hay phải, hay hướng - 1.3 Hướng tìm hiểu Tìm hiểu ảnh kỹ thuật số - Chuyển giá trị ảnh màu sang mức Gray - Tìm hiểu phương pháp tìm biên ảnh Roberts - Tìm hiểu thuật tốn xác định đường thẳng Hough - Nghiên cứu giải thuật, xử lý thông số đưa kết Matlab CHƯƠNG NỘI DUNG ĐỀ TÀI 2.1 Ảnh kỹ thuật số Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 6/17 - 2.1.1 Khái niệm Trong Matlab, ảnh kỹ thuật số thường biểu diễn ma trận chiều, phần tử ma trận tương ứng với pixel ảnh 2.1.2 Tính chất Ảnh kỹ thuật số đặc trưng cường độ màu cường độ - ảnh, đó: • Cường độ màu: biểu thị cho cường độ màu điểm ảnh không gian, biểu diễn thơng qua bảng màu mã Gray • Cường độ ảnh: không gian ảnh số cảm biến quang học đọc được, thường giá trị hai chiều, ba chiều nhiều Những khơng gian dùng để biểu diễn cho điểm ảnh ảnh biểu diễn chiều không gian 2.2 Pixel (Picture Element – điểm ảnh) - Là phần tử ảnh số tọa độ (x, y) 2.3 Phân loại ảnh số - Có bốn kiểu ảnh Matlab: • Ảnh số (Indexed images): biểu diễn ma trận, ma trận liệu ảnh x ma trận màu map • Ảnh độ sáng (Intensity images): biểu diễn ma trận chiều, giá trị phần tử cho biết độ sáng (hay mức xám) điểm ảnh • Ảnh nhị phân (Binary images): biểu diễn ma trận chiều thuộc kiểu logic • Ảnh RGB (RGB images): biểu diễn ma trận ba chiều m x n x 3; với m x n kích thước ảnh theo pixels - 2.4 Mức xám ảnh (Gray) Là kết biến đổi giá trị độ sáng điểm ảnh thành giá trị nguyên dương, thông thường khoảng [0, 255] tương ứng Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 7/17 bit, tùy giá trị điểm ảnh Với giá trị màu đen, 255 giá trị màu trắng - Thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 - 2.5 Chuyển giá trị ảnh màu sang mức Gray Công thức chuyển giá trị ảnh màu sang mức Gray: Igray- scale(m, n) = α.Icolour(n, m, r) + β.Icolour(n, m, g) + γ Icolour(n, m, b) Với: α = 0.2989, β = 0.5870, γ = 0.1140 - 2.6 Lọc ảnh số Có kiểu lọc nhiễu ảnh số Matlab: • Lọc tuyến tính • Lọc phi tuyến • Lọc thích nghi - 2.7 Điểm ảnh lân cận Vị trí điểm ảnh xung quanh ln có điểm ảnh đứng gần kề, thể hướng đông, tây, nam, bắc, đông nam, đông bắc, tây nam, tây bắc Cách xếp hướng tạo điều kiện cho việc lọc biên đường thẳng xử lý ảnh số - 2.8 Lọc biên ảnh phương pháp Roberts Trong xử lý ảnh Matlab, có phương pháp để lọc biên ảnh: • Phương pháp Roberts • Phương pháp Prewitt • Phương pháp Sobel - Trong đề tài phương pháp lọc biên Roberts sử dụng để xử lý ảnh, ưu điểm phương pháp cách tính tốn đơn giản, nhanh chóng - Roberts dựa mặt nạ lọc ma trận 2x2 để lọc đường biên ảnh số không gian hai chiều Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 8/17 Hình 2-1: Cơng thức Mặt nạ lọc Roberts, Prewitt Sobel [1] - Tuy nhiên, khuyết điểm phương pháp Roberts khả lọc nhiễu chưa tốt so với Prewitt Sobel - 2.9 Thuật toán nhận dạng xử lý ảnh Trong phần mềm Matlab, đặc biệt xử lý ảnh số, để nhận dạng mục tiêu có nhiều cách khác Tuy nhiên, đề tài này, mục tiêu cần nhận dạng đường Line đường - Đường Line đường đường thẳng, thuật tốn nhận dạng đường thẳng Hough sử dụng - Thuật toán Hough kỹ thuật dùng để tách đặc điểm hình dáng cụ thể ảnh nhị phân - Thuật toán Hough cho đường thẳng sử dụng khoảng cách góc lệch tiếp tuyến tới đường thẳng để xác định thơng số Sau xử lý thông số để xác định đường thẳng Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 9/17 - Công thức xác định thơng số thuật tốn Hough có cách: • b = - a xi + yi ; Với (xi,, yi) tọa độ điểm ảnh cần nhận dạng - Tuy nhiên, cách có khuyết điểm tọa độ x y có giá trị lớn khó tính tốn, xác định trục tọa độ Hình 2-2: Xác định đường thẳng đồ thị xy [2] • ρ = x cos θ + y sin θ Với: θ = [0, 360] hay [0, 2π], ρ = [-D, D] Hình 2-3: Xác định đường thẳng qua đồ thị ρθ [2] Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 10/17 - Đồ thị ρθ khắc phục khuyết điểm đồ thị xy - Các điểm nằm đường thẳng đường cong điểm cắt điểm CHƯƠNG SƠ ĐỒ KHỐI VÀ MÔ PHỎNG MATLAB 3.1 Sơ đồ khối: Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 11/17 Hình 3-4: Sơ đồ khối hệ thống 3.2 Lưu đồ giải thuật Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 12/17 Hình 3-5: Lưu đồ giải thuật - 3.3 Hình ảnh cần xử lý nguyên lý hệ thống Nhập hình ảnh cần xử lý Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 13/17 - Matlab lấy thông tin ảnh, chuyển giá trị màu sang mức Gray Sau đó, đặt điều kiện để giảm nhiễu áp dụng phương pháp tìm biên Roberts - Tiếp theo, sử dụng thuật toán Hough cho đường thẳng Vẽ trục cố định ngang dọc để định hướng di chuyển, xác định vùng xử lý - Tính tốn giá trị trung bình vùng xử lý - Cuối cùng, xác định giá trị trung bình tồn vùng xử lý - Kết luận đề xuất hướng khắc phục có Hình 3-6: Ảnh cần xử lý định hướng 3.4 Kết mô Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 14/17 Hình 3-7: Ảnh chuyển mức Gray lọc biên Hình 3-8: Ảnh xử lý Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 15/17 Hình 3-9: Kết đề xuất khắc phục - Chương trình xử lý yêu cầu đề - Đề xuất phương án khắc phục hướng bị lệch CHƯƠNG KẾT LUẬN VÀ NHẬN XÉT Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 16/17 4.1 Kết luận - Chương trình xuất ảnh nhị phân, xác định đường thẳng ảnh - So sánh thông số - Tính giá trị trung bình - Xuất kết cách khắc phục có sai lệch hướng 4.2 Nhận xét - Sau q trình mơ phỏng, code chương trình chưa tối ưu - Trong thực tế, q trình xử lý lâu tính tốn lý thuyết - Hình ảnh đơn giản chưa có nhiều chướng ngại vật - Khả lọc nhiễu chưa tốt 4.3 Hướng phát triển đề tài - Chương trình sử dụng phương pháp lọc nhiễu xác định biên phức tạp hơn, qua đạt kết xác - Nhờ vậy, áp dụng để truyền tải hình ảnh từ xe di chuyển để xử lý định hướng di chuyển hiệu hơn, ứng dụng tốt vào đời sống thực tế TÀI LIỆU THAM KHẢO Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 17/17 Tiếng Anh: [1] Fundamentals of Digital Image Processing: A Practical Approach with Examples in Matlab, by Chris Solomon and Toby Breckon, page 85 – 109 [2] Digital Image Processing Using Matlab, by Gonzalez, page 334 – 401 [3] Olivier Lézoray, ”Theory and Pratice” Image Processing and Analysis with Graphs, page 1-21 PHỤ LỤC clear all; Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 18/17 clc; % tic; f = imread('1.png'); % Doc anh info = imfinfo('1.png'); % lay thong tin anh, xac dinh toa XY img = rgb2gray(f); % chuyen gia tri mau sang muc gray edge_Roberts = edge(img,'Roberts'); % ap dung Roberts xac dinh bien anh BW_out = bwareaopen(imfill(edge_Roberts,'holes'),3); % khong hien thi diem anh khong du pixel figure, imshow(BW_out); veraxis = [(info.Width)/2,info.Height]; % tim gia tri cua truc giua [H,T,R] = hough(BW_out); % dung dinh luat Hough tim a va b P = houghpeaks(H,10,'threshold',ceil(0.1*max(H(:)))); % xac dinh diem dau duong line % -% Dung dinh luat Hough tim cac diem lines = houghlines(BW_out,T,R,P,'FillGap',20,'MinLength',30); % ve lines anh figure, imshow(f); hold on max_len = 0; % % xac dinh truc plot([(info.Width)/2,(info.Width)/2], [0,veraxis(1,2)],'LineWidth',2,'Color','red'); % ve truc thang dung trungbinh = round(info.Height/2); saukhung = round((info.Height - trungbinh)/5); sixhorizone =[0:saukhung:trungbinh]'; % xac dinh gia tri truc y xystruct = struct; for k = 1:length(sixhorizone) xystruct(k).vector = [0 sixhorizone(k,1); info.Width sixhorizone(k,1)]; % toa 'x' truc end for k1 = 1:length(xystruct) xysix = [xystruct(k1).vector]; plot(xysix(:,1),xysix(:,2),'LineWidth',2,'Color','red'); % ve truc end % % Ve Line cua Hough for k = 1: length(lines)% Dao toa xy de line theo huong xy = [lines(k).point1; lines(k).point2]; if(xy(1,1) < xy(2,1)) && (xy(1,2) > xy(2,2)) bientam = xy(2,:); xy(2,:) = xy(1,:); xy(1,:) = bientam; lines(k).point1 = xy(1,:); lines(k).point2 = xy(2,:); end end Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line ĐỒ ÁN Trang 19/17 for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow'); % ve diem dau duong line len = norm(lines(k).point1 - lines(k).point2); if (len > max_len) max_len = len; xy_long = xy; end end % % Sap xep truc zeromatrix = zeros(length(lines)+ 1, 2); % Tao mang hon phan tu de sap xep thu tu for k = : length(lines) zeromatrix(k,:) = [lines(k).point1]; end for k = : (length(zeromatrix) - 1) xy = zeromatrix(k,:); for k1 = k+1 : length(zeromatrix) xy1 = zeromatrix(k1,:); if xy(1,2) > xy1(1,2) abc = xy; xy = xy1; zeromatrix(k,:) = xy1; xy1 = abc; zeromatrix(k1,:) = abc; end end end khung1 = []; khung2 = []; khung3 = []; khung4 = []; khung5 = []; stt_frame1 = 1; stt_frame2 = 1; stt_frame3 = 1; stt_frame4 = 1; stt_frame5 = 1; for k = 1:length(lines) xy = [lines(k).point1];%lines(k).point2]; if ((xy(1,2) >= 0) && (xy(1,2) 0) && (xy(1,1) sixhorizone(2,:)) && (xy(1,2) 0) && (xy(1,1) sixhorizone(3,:)) && (xy(1,2) 0) && (xy(1,1) sixhorizone(4,:)) && (xy(1,2) 0) && (xy(1,1) sixhorizone(5,:)) && (xy(1,2) 0) && (xy(1,1) (info.Width)/2 khoangcach1 = x - trucgiua; goclech1 = atand(khoangcach1/(info.Height-x)); disp('Dang lech ben phai'); disp('Be lai sang trai mot goc:'); disp(goclech1); elseif x > && x