Tải bản đầy đủ (.docx) (21 trang)

ỨNG DỤNG xử lý ẢNH để ĐỊNH HƯỚNG DI CHUYỂN ĐÚNG LINE (có code bên dưới)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (542.86 KB, 21 trang )

ĐỒ ÁN 3

Ứ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 3
Trang 5/17

CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI
1.1 Giới thiệu
- Trong bối cảnh công nghệ ngày càng phát triển mạnh mẽ như hiện nay,
việc ứng dụng các thuật toán xử lý ảnh ngày càng phổ biến trong cuộc
sống.
-

Tùy vào mục đích nghiên cứu và sử dụng, chúng ta có những thuật toán
xử lý hình ảnh khác nhau, từ hình ảnh trắng đen cho đến ảnh màu. Ví dụ
như nhận diện biển số xe, nhận diện gương mặt…

-

Trong đó, thuật toán Roberts và Hough có thể giúp chúng ta xác định
những đường biên, đường thẳng. Nhờ vậy, ta có thể ứng dụng để định
hướng cho các vật thể hay xe di chuyển chính xác hơn, ko bị lệch khi đi
trên đường.

-

1.2 Mục tiêu đề tài

Mục tiêu của đề tài là viết một chương trình code bằng ngôn ngữ Matlab
để xử lý một bức ảnh. Qua đó, thu thập thông tin và xử lý các thông số.
Cuối cùng, nhờ vào các thuật toán để xác định hướng đi của vật thể lệch
trái hay phải, hay vẫn đang đi đúng 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 toán xác định đường thẳng Hough.

-

Nghiên cứu giải thuật, xử lý thông số và đưa ra kết quả trong Matlab.

CHƯƠNG 2. 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 3
Trang 6/17

-

2.1.1 Khái niệm
Trong Matlab, ảnh kỹ thuật số thường được biểu diễn bằng 1 ma trận 2
chiều, trong đó mỗi phần tử của ma trận tương ứng với 1 pixel của ảnh.
2.1.2 Tính chất
Ảnh kỹ thuật số được đặc trưng bởi cường độ màu và cường độ

-

ảnh, trong đó:


Cường độ màu: biểu thị cho cường độ màu của 1 điểm ảnh trong
không gian, biểu diễn thông qua bảng màu hoặc mã Gray.



Cường độ ảnh: là không gian ảnh số cảm biến quang học đọc
được, thường là giá trị hai chiều, ba chiều hoặc có thể là nhiều
hơn. Những không gian này dùng để biểu diễn cho 1 điểm ảnh
trong 1 ảnh được biểu diễn bao nhiêu chiều không gian.

2.2 Pixel (Picture Element – điểm ảnh)
- Là 1 phần tử ảnh số tại tọa độ (x, y).

2.3 Phân loại ảnh số
- Có bốn kiểu ảnh trong Matlab:
• Ảnh chỉ số (Indexed images): biểu diễn bởi 2 ma trận, 1 ma
trận dữ liệu ảnh x và 1 ma trận màu map.
• Ảnh độ sáng (Intensity images): biểu diễn bởi 1 ma trận 2
chiều, giá trị mỗi phần tử cho biết độ sáng (hay mức xám) của
điểm ảnh đó.
• Ảnh nhị phân (Binary images): cũng được biểu diễn bởi 1 ma
trận 2 chiều nhưng thuộc kiểu logic.
• Ảnh RGB (RGB images): biểu diễn bởi ma trận ba chiều m x
n x 3; với m x n là kích thước ảnh theo pixels.
-

2.4 Mức xám của ảnh (Gray)
Là kết quả của sự biến đổi 1 giá trị độ sáng của 1 điểm ảnh thành 1 giá
trị nguyên dương, thông thường là trong khoảng [0, 255] tương ứng 8

Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line


ĐỒ ÁN 3
Trang 7/17

bit, tùy giá trị điểm ảnh. Với 0 là giá trị màu đen, 255 là 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ó 3 kiểu lọc nhiễu ảnh số trong 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í một điểm ảnh xung quanh luôn có những điểm ảnh đứng gần kề,
được thể hiện ở các hướng đông, tây, nam, bắc, đông nam, đông bắc,
tây nam, tây bắc. Cách sắp xếp ở các hướng như vậy tạo điều kiện cho
việc lọc biên và đường thẳng trong xử lý ảnh số.

-

2.8 Lọc biên ảnh bằng phương pháp Roberts
Trong xử lý ảnh Matlab, có 3 phương pháp chính để lọc biên ảnh:

• Phương pháp Roberts
• Phương pháp Prewitt
• Phương pháp Sobel

-

