2012-12-17 47 views
7

Chúng tôi đang tạo robot tự động (trong sự kiện đại học) theo các dấu hiệu và chỉ dẫn nhất định và đi qua một tuyến đường được chỉ dẫn. Các robot sẽ có một máy ảnh gắn ở đầu. Nó sẽ theo các dấu hiệu được vẽ trên con đường phía trước nó, hoặc các bức tường và theo đó đưa ra quyết định của nó. Các biển báo sẽ là các mũi tên xanh (đối với tín hiệu GO), hoặc dấu hiệu RED T là dấu hiệu dừng lại. Robot sẽ quét các ký hiệu này trong Thời gian thực và thực hiện hành động cần thiết. Những dấu hiệu này có thể nằm trên tường ngay trước mặt hoặc được vẽ trên con đường phía trước.Phát hiện đối tượng trong OpenCV và so sánh thời gian thực

Tôi đã thử tìm kiếm các thuật toán hoặc phương pháp biến đổi hình ảnh cần thiết, nhưng chúng tôi hoàn toàn mới vào trường này. Tôi tìm kiếm bạn giúp đỡ về cách vấn đề này có thể được giải quyết và mã cần thiết có thể giúp chúng tôi (Giả sử chúng tôi là người mới bắt đầu).

tôi đã nhìn vào chủ đề sau đây nhưng tôi bối rối: - OpenCV Object Detection - Center Point - How to recognize rectangles in this image? - http://www.chrisevansdev.com/computer-vision-opensurf.html (Tôi không thể sử dụng nó)

Một trong những gợi ý đưa ra cho sự kiện này là chúng tôi có thể mô hình hóa các mũi tên dưới dạng hình chữ nhật và hình tam giác đặt lại với nhau như tìm xem liệu trung tâm của tam giác có nằm ở bên phải của hình chữ nhật đó (có nghĩa là đi đúng) hay không. Tương tự cho T's.

Cảm ơn! :)

+0

Nếu bạn có thể đảm bảo rằng màu đỏ và màu xanh lá cây tương đối độc đáo trong môi trường, vấn đề trở nên đơn giản hơn nhiều, bạn có thể tìm thấy các dấu hiệu bằng cách chỉ tìm kiếm các màu đó ... – Hammer

+1

Bạn cần xác định rõ hơn phạm vi cho sự kiện này . Môi trường không có các dấu hiệu khác? Bạn có thể hiển thị các ví dụ cho các dấu hiệu và đầu vào mẫu từ máy ảnh của bạn không? Bạn có muốn robot này đi nhanh nhất có thể hoặc đang nhấn vào biểu tượng tạm dừng tất cả những gì bạn muốn? Nếu trước đây, các thuật toán có thể được áp dụng sẽ giảm. – mmgp

+0

Có, môi trường được cho là không có các màu hoặc hình ảnh mất tập trung khác. Chỉ là một chiếc máy bay đơn giản có thể là bức tường Trắng với những hình vẽ này. Tuy nhiên, con đường có thể có màu khác, nhưng nó cũng được cho là có cùng kiểu. –

Trả lời

8

Nếu các dấu hiệu trước đây được biết bạn có thể sử dụng phương pháp "nhận dạng đối tượng bằng phát hiện tính năng".

Ý tưởng là bạn có một hình ảnh của dấu hiệu (mũi tên hoặc T) và bạn thực hiện các bước đào tạo sau, ẩn:

1 - Tính năng nhận diện (sử dụng, SURF, NHANH,. ..)

2 - Descriptor trích xuất (từ các tính năng) sử dụng SIFT, freak, vv ...

Sau đó, nó đã đến lúc phần thực. Đối với mỗi khung hình, bạn phải thực hiện tính năng phát hiện và khai thác mô tả tính năng, nhưng sau đó bạn cần phải thực hiện khớp với hình ảnh đào tạo để xem đối tượng nào bạn nhận được.Một ví dụ sẽ hoạt động theo thời gian thực:

cv::FAST detector; 
cv::FREAK descriptor; 
BFMatcher matcher = BFMatcher(NORM_HAMMING,false); 

detector.detect(frame,keypoints_frame); 
descriptor.compute(frame, keypoints_frame,descriptors_frame); 
matcher.match(descriptors_trainning, descriptors_frame); 

Đó sẽ là cách tiếp cận đầu tiên cho khớp, sau đó bạn cần tinh chỉnh và loại bỏ các ngoại lệ. Một số kỹ thuật này

  • Ratio thử nghiệm

  • Chữ thập Kiểm tra

  • RANSAC + homography

Ở đây bạn có một hoàn example.

3

Tôi giả sử bạn có thể nhận được các dấu hiệu trước sự kiện: lấy ký hiệu mũi tên và nhận "sift descriptors" từ anh ấy và lưu chúng trong rô bốt của bạn. Sau đó, trong mỗi khung hình mà rô bốt tìm kiếm màu sắc của biển báo, khi bạn thấy thứ gì đó tương tự như một dấu hiệu, hãy lấy các ký hiệu sift và cố gắng đăng ký giữa các bộ mô tả được lưu trữ và các bộ mô tả mới. nếu bạn thành công, hãy thử tính toán ma trận xoay và dịch giữa dấu hiệu được lưu trữ ban đầu và ký hiệu bạn tìm thấy trên hình ảnh.

Để đọc về sàng lọc, tôi muốn giới thiệu trên trang web này: http://aishack.in/tutorials/sift-scale-invariant-feature-transform-introduction/ Sau khi bạn sẽ hiểu những điều cơ bản của Sift, tôi khuyên bạn nên tải về một số thực hiện thay vì thực hiện điều đó cho mình, đó là công việc rất tẻ nhạt và có nhiều cạm bẫy

BTW Mặc dù sift là "Scale Invariant Feature Transform" Tôi khá chắc chắn rằng nó sẽ làm việc trong trường hợp của bạn cũng mặc dù bạn cũng có "biến đổi phối cảnh".

Hy vọng điều này đã giúp

+3

Ý tưởng là tốt như mô tả SIFT là rất mạnh mẽ, vấn đề là áp dụng chúng thời gian thực. Nếu robot có một bộ xử lý tốt thì không có vấn đề gì, nhưng đối với một sự kiện đại học có thể họ đang sử dụng một máy tính bảng, ví dụ, với cam tích hợp của nó. Sau đó, SIFT sẽ không làm điều đó trong thời gian thực. –

+0

Và nếu SIFT quá chậm, có SURF, ORB, BRIEF, v.v. –

Các vấn đề liên quan