Các lựa chọn thay thế cho biến đổi Hough để phát hiện cấu trúc giống như lưới


16

Tôi có một hình ảnh bao gồm nhiều "góc" tạo thành hình dạng lưới:

nhập mô tả hình ảnh ở đây

Sau một số tìm kiếm, Hough có vẻ phù hợp, bởi vì nó không gặp rắc rối bởi các ngắt dòng. Tuy nhiên, vấn đề tôi gặp phải là các dòng của tôi là 'béo' và bất kỳ phát hiện cạnh nào tôi chạy (Canny trong trường hợp này), chọn ra các cạnh của dòng, chứ không phải ở giữa:

nhập mô tả hình ảnh ở đây

Điều này có nghĩa là biến đổi Hough kết thúc bằng cách chọn ra một (hoặc cả hai) 'bên' của các đường lưới của tôi chứ không phải ở giữa.

nhập mô tả hình ảnh ở đây

Cho rằng tôi biết những gì tôi đang tìm kiếm (hình dạng giống như lưới này, luôn theo cùng một hướng), có cách nào tốt hơn để thực hiện phần 'phát hiện cạnh' để đưa cho tôi các đường trung tâm, hoặc tôi nên tìm kiếm tại một phương pháp hoàn toàn khác nhau?


Đối với ngữ cảnh, lưới này sẽ được so sánh với lưới danh nghĩa để thực hiện hiệu chỉnh máy ảnh Tsai.
Stewol

"Tôi phát hiện cạnh, chọn ra các cạnh của dòng" Có, bởi vì phát hiện cạnh chuyển đổi các cạnh thành các đường vân và hình ảnh của bạn đã có các đường vân. Một cạnh là một ranh giới giữa ánh sáng và bóng tối.
endolith

Câu trả lời:


10

Biến đổi Hough thực sự sẽ giúp lấy lưới trong trường hợp này. Để "làm mỏng" các dòng, bạn có thể muốn xem xét hoạt động của Skeletonization

Điều đó sẽ tạo ra một hình ảnh như thế này: Đầu ra Skeletonization

Do cách hoạt động của bộ xương, nó vẫn sẽ tạo ra một số dòng có vẻ không liên quan đến lưới nhưng những dòng này hướng về các hướng "sai" không phải là nhiều (ít nhất là trong hình ảnh đã cho) gây nhầm lẫn cho việc phát hiện dòng của Hough Transform quá nhiều và rõ ràng nó sẽ chọn hai bộ dòng chính ở các hướng khác nhau. (Đây là cách đầu ra HT trông như thế nào :) nhập mô tả hình ảnh ở đây

Nếu bạn đang sử dụng MATLAB, bạn có thể muốn kiểm tra trang trợ giúp này


Cảm ơn! Điều này giúp rất nhiều. Chưa có giấy phép MATLAB của tôi, nhưng tôi đã thử sử dụng SimpleSkeletonization của AForge và nó hoạt động tốt hơn ... Mặc dù vẫn chưa hoàn hảo. Tôi sẽ xem lại chủ đề này sau khi tôi nhận được một số dữ liệu thực tế để kiểm tra nó.
Stewol

Bạn có thể muốn thử đập ảnh gốc của mình trước ở một số ngưỡng dường như đang tạo ra các đường lưới chất béo "tối ưu". Điều tôi muốn nói là tối ưu là chúng ít nhất được kết nối. Điều đó có thể cải thiện hiệu suất của quá trình khung xương nhưng bạn sẽ có thêm một tham số để xác định (ngưỡng). Có lẽ cũng đáng để xem xét cách cải thiện việc thu nhận hình ảnh.
A_A

vâng, như tôi đã nói, khi tôi có dữ liệu thực sự để chơi, sẽ đáng để tôi dành thời gian để tinh chỉnh hệ thống. Một nghi ngờ lớn mà tôi có về Hough nói chung là sự rời rạc của theta sẽ hoạt động chống lại độ chính xác của pixel phụ mà chúng ta cần. (Điều đó, và tôi không hoàn toàn tin rằng quang sai của ống kính sẽ không có nghĩa là các đường thẳng có thể bị cong, không thẳng ...)
Stewol

11

Một thay thế cho Biến đổi Hough sẽ là Biến đổi Radon ( 1 , 2 ). Một mô tả sơ bộ về thuật toán để phát hiện cấu trúc giống như lưới có thể trông như thế này:

1. Perform Radon Transform from 0 to 180 degrees.
2. Find the two highest maxima in the angle bins.
3. For the two angles with maximal amplitude find the local maxima within the bin.
4. You can use the constraint that the maxima should have even spacing to deal with outliers.

CHỈNH SỬA :

Dưới đây là đoạn trích matlab nhỏ để minh họa bước 1-3:

im = imread('grid.png');
[R, xp] = radon(im, 0:180);
imagesc(0:180, xp, R)

Kết quả của sự biến đổi radon

plot(max(R)) % the two maxima are at 65 & 117 degrees

Cực đại trên mọi góc độ

plot(R(:, 65))

Cực đại ở 65 độ

plot(R(:,117))

Cực đại ở 117 độ

Để trả lời câu hỏi của bạn từ các bình luận: Tôi xuất hiện từ một hình ảnh ví dụ mà bạn cung cấp, phương pháp này mạnh mẽ hơn trước các khiếm khuyết nhỏ trong lưới được phát hiện. Bộ xương sẽ hiếm khi tạo ra các đường thẳng có thể là một bất lợi cho Biến đổi Hough tiếp theo.


Cảm ơn, bạn có thể nói với tôi một vài từ về lợi thế mà bạn mong đợi Biến đổi Radon mang lại cho tôi, so với Biến đổi Hough không?
Stewol

@benjol, tôi cập nhật câu trả lời của tôi.
bjoernz

Rất đẹp, cảm ơn rất nhiều. Khi IT cho tôi quyền truy cập vào Matlab, tôi sẽ dùng thử!
Stewol

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.