I. Phương pháp được đề xuất1. Lấy ảnh chụp từ camera2.Chuyển đổi thang màu sắcẢnh chụp từ camera khi được mã hóa thường được thẻ hiện dưới dạng RGB (Red, Green, Blue). Trong bài toán đếm số lượng trứng hay chai nước ngọt, màu sắc của vật thể không phải là đại lượng đáng quan tâm, nên ta chuyển qua hệ màu HSV (Hue - sắc thái, Saturation - độ bão hòa (độ đậm nhạt), Value - độ sáng tối). 3. Lấy ra độ bão hòa (đậm nhạt) của ảnhNhư vừa đề cập, sắc thái (màu sắc vạt thể) không đáng quan tâm, và vì khay chứa đồ luôn đi qua và được chụp ở một điều kiện ánh sáng như nhau, nên độ sáng tối cũng không cần thiết. Ở bài toán này, các tác giả chỉ lấy giá trị độ bão hòa (độ đậm nhạt) của ảnh để tiếp tục phân tích. 4. Sử dụng Gaussian FilterGaussian Filter có tác dụng làm giảm nhiễu từ ảnh. Có thể do chất lượng camera hoặc bản thân vật thể, 2 pixels trên quả trứng hoàn toàn có thẻ có độ đậm nhạt rất khác biệt, điều này khiến cho việc xử lý ảnh trở lên phức tạp và nhiều nhiễu. Để giảm thiểu sự khác biệt này hay làm mượt bức ảnh, các tác giả đã áp dụng gaussian filter: giá trị pixels sẽ bằng các giá trị trung bình của các pixels gần nó, với hệ số cho mỗi pixel được dựa trên phần bố chuẩn (Normal Distribution). Vùng áp dụng gaussian filter càng lớn (sigma càng lớn), thì ảnh sẽ càng mờ và mượt như ví dụ dưới đây 5. Sử dụng ngưỡng OtsuCác giá trị độ đậm nhạt của mỗi pixel sẽ nằm trong khoảng từ 0 đến 255. Để nhìn rõ đường viền của các vật thể hơn, ta sẽ chọn một ngưỡng α\alpha để với mỗi pixel có giá trị nhỏ hơn
α\alpha, ta gán pixel giá trị 0; pixcel có giá trị lớn hơn α\alpha, ta gán pixel giá trị 255. 6. Phương pháp phát hiện đường viền SobelSử dụng 2 bộ lọc Gx Mask và Gy Mask dưới đây để xác định được sự thay đổi độ lớn theo chiều dọc và chiều ngang của ảnh Giá trị Gx, Gy được tính bằng tổng đại số của tích 9 giá trị pixel với 9 giá trị trong Gx Mask hoặc Gy Mask. Để ý kĩ, ta sẽ thấy giá trị Gx Mask từ trái qua phải tăng dần => khi thực hiện phép tính Gx, nếu giá trị pixel trên ảnh có sự tháy đổi lớn từ trái qua phải hay ngược lại, Gx sẽ rất lớn hoặc rất bé. Nếu giá trị 9 pixel không có sự thay đổi từ trái qua phái => Gx ~ 0. Ta trượt Gx Mask và Gy Mask qua toàn bộ ảnh từ trái qua phải, từ trên xuống dưới, ta sẽ biết được tại một vị trí, liệu ảnh có sự chuyển dịch giá trị lớn không. G đại diện cho độ lớn của sự thay đổi (viền của ảnh). Giá trị atan = Gx/Gy đại diện cho hướng của sự thay đổi (chiều đi của viền ảnh tại điểm đó). Sử dụng hướng atan và độ lớn G, ta có thể biểu diễn viền 1 cánh hoa cùng hướng sự thay đỏi tại mỗi pixel (màu sắc ứng với hướng sự thay đổi) như hình dưới đây. Ở ứng dụng nhận diện trứng hay chai nước ngọt, ta chỉ quan tâm đến viền => giá trị G (độ lớn của sự thay đổi) 7. Phương pháp biến đổi HoughPhương pháp biến đổi Hough cho phép kết nối đường viền của vật thể. Để nhận diện trứng hay chai nước ngọt, biến đổi đường tròn Hough được sử dụng. Tuy thế, để dễ hiểu hơn về phương pháp này, ta cùng tìm hiểu biến đổi đường thẳng Hough, biến đổi đường tròn dựa trên lý thuyết tương tự. Đường thẳng được đại diện bởi hàm số y = ax + b, với x, y là biến số là các trục tọa độ; a,b là tham số. Với biến đổi Hough, ta coi x, y là tham số và a, b là biến số: b = -xa + y. Giá trị x, y là giao của 2 đường thẳng trên hệ tọa độ mới Ta lại có thể tiếp tục biểu diễn đường thẳng b = -xa + y dưới dạng acos θ\theta + bsin$\theta$ = ρ\rho với đại lượng θ\theta là góc với trục a, còn ρ\rho là khoảng cách từ tâm tọa độ tới đường thẳng (Trong hình dưới đây, a, b đã được thay thế bởi x, y) Với mỗi điểm trên ảnh, ta quay tất cả các đường thẳng (màu xanh) có thể để tìm các giá trị tương ứng θ\theta và ρ\rho. Mỗi một đường thẳng đi qua 1 điểm sẽ cho 1 cặp giá trị (θ\theta, ρ\rho). Tất cả các đường thẳng đi qua 1 điểm sẽ cho 1 đường cong trên hệ tọa độ θ\theta và ρ\rho. Cặp giá trị (θ\theta, ρ\rho) được đi qua càng nhiều (màu vàng), càng chứng tỏ tồn tại nhiều điểm trên hình ảnh gốc có chung 1 đường thẳng đi qua => liên kết cả điểm này, ta sẽ tìm được đường thẳng trên bức ảnh. Phương pháp phát hiện đường tròn Hough được dựa trên nguyên lý tương tự.II. Kết quảVới việc đếm vật thể hình tròn, riêng biệt, không bị đè hay che khuất như trong điều kiện nhà máy, phương pháp này đạt kết quả tuyệt đối
III. Ứng dụng mẫuÁp dụng nhận diện hình tròn trong logo CV2 Mọi người có thể tham khảo đoạn code mẫu dưới đây:
Với ảnh OpenCV2 logo như đầu vào, ta dùng độ sáng tối (channel v) thay cho độ đạm nhạt (channel s)
IV. Kết luậnBằng cách sử dụng một loạt các phương pháp biến đổi hình ảnh, cùng với xác định những ngưỡng bằng tay (ví dụ như tham số giới hạn bán kính của các đường tròn trong hàm cv2.HoughCircles), ta có thể đếm được số lượng vật thể một cách dễ dàng với những bài toán vật thể tách biệt, không đè lên nhau hay bị che khuất. Lợi thế của phương pháp này là không yêu cầu cấu hình máy lớn và tốc độ tính toán xử lý rất nhanh, phù hợp với bài toán liên quan đến camera, khi các khung hình được đưa vào liên tục. Phương pháp này hoàn toàn có thể được ứng dụng đếm vật thể trong các khu công nghiệp. Hy vọng các bạn có thể ứng dụng phương pháp này vào thực tế hoặc hiểu thêm về những hướng đi xử lý ảnh thông qua bài viết này. V. Tài liệu tham khảo
|