Bài này là bài tiếp theo của Nhận diện biển số xe hơi – Phần 1/3 tìm biển số. Sau khi thực hiện xong bước 1 thì ta được biển số đã crop, bước 2 sẽ tách ký tự ra để bước 3 nhận diện ký tự.
Để dễ dàng cho việc tìm ký tự, ta quy định kích thước chuẩn của biển số để tách ký tự dễ dàng hơn, source code gốc là 33×144 pixels. Và nhắc lại lần nữa, thuật toán này chỉ là đề tài nghiên cứu chứ không phải sản phẩm thương mại, do đó chỉ phù hợp với các hình ảnh sắc nét và nhìn trực diện.
Dựa trên đặc điểm là các ký tự màu đen nằm trên nền trắng, nên thuật toán khá giống như bài viết Sử dụng floodfill để tìm ký tự
Các bước thực hiện
– Tiền xử lý
– Tìm contours
– Lọc những contours hợp lý
Tiền xử lý
Bước này nhị phân hóa để lấy các ký tự, do các ký tự thì màu đen nên phải nghịch đảo lại bằng tham số cv::THRESH_BINARY_INV. Sau bước này được hình ảnh như bên dưới
Tìm contours
Khi nhìn kỹ vào biển số, thấy được trong biển số đã crop có các ký tự, dấu gạch nối và “trash pixels” bên dưới góc phải biển số có màu trắng. Vùng màu đen là background không có giá trị, do đó khi tìm contours thì kết quả là các contours bao lấy các pixels màu trắng mà thôi.
Code để tìm contours như sau:
1 2 3 4 |
cv::findContours(matBinary, contours, // a vector of contours CV_RETR_EXTERNAL, // retrieve the external contours CV_CHAIN_APPROX_NONE); // all pixels of each contours |
Trong đó CV_RETR_EXTERNAL nghĩa là chỉ lấy những contours bao lấy ký tự, những contours nằm bên trong ký tự (số 9, số 6, số 0 sẽ có contours nằm bên trong ký tự). Sau bước này ta được 9 contours, bao gồm: 7 ký tự, 1 dấu gạch nối, 1 trash pixels góc dưới bên phải biển số.
Lọc contours
Chúng ta chỉ quan tâm tới 7 ký tự biển số, do đó để biết contours nào đang chứa ký tự thì dựa vào các quy luật gồm:
– width luôn nhỏ hơn height
– Chiều cao tối thiểu 15 pixels
– Tỉ lệ aspect (width/height) phải lớn hơn 0.2 và nhỏ hơn 0.5. Đây là tỉ lệ với biển số nhìn trực diện, nếu có biển số nằm nghiêng phải thay đổi cho phù hợp
– Tỉ lệ pixel màu trắng trong mỗi ký tự phải nhỏ hơn 80%
Sau khi áp dụng những quy luật đó thì ta còn lại các contours hợp lệ:
Vậy là hoàn thành bước 2 của công việc nhận diện biển số xe hơi, các ký tự vừa tìm được sẽ được dùng để nhận diện ở bước 3
Đọc tiếp: Nhận diện biển số xe hơi – Phần 3/3 nhận diện ký tự