từng bước. Bắt đầu từ ảnh đầu vào cho đến khi tách được từng ký tự. Để dễ dàng hơn cho việc xử lý, ảnh đầu vào được chuyển thành ảnh 256 mức xám. Việc chuyển đổi này không làm mất đi tính chất và các đặc trưng của ảnh. Đặc điểm của các đối tượng ảnh vẫn được giữ nguyên sau khi chuyển đổi.
Việc tách ký tự này là một phần của bài toán phân đoạn ảnh trong hệ thống tự động nhận dạng biển số xe. Có 3 bước chính quan trọng trong việc tách ký tự là: tiền xử lý, nhị phân hóa(hoặc phát hiện biên sobel) và cuối cùng là tách ký tự. Ảnh đầu vào phải được tiền xử lý bằng các kỹ thuật đã nêu ở chương 2. Tiếp theo nhị phân hóa để làm nổi bật phần ký tự. Sau đó tách rời các ký tự riêng biệt.
Hình 3.1: Lưu đồ tách ký tự
3.1.Nhị phân hóa
Vì đôi khi biển số xe được chụp có độ sáng không đồng nhất mà có thể chuyển dần từ sáng sang tối hoặc ngược lại. Đây là lý do chính mà tách ngưỡng toàn phần (global thresholding) bị lỗi. Chính vì lý do này mà em đã chọn tách ngưỡng thích ứng (adaptive thresholding) để nhị phân hóa ảnh đầu vào. Tách ngưỡng thích ứng tốt hơn tách ngưỡng toàn phần trong đa số trường
Ảnh xám
Ảnh xám Tiền xử lýTiền xử lý
Sobel cho biên dọc
Sobel cho biên dọc
Chiếu ngang + Chiếu dọc Chiếu ngang + Chiếu dọc Tách ký tự Tách ký tự Nhị phân hóa Nhị phân hóa OR
hợp nhưng lại làm cho chương trình chậm hơn do nó tính ngưỡng cục bộ cho từng pixel. Nếu ảnh lớn, độ phân giải cao thì đây là một vấn đề. Tuy nhiên biển số xe có kích thước khá nhỏ nên tốc độ chương trình sẽ không bị ảnh hưởng mấy. Có hai cách tiếp cận để tìm ngưỡng thích ứng. Một là cách tiếp cận của Chow và Kaneko, hai là cách tiếp cận ngưỡng cục bộ.
Hình 3.2: Ảnh qua quá trình nhị phân hóa
3.1.1. Cách tiếp cận của Chow và Kaneko
Cách tiếp cận này chia ảnh thành những hình chữ nhật nhỏ với kích thước m x n pixel. Ảnh trên những hình chữ nhật nhỏ này sẽ có độ sáng gần đồng nhất. Histogram cục bộ và ngưỡng cục bộ sẽ được tính cho mỗi hình chữ nhật[3].
Hình 3.3: Biển số được chia ra thành 6 hình chữ nhật nhỏ với histogram và ngưỡng của riêng nó
3.1.2. Ngưỡng cục bộ
Cách thứ hai để tìm ra ngưỡng cục bộ là dựa vào các pixel liền kề hay còn gọi là các pixel hàng xóm. Cho [x, y] là một pixel. Để tính toán ngưỡng cục bộ, chúng ta xét một hình vuông các hàng xóm với độ rộng 2r + 1, trong đó [x – r, y – r], [x – r, y + r], [x + r, y – r], [x + r, y + r] là bốn góc của hình vuông đó. Có một số cách tính giá trị ngưỡng cục bộ như sau[3]:
• Trung bình:
• Trung vị:
• Trung bình của giá trị mức xám lớn nhất và bé nhất:
Giá trị mới f’(x,y) của pixel [x,y] được tính toán như sau:
Trước khi tách ký tự, ngoài cách nhị phân hóa, ta có thể chọn cách phát hiện biên sobel. Việc phát hiện biên cũng làm cho các ký tự nổi lên. Đây là phương pháp em đã đề cập trong chương đầu. Có 2 cách dò biên sobel là dò theo hướng x và dò theo hướng y. Tùy vào mục đích có thể chọn 1 trong 2 cách hoặc kết hợp cả 2.
Hình 3.4: Ảnh qua quá trình phát hiện biên sobel
3.3.Tách ký tự
Sau khi nhị phân hóa, ta sẽ sử dụng phép chiếu dọc py(y) và chiếu ngang px(x)để cách ly các ký tự.
3.3.1. Chiếu ngang
Bước đầu tiên, ta sẽ tính toán phép chiếu ngang ph(y). Bước này cho phép tách các ký tự thành các dòng. Trước tiên chúng ta sẽ định nghĩa một số ký hiệu:
• w : chiều rộng của ảnh • h : chiều cao của ảnh
• f(x,y) : mức xám tại điểm (x,y)
Thuật toán của chiếu ngang:
0. y = 0
1. ph(y) = ∑wx=0 f x y( , )
2. y = y+1;
3. Nếu y < h quay lại bước 1, ngược lại làm tiếp bước 4 4. Kết thúc
Sau khi chiếu ngang ta sẽ được một đồ thị như sau:
Hình 3.5: Đồ thị chiếu ngang của biển số
Công việc tiếp theo sau khi chiếu ngang là tìm đỉnh có giá trị lớn nhất. Giá trị lớn nhất này chính là trục của dòng ký tự: ylmax = arg { } 0 1 max h( ) y y y p y < <
Đỉnh có giá trị lớn nhất này phải thỏa mãn điều kiện lớn hơn ngưỡng chọn đỉnh:
0% 100% y1 Ph(y) t(top) y0 ylmax y b(bottom) Ngưỡng chọn chân của đỉnh Ngưỡng chọn đỉnh
minPeak = cpeak p y* h( lmax)
Trong đó: cpeak = 0.4. Ngưỡng chọn đỉnh này chỉ tính một lần duy nhất theo giá trị ylmax
của dòng ký tự đầu tiên.
Độ cao của dòng ký tự được giới hạn bởi hai giá trị y = t và y = b. Hai giá trị này có thể được tính như sau:
t = { }
maxmin 1 | ( ) * ( max)
l y h h l
y y y p y cfoot p y
< < ≤
b = { }
0maxmax | ( ) * ( max)
l h h l
y y y y p y cfoot p y
< < ≤
Trong đó giá trị cfoot p y* h( lmax) là ngưỡng chọn chân của đỉnh p yh( lmax). Việc chọn
cfoot ảnh hưởng trực tiếp tới độ rộng của dòng ký tự. Theo thực nghiệm cfoot có thể nhận giá trị: • Cfoot = 0.3 đối với biển hai dòng ký tự
• Cfoot = 0.2 đối với biển một dòng ký tự
Mỗi dòng ký tự được giới hạn bởi t và b. Do đó phải lưu giá trị t và b vào danh sách các dòng ký tự. Sau đó xóa phép chiếu ngang trong khoảng [b,t].
Hình 3.6: Đồ thị chiếu ngang của biển số sau khi xóa phép chiếu ngang trong khoảng [b,t]
0% 100% y1 Ph(y) t(top) y0 y b(bottom) Ngưỡng chọn chân của đỉnh Ngưỡng chọn đỉnh ylmax
Việc xóa này có thể được minh họa bằng đoạn code sau:
Dòng ký tự tiếp theo được xác định bằng việc lặp lại quá trình tìm ylmax. Sau khi xóa phép chiếu ngang trong khoảng [b,t] thì giá trị ylmaxsẽ không còn nhận giá trị cũ nữa mà có một giá trị mới (Hình 3.6): Giá trị mới này giúp xác định một dòng ký tự mới. Tất nhiên giá trị ylmaxphải thỏa mãn điều kiện lơn hơn giá trị minPeak đã xác định ở trên.
Toàn bộ tiến trình tách dòng ký tự có thể minh họa bằng đoạn code sau:
Hình 3.7: Đồ thị chiếu ngang đối với ảnh nhị phân hóa
zero(b,t) begin for y:=b to t do begin = 0; end end L is list of line detect detect minPeak while( >= minPeak} begin detect t, b; save t, b to L zero(b,t); detect end
Hình 3.8: Đồ thị chiếu ngang đối với ảnh phát hiện biên sobel
Dựa vào phép chiếu ngang này, việc tách các ký tự thành các dòng trở nên đơn giản.
3.3.2. Chiếu dọc
Việc tiếp theo là tách các ký tự trong một dòng thành các ký tự riêng biệt. Bây giờ, ta sẽ tính toán phép chiếu dọc pv(x), sau đó tách rời các ký tự dựa vào phép chiếu dọc. Công việc này tương tự như việc tính toán phép chiếu ngang.
Thuật toán chiếu dọc:
0. x = 0
1. pv(x) =∑hy=0 f x y( , )
2. x = x+1;
3. Nếu x < w quay lại bước 1, ngược lại làm tiếp bước 4 4. Kết thúc
Sau bước này ta có đồ thị chiếu dọc của dòng ký tự. Từ đây, việc tách các ký tự được thực hiện với thuật toán tương tự thuật toán tách dòng ký tự chỉ khác nhau ở các hằng số.
Hình 3.9: Đồ thị chiếu dọc đối với ảnh nhị phân hóa
Chương 4: NHẬN DẠNG KÝ TỰ