Tải bản đầy đủ
2 Ứng dụng xử lý ảnh để tính khoảng cách

2 Ứng dụng xử lý ảnh để tính khoảng cách

Tải bản đầy đủ

máy tính thì mỗi hàng của ảnh phải dùng nhiều hơn số byte đó để lưu, vì mục
đích lưu cả thông tin của biên. Để biết thức sự số byte này là bao nhiêu, đầu tiên
phải chuyển bm sang một lớp đệm, lớp BitmapData. Ta sử dụng kỹ thuật
LockBits.
Rectangle rec= new Rectangle (0, 0, bm.Width, bm.Height);
BitmapData

bmData=

bm.LockBit(rec,

ImageLockMode.ReadWrite,

PixelFormat.Format24bppRgb);
Phương thức LockBits sẽ chuyển từ 1 ảnh, sang 1 vùng nhớ (bmData). Trên
ảnh bm, ta chỉ có thể xem nó, chứ không thể chỉnh sử pixel. Muốn sửa, phải
chuyển nó sang lớp BitmapData, trên đó có các thứ cần thiết để can thiệp vào
từng điểm ảnh.
Trong máy tính ảnh được biểu diễn như một dãy các byte nhớ đặt liên tiếp
nhau. Ta phải đọc file ảnh này vào một ma trận 2 chiều sao cho số hàng bằng
chiều cao của ảnh, số cột bằng chiều rộng của ảnh.
Tiến hành đọc các pixel của ảnh và tiến hành xử lý trên ma trận ảnh nhị phân
đã chuyển đổi.
3.2.2.2 Lọc nhiễu
Là phần tiền xử lý nhằm loại bỏ các nhiễu cơ bản trong quá trình thu ảnh.
Có rất nhiều loại nhiễu như: nhiễu cộng (additive noise), độc lập (independent),
nhiễu nhân, nhiễu đốm (speckle noise), nhiễu muối tiêu (salt-pepper noise).
Đối với nhiễu cộng ta dùng mạch xử lý tuyến tính để lọc nhiễu, còn đối với nhiễu
nhân thì ta dùng mạch xử lý phi tuyến để lọc nhiễu.
Đối với nhiễu đốm, nhiễu muối tiêu ta sử dụng thuật toán lọc trung vị. Ý tưởng
chính của thuật toán như sau: ta sử dụng một cửa sổ lọc (thường là ma trận 3×3)
quét qua lần lượt từng điểm ảnh của ảnh đầu vào input. Tại vị trí mỗi điểm ảnh
lấy giá trị của các điểm ảnh tương ứng trong vùng kích thước của ảnh gốc “lấp”
vào ma trận lọc. Sau đó sắp xếp các điểm ảnh trong cửa sổ này thành 1 dãy x 1 ;x2;

50

…;nn (tăng dần hoặc giảm dần tùy ý). Và tìm trung vị cho dãy nếu n lẻ thì nếu n
chẵn thì

hoặc . Cuối cùng ta gán giá trị cho các điểm ảnh theo:

I(p)=
3.2.2.3 Phân ngưỡng
Đây là quá trình phân vùng ảnh dựa theo ngưỡng biên độ. Đặc tính đơn
giản nhất và có thể hữu ích nhất của ảnh đó là biên độ của các tính chất vật lý của
ảnh như: độ phản xạ, độ truyền sang, màu sắc hoặc đáp ứng đa phổ. Như vậy, có
thể dung biên độ để phân vùng khi mà biên độ đủ lớn đặc trưng cho ảnh. Thí dụ,
biên độ trong bộ cảm biến ảnh hồng ngoại có thể phản ánh vùng nhiệt độ thấp
hay vùng nhiệt độ cao hơn. Kỹ thuật phân ngưỡng theo biên độ rất có ích đối với
ảnh nhị phân như văn bản in, đồ họa, ảnh màu…
Trước hết cần đưa về ảnh nhị phân một cách đơn giản bằng một giá trị
ngưỡng. các điểm ảnh ở trên một ngưỡng T sẽ là đối tượng còn dưới ngưỡng T sẽ
là những điểm nền. ta có một hàm biến đổi tổng quát:
Hàm này được hiện thực hóa bằng một bảng dò tìm(LUT- Look Up Table) trên
một ảnh xám B(x,y) được biến đổi thành một ảnh nhị phân A r(x,y), hay còn gọi
là một quá trình nhị phân hóa. Với phương pháp ngưỡng trên đây phân loại điểm
ảnh dựa trên đặc tính chất “giá trị xám” của các điểm đối tượng và các điểm nền.
Đặc điểm của vùng lân cận điểm ảnh không được quan tâm đến. Khi quyết định
xem một điểm ảnh nào đấy có thuộc về đối tượng hay không phương pháp này
chỉ hướng theo giá trị xám của một điểm ảnh. Một kết quả như ý đòi hỏi có một
ngưỡng tối ưu được xác định, ngưỡng này có thể dễ dàng tìm được ở nhiều ứng
dụng.
Để dễ dàng xử lý trên ảnh của giá đỡ hàng (hàng) ta tiến hành phân
ngưỡng ảnh ban đầu thành gồm 2 màu đen và trắng với ngưỡng T = 128. Quá
trình tạo ảnh đen trắng sẽ giảm bớt nhiễu trên ảnh. Quá trình chuyển anh ban đầu
về anh đen trắng (quá trình phân ngưỡng) được thực hiện như sau:
 Chuyển ảnh gốc về ảnh xám.
 Biến đổi ảnh xám về ảnh nhị phân
51

for (y = 0; y < bm.Height - 1; y++)
{
for (x = 0; x < bm.Width - 1; x++)
{
c = bm.GetPixel(x, y);
if (c.R < band)
bitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0));
else
bitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255));
}
Qua các bước tiền xử lý (lọc nhiễu) và phân ngưỡng ta thu được ảnh gồm
2 màu đen và trắng. Ta lấy giá trị 0 và 1 của ảnh đen trắng lưu vào ma trận 2
chiều với số hàng là chiều cao của ảnh số cột là chiều rộng của ảnh. Ta tiến hành
xử lý trên ma trận nhị phân thu được.

Hình 13:Ảnh gốc và ảnh sau khi thực hiện phân ngưỡng
Giả thiết mô hìnhxử lý được cho như sau:

52

Hình 14: Mô hình chương trình xử lý
Mô hình bao gồm camera được gắn trên robot, giá đỡ hàng, hàng, hệ thống đèn
chiếu sáng, máy tính điều khiển robot…Phải đảm bảo yêu cầu :
-

Hệ thống đèn chiếu sáng phải đảm bảo độ sáng để không làm nhòe ảnh

-

thu được.
Camera đặt chính diện với giá đỡ hàng (hàng) đảm bảo khung nhìn của
camera bao quát toàn bộ giá đỡ (hàng) trên nền trắng. Và khi đó quá
trình thu ảnh được thực hiện liên tục.

Dựa vào ảnh ta đưa ra các thông số về khoảng cách. Thông số về khoảng
cách được đưa ra dựa vào ảnh nên chất lượng ảnh sẽ quyết định đến sai số về
khoảng cách tính toán so với khoảng cách tính toán trong thực tế do đó ảnh thu
nhận được phải đảm bảo nét và ít nhiễu hay không có nhiễu, trong khi đó hệ
thống chiếu sáng không phải thiết kế phức tạp.
3.3 Tính toán khoảng cách dựa trên ảnh thu được
Chương trình xử lý ảnh đưa ra được chiều cao của ảnh để dựa vào đó ta có
thể áp dụng để tính khoảng cách dựa trên mô hình camera pihole.

53

Chương trình đưa ra thông số về khoảng cách là tương đối do có sai số
trong quá trình thu ảnh (nhiễu).
Quá trình xử lý ảnh:
Bắt đầu

1.Thu ảnh

2. Phân tích và biến đổi ảnh
3. Tính toán khoảng cách

4. Gửi thông tin đến PC điều khiển robot
C
Tiếp tục?
K
Kết thúc

-Tính chiều cao ảnh: Để tính chiều cao của ảnh ta thực hiện qua 2 bước:
Bước 1: Tính điểm đen có vị trí nhỏ nhất tính theo chiều rộng ảnh.
for (int y = 0; y < bm.Height-1; y++)
{
for (int x = 0; x < bm.Width-1 ; x++)
{
if (bm.GetPixel(x, y).G == 0)
{
Ymin = y;
goto A;
}
}

54