Trong đề tài này phương pháp lọc biên Roberts được sử dụng để xử lý
ảnh, do ưu điểm của phương pháp này là cách tính toán đơn giản,
nhanh chóng.

-

Roberts dựa trên mặt nạ lọc là ma trận 2x2 để lọc đường biên của ảnh
số trong không gian hai chiều.

Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line


ĐỒ ÁN 3
Trang 8/17

Hình 2-1: Công thức và Mặt nạ lọc Roberts, Prewitt và Sobel [1]

-

Tuy nhiên, khuyết điểm của phương pháp Roberts là khả năng lọc
nhiễu chưa tốt so với Prewitt và Sobel.

-

2.9 Thuật toán nhận dạng trong xử lý ảnh
Trong phần mềm Matlab, đặc biệt là trong xử lý ảnh số, để nhận dạng
mục tiêu có nhiều cách khác nhau. Tuy nhiên, trong đề tài này, mục
tiêu cần nhận dạng là đường Line trên đường.


-

Đường Line trên đường là những đường thẳng, do đó thuật toán nhận
dạng đường thẳng Hough được sử dụng.

-

Thuật toán Hough là kỹ thuật có thể dùng để tách các đặc điểm của 1
hình dáng cụ thể trong 1 ảnh nhị phân.

-

Thuật toán Hough cho đường thẳng sử dụng khoảng cách và góc lệch
của tiếp tuyến tới đường thẳng để xác định thông số. Sau đó xử lý các
thông số này để xác định đường thẳng.

Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line


ĐỒ ÁN 3
Trang 9/17

-

Công thức xác định thông số trong thuật toán Hough có 2 cách:
• b = - a. xi + yi ;
Với (xi,, yi) là tọa độ các điểm ảnh cần nhận dạng.

-


Tuy nhiên, cách này có khuyết điểm là tọa độ x và y khi có giá trị quá
lớn sẽ khó tính toán, xác định trên trục tọa độ.

Hình 2-2: Xác định đường thẳng bằ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 3
Trang 10/17

-

Đồ thị ρθ khắc phục được khuyết điểm của đồ thị xy.

-

Các điểm nếu nằm trên cùng đường thẳng thì các đường cong của các
điểm đó sẽ cắt nhau tại 1 điểm.

CHƯƠNG 3. 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 3
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 3
Trang 12/17

Hình 3-5: Lưu đồ giải thuật

-

3.3 Hình ảnh cần xử lý và 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 3
Trang 13/17

-


Matlab lấy thông tin của ảnh, chuyển giá trị màu sang mức Gray. Sau
đó, đặt điều kiện để giảm nhiễu và á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ẽ các trục cố
định ngang và dọc để định hướng di chuyển, xác định vùng xử lý.

-

Tính toán giá trị trung bình của từng vùng xử lý

-

Cuối cùng, xác định giá trị trung bình toàn vùng xử lý.

-

Kết luận và đề xuất hướng khắc phục nếu có.

Hình 3-6: Ảnh cần xử lý và định hướng

3.4 Kết quả mô phỏng

Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line


ĐỒ ÁN 3

Trang 14/17

Hình 3-7: Ảnh đã chuyển mức Gray và 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 3
Trang 15/17

Hình 3-9: Kết quả và đề xuất khắc phục

-

Chương trình đã xử lý được yêu cầu đề ra.

-

Đề xuất ra được phương án khắc phục nếu hướng đi bị lệch.

CHƯƠNG 4. KẾT LUẬN VÀ NHẬN XÉT

Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line


ĐỒ ÁN 3
Trang 16/17


4.1 Kết luận
- Chương trình xuất được ảnh nhị phân, xác định được đường
thẳng trong ảnh.
-

So sánh được các thông số.

-

Tính được các giá trị trung bình.

-

Xuất được kết quả và cách khắc phục nếu có sai lệch hướng đi.

4.2 Nhận xét
- Sau quá trình mô phỏng, code chương trình vẫn chưa tối ưu nhất.
-

Trong thực tế, quá trình xử lý có thể lâu hơn tính toán lý thuyết.

-

Hình ảnh vẫn còn đơn giản và chưa có nhiều chướng ngại vật.

-

Khả năng lọc nhiễu vẫn còn chưa tốt.

4.3 Hướng phát triển đề tài

- Chương trình có thể sử dụng các phương pháp lọc nhiễu và xác
định biên phức tạp hơn, qua đó đạt được kết quả chính xác hơn.
-

Nhờ vậy, có thể áp dụng để truyền tải hình ảnh từ xe đang di
chuyển về để xử lý và định hướng di chuyển hiệu quả hơn, ứng
dụng tốt hơn 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 3
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 3
Trang 18/17

