2011-06-30 5 views
6

Sau khi chạy máy dò cạnh Canny trên hình ảnh, tôi đang nhận được các đường thẳng. Nhưng chức năng dòng Hough dường như bị thiếu trên các dòng khá nổi bật khi chạy trên hình ảnh đồ thị của Canny. Tôi chỉ giữ các đường Hough dọc và ngang (dung sai 15 độ). Rất nhiều dòng phụ đang mọc lên nhưng các đường rõ ràng có thể nhìn thấy các hình chữ nhật không bị nhấc lên.Các dòng nổi bật không được phát hiện bởi Hough Transform

Sau đây là đoạn:

cvCanny(img, canny, 0, 100, 3); 
lines = cvHoughLines2(canny, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 35, 20, 10); 

Mục đích chính là để phát hiện các hộp hình chữ nhật biểu thị các nút của danh sách liên kết. Tuy nhiên, chương trình mẫu hình vuông sẽ chỉ phát hiện hình chữ nhật hoàn hảo, không phải nếu đầu mũi tên chạm vào đường viền hình chữ nhật.

Bạn có thể giải thích về các thay đổi đối với hàm dòng Hough giúp tôi có được các đường hough tương ứng với các đường hiển thị rõ ràng trong hình ảnh cạnh của Canny không?

hough

+2

Một lần nữa, lần thứ 5 trong tuần này: tất cả các chức năng xử lý hình ảnh đều sử dụng đúng thông số. Chơi với các tham số bạn đang chuyển tới cvHoughLines2() cho đến khi bạn tìm thấy một tập hợp các tham số thỏa mãn nhu cầu của bạn. – karlphillip

Trả lời

9

(Added:. Một bước tiền xử lý, đề xuất bởi shernshiou)

bước tiền xử lý:

  1. ngưỡng hình ảnh,
  2. Sử dụng kết nối thành phần
  3. Từ kết quả thành phần được kết nối, phát hiện và xóa các đối tượng nhỏ - các bộ gồm bốn chữ số bên dưới và ở giữa mỗi hộp.

(Ghi chú. Bước ngưỡng chỉ đơn giản là một bước tiền xử lý yêu cầu của kết nối thành phần.)


Nếu bạn muốn để phát hiện dòng chỉ một cách hoàn hảo theo chiều ngang và dọc, đề nghị của tôi là để thực hiện tăng cường cạnh ngang và dọc (qua chập) trước khi biến đổi Hough.

Điều này sẽ làm cho các đường thẳng thực sự có khả năng "cao điểm" hơn trong chiếu Hough và tăng cơ hội của đường được chọn bởi OpenCV.

Các bước sẽ là:

  1. Tính hình ảnh cạnh Canny từ đầu vào
  2. Áp dụng Sobel lọc ngang trên hình cạnh Canny
  3. Áp dụng Hough phát hiện dòng trên theo chiều ngang tăng cường hình ảnh cạnh.
  4. Áp dụng bộ lọc Sobel dọc trên hình ảnh cạnh của Canny. (Lưu ý: sử dụng kết quả bước 1, không phải bước 2)
  5. Áp dụng phát hiện dòng Hough trên hình ảnh cạnh nâng cao theo chiều dọc.
  6. Kết hợp các đường ngang và dọc và hiển thị kết quả.
1

người thường không sử dụng dòng hough thẳng ra khỏi hộp. Phương pháp thông thường liên quan đến hình ảnh xử lý trước (ví dụ: thay đổi độ sáng, thay đổi màu sắc, làm sắc nét hình ảnh ...).

+0

Cảm ơn, bạn đã nhắc tôi về hai bước có thể được thêm vào các đề xuất: làm nổi bật hình ảnh và sau đó sử dụng thành phần được kết nối để phát hiện các chữ cái nhỏ (chữ số) và xóa chúng trước khi thực hiện Hough. – rwong

6

Bạn đã đọc the documentation phải không?

Tôi có một vài lựa chọn cho bạn:

  1. Các dòng bạn bỏ lỡ (đáng chú ý là hầu hết các đường thẳng đứng bên trái trên hộp bìa phải trong ảnh) khá ngắn. Hãy thử hạ ngưỡng (biến đầu vào thứ 5 của cvHoughLines2). Ngưỡng này chỉ là số lượng pixel phải nằm trên dòng. Từ hình ảnh tôi đoán rằng có thực sự ít hơn 35 pixel trên các dòng bạn bỏ lỡ.
  2. Biến đầu vào thứ 6 cho biết độ dài dòng tối thiểu. Tôi giả sử đây là pixel, vì vậy với tham số thứ 5 bạn yêu cầu 35 pixel trên dòng, nhưng bạn tìm kiếm các dòng 20 pixel hoặc lâu hơn. Cách bạn đặt biến này là không hoạt động. Giảm biến số thứ 5, tăng số này nếu bạn đang tìm kiếm nhiều dòng ngắn vô ích.
  3. Giảm thông số thứ 7 để không cho phép những khoảng trống lớn trong dòng của bạn. Điều này sẽ loại bỏ một số dòng nghiêng.

Nói tóm lại, hãy thử nó một lần nữa với các giá trị khác nhau cho các thông số 5,6 và 7.

Tôi muốn thử một số giá trị thấp hơn các thông số 5 và 7, và một giá trị tương tự hoặc cao hơn một chút cho 6. Bởi vì 2 trên 5 nên luôn luôn thấp hơn hoặc bằng 6 để có hiệu lực. 7 ít nhất phải bằng sự khác biệt giữa 5 và 6 nếu 5 thấp hơn.