2012-04-21 61 views
13

Tôi đã phát hiện hình chữ nhật làm việc với phát hiện đường viền và áp dụng đa giác với OpenCv để lấy vị trí của hình chữ nhật trước khi điều chỉnh phối cảnh. Và nó hoạt động rất tốt. Nhưng một số người trong nhóm của tôi đề nghị thay đổi Hough thay thế. Tôi tự hỏi nếu có bất kỳ lợi thế của việc sử dụng chuyển đổi Hough để phát hiện hình chữ nhật.Biến đổi hough vs Phát hiện đường viền để nhận dạng hình chữ nhật với chiếu phối cảnh

Cập nhật: Tôi đã thử cả hai phương pháp. Trong ví dụ của tôi, cả hai phương pháp đều hoạt động tốt sau khi phát hiện cạnh Canny. Nhưng kể từ khi chuyển đổi Hough tạo ra các dòng, chúng ta phải giả định một số thứ như độ dài của đường và khả năng kết nối của các đường và nên thực hiện các tính toán bổ sung như tìm kiếm các đường kết nối và tìm các điểm góc từ các đường kết nối. Cá nhân, tôi thích phương pháp đường viền tốt hơn vì khái niệm của nó đơn giản hơn. Với phương thức này, bạn chỉ cần tìm các đường bao có thể được xấp xỉ với các đa giác được đóng và lồi với 4 góc và điều chỉnh các đa giác cho các phép chiếu phối cảnh của chúng. Đó là về nó.

Trả lời

12

Bạn sắp nhận được loại kết quả nào với tính năng phát hiện đường viền? Bạn có ví dụ nào không?

Biến đổi hough phải hoạt động tốt để phát hiện hình chữ nhật IFF bạn có thể giả định rằng các cạnh của hình chữ nhật là những đường nét nổi bật nhất trong hình ảnh của bạn. Sau đó, bạn có thể chỉ đơn giản là phát hiện 4 đỉnh núi lớn nhất trong không gian hough và bạn có hình chữ nhật của bạn.

Tác phẩm này ví dụ với ảnh của một tờ giấy trắng ở phía trước nền tối.

Lý tưởng nhất là bạn sẽ xử lý trước hình ảnh với các toán tử mờ, ngưỡng, hình thái để loại bỏ bất kỳ cấu trúc quy mô nhỏ nào trước khi biến đổi hough.

Nếu có nhiều hình chữ nhật nhỏ hơn hoặc các loại đường nổi bật khác trong hình ảnh của bạn, việc phát hiện đường bao có thể là lựa chọn tốt hơn.

Một số ưu điểm chung của các hough chuyển ra khỏi đỉnh đầu của tôi:

  • Hough transform vẫn có thể làm việc nếu một phần của hình chữ nhật bị che khuất hoặc ra khỏi khung.
  • Biến đổi hough phải nhanh hơn phát hiện đường viền, tôi đoán vậy?
  • Biến đổi thô sẽ bỏ qua mọi thứ không phải là đường thẳng, vì vậy bạn có thể thành công hơn với hình ảnh lộn xộn. (nếu các cạnh hình chữ nhật là các đường nổi bật nhất)

Cuối cùng, điều này có thể phụ thuộc vào dữ liệu đầu vào. Bạn có ví dụ nào không?

Có lẽ cách tiếp cận kết hợp sẽ là tốt nhất? thấy Combining Hough Transform and Contour Algorithm for detecting Vehicles License-Plates

tôi đã làm một số thí nghiệm trong việc sử dụng hough biến để phát hiện hình chữ nhật một khi trở lại, bạn có thể thấy một số kết quả sơ bộ ở đây: http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=14491&start=9

Thật không may đó là tất cả những gì tồn tại ở thời điểm này, dự án hiện đang về gián đoạn, cuối cùng tôi hy vọng sẽ tiếp tục nó khi tôi ít bận rộn hơn.

Tôi rất quan tâm đến kết quả của bạn khi so sánh.

(Nếu bạn đang làm chỉnh góc độ, cũng kiểm tra proportions of a perspective-deformed rectangle)

+0

Cảm ơn câu trả lời của bạn. Trên thực tế, mã của tôi không khác nhiều so với mẫu opencv [hình vuông] (https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/squares.cpp?rev=4079) Những gì tôi có nghi ngờ là làm thế nào bạn có thể thực sự phát hiện các hình chữ nhật với sự biến đổi Hough vì phương pháp đó về cơ bản là để phát hiện dòng. Tôi đoán tôi phải đi qua tất cả các dòng và tìm các đường kết nối của nó và xem chúng có bị đóng không. –

+0

Vâng, tôi đã thêm một lưu ý về điều đó. Phát hiện hình chữ nhật với hough hoạt động tốt nếu hình chữ nhật là cấu trúc lớn nhất và nổi bật nhất trong ảnh của bạn. – HugoRune

5

Đang tìm kiếm các phát hiện đường viền với hough biến đổi đưa tôi đến đây SO.

Để giúp người tìm kiếm tương lai, bài viết trên blog này có một hương tốt để làm điều này với opencv:
http://opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects/

Khái niệm:
1. Lấy bản đồ cạnh - khôn ngoan, Sobel
2. Phát hiện dòng với Hough transform
3. Lấy các góc bằng cách tìm giao điểm giữa các dòng.
4. Kiểm tra xem đường cong đa giác gần đúng có 4 đỉnh với approxPolyDP
5. Xác định góc trên bên trái, dưới cùng bên trái, trên cùng bên phải và góc dưới cùng bên phải.
6. Áp dụng phép biến đổi phối cảnh với getPerspectiveTransform để lấy ma trận chuyển đổi và warpPerspective để áp dụng phép chuyển đổi.

+1

Liên kết hiện dẫn đến một trang spam, hãy thử https://github.com/bsdnoobz/opencv-code/blob/master/quad-segmentation.cpp – dirkjot

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