clc;
%------------------------------------------------------------------------tic;
f = imread('1.png');
% Doc anh
info = imfinfo('1.png');
% lay thong tin anh, xac dinh toa
do 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 4 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 trong anh
figure, imshow(f);
hold on
max_len = 0;
%--------------------------------% xac dinh 6 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 6 truc y
xystruct = struct;
for k = 1:length(sixhorizone)
xystruct(k).vector = [0 sixhorizone(k,1); info.Width
sixhorizone(k,1)]; % toa do 'x' 6 truc
end
for k1 = 1:length(xystruct)
xysix = [xystruct(k1).vector];
plot(xysix(:,1),xysix(:,2),'LineWidth',2,'Color','red');
% ve 6 truc
end
%----------------------------------------------------------------------% Ve Line cua Hough
for k = 1: length(lines)% Dao toa do xy de line theo 1 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 3
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 1 phan tu de sap xep thu tu
for k = 1 : length(lines)
zeromatrix(k,:) = [lines(k).point1];
end

for k = 1 : (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) <= sixhorizone(2,:))) && ((xy(1,1) >
0) && (xy(1,1) <= info.Width))
khung1(stt_frame1,:) = xy;
stt_frame1 = stt_frame1 + 1;
elseif ((xy(1,2) > sixhorizone(2,:)) && (xy(1,2) <=
sixhorizone(3,:))) && ((xy(1,1) > 0) && (xy(1,1) <= info.Width))
khung2(stt_frame2,:) = xy;
stt_frame2 = stt_frame2 + 1;
elseif ((xy(1,2) > sixhorizone(3,:)) && (xy(1,2) <=
sixhorizone(4,:))) &&((xy(1,1) > 0) && (xy(1,1) <= info.Width))
khung3(stt_frame3,:) = xy;
stt_frame3 = stt_frame3 + 1;

elseif ((xy(1,2) > sixhorizone(4,:)) && (xy(1,2) <=
sixhorizone(5,:))) && ((xy(1,1) > 0) && (xy(1,1) <= info.Width))
khung4(stt_frame4,:) = xy;
stt_frame4 = stt_frame4 + 1;
elseif ((xy(1,2) > sixhorizone(5,:)) && (xy(1,2) <=
sixhorizone(6,:))) && ((xy(1,1) > 0) && (xy(1,1) <= info.Width))
khung5(stt_frame5,:) = xy;
stt_frame5 = stt_frame5 + 1;
end
end

Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line


ĐỒ ÁN 3
Trang 20/17

trungbinh5khung = zeros(5,2);
kichthuoc = length(khung1);
if kichthuoc == 0
disp('Khung 1 khong co gia tri');
else
x = round(mean(khung1(:,1)));
y = round(mean(khung1(:,2)));
trungbinh5khung(1,:) = [x,y];
plot(x,y,'x','LineWidth',2,'color','black');
end
kichthuoc = length(khung2);
if kichthuoc == 0
disp('Khung 2 khong co gia tri');

else
x = round(mean(khung2(:,1)));
y = round(mean(khung2(:,2)));
trungbinh5khung(2,:) = [x,y];
plot(x,y,'x','LineWidth',2,'color','black');
end
kichthuoc = length(khung3);
if kichthuoc == 0
disp('Khung 3 khong co gia tri');
else
x = round(mean(khung3(:,1)));
y = round(mean(khung3(:,2)));
trungbinh5khung(3,:) = [x,y];
plot(x,y,'x','LineWidth',2,'color','black');
end
kichthuoc = length(khung4);
if kichthuoc == 0
disp('Khung 4 khong co gia tri');
else
x = round(mean(khung4(:,1)));
y = round(mean(khung4(:,2)));
trungbinh5khung(4,:) = [x,y];
plot(x,y,'x','LineWidth',2,'color','black');
end
kichthuoc = length(khung5);
if kichthuoc == 0
disp('Khung 5 khong co gia tri');
else
x = round(mean(khung5(:,1)));
y = round(mean(khung5(:,2)));

trungbinh5khung(5,:) = [x,y];
plot(x,y,'x','LineWidth',2,'color','black');
end
x = round(mean(trungbinh5khung(:,1)));
plot(x,y,'x','LineWidth',2,'color','green');
trucgiua = info.Width/2;

Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line


ĐỒ ÁN 3
Trang 21/17

if x > (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 > 0 && x khoangcach2 = trucgiua - x;
goclech2 = round(atand(khoangcach2/(info.Height-x)));
disp('Dang lech ben trai');
disp('Be lai sang phai mot goc:');
disp(goclech2);
else disp('Dang di dung huong');
end
toc

Ứng Dụng Xử Lý Ảnh Để Định Hướng Di Chuyển Đúng Line




×