Kết nối các cạnh được phát hiện bởi một máy dò cạnh


14

Tôi có một hình ảnh nhị phân thu được từ một máy dò cạnh canny. Các cạnh không được phát hiện độc đáo ở trung tâm và tôi cần tham gia chúng. Sự kết nối của các cạnh là định hướng và phụ thuộc khu phố. Tôi cần kết nối các đỉnh nếu chúng ở dưới một ngưỡng (giả sử khoảng cách dưới 5 pixel). Nếu các tính năng gần như tuyến tính của tôi được định hướng độc đáo, ngưỡng này sẽ được nới lỏng. (Đây là trường hợp tốt nhất.) hình ảnh

Tôi đã thử biến đổi Hough, nhưng nó không hoạt động với tôi vì tôi không có đường thẳng. Sự giãn nở và xói mòn cũng không tốt; họ làm cho hình ảnh lộn xộn hơn.

Cách tiếp cận tôi đang cố gắng là đầu tiên phát hiện các đỉnh và nút (trong MATLAB với bwmorph) và sau đó tạo các lá như một tính năng riêng biệt. Điều này được thực hiện như sau:

  1. Quét trong cửa sổ 3x3, tìm hàng xóm.
  2. Đi qua đối tượng kết nối hoàn chỉnh.
  3. Cố gắng để phù hợp với một dòng (hoặc có thể là một đa thức bậc hai).
  4. Kiểm tra từng tính năng nếu nó có giá trị kết nối hay không.

Việc thực hiện không đơn giản vì phần ra quyết định trong đó các đỉnh cần được kết nối là khó khăn.


Tôi tìm thấy một giải pháp thú vị để tìm các chi nhánh. MATLAB có thể dễ dàng cung cấp cho các vị trí các nút. MATLAB cũng có thể gắn nhãn các tính năng được kết nối. Vì vậy, bạn có thể chọn một tính năng được kết nối. Tìm các nút. Đặt các nút này thành 0. Về cơ bản ngắt kết nối feaure và dán nhãn lại. Bạn sẽ có cành trên cây. Điều này đòi hỏi ít lập trình thủ công và kết quả có vẻ tốt. Một số đầu vào?
Naresh

Về phần kết nối, bây giờ tôi nghĩ đến việc tìm kiếm các tính năng lớn và xem xét chúng đáng tin cậy hơn. Sau đó, nếu chúng là các đường thẳng, (kiểm tra chất lượng thể dục), chuyển đổi nó thành tọa độ cực và tìm kiếm vùng lân cận như chuyển đổi hough. Đối với các tính năng lớn, bán kính tìm kiếm là lớn (tỷ lệ với kích thước). Tôi đang thực hiện mã này. Kết quả trên đường đi. Xin vui lòng cho ý kiến.
Naresh

Câu trả lời:


4

Đây có thể không phải là giải pháp hoàn chỉnh, nhưng sẽ cho bạn hướng tốt.

Về cơ bản, các tiêu chí quan trọng để nói rằng các cạnh phù hợp là gì? Rằng "cục bộ" độ dốc của cạnh khớp và trong một chừng mực nào đó khoảng cách là hợp lý so với thời gian cạnh liên tục.

Nếu bạn có các cạnh hình học, như các đường thẳng dài, Hough sẽ thực hiện công việc rất liền mạch ngay lập tức. Nhưng điều này không hoạt động khi các cạnh là đường cong tùy ý. Trong trường hợp này, bạn vẫn có thể nghĩ đường cong là các phân đoạn không đổi thông minh gần như mảnh (đủ tốt trong trường hợp của bạn), do đó, bạn nên lấy Hough cục bộ. tức là bạn có thể lấy một phần nhỏ của hình ảnh (giả sử một khối) tính toán Hough và xác định một số đỉnh. Dựa trên điều này, bạn có thể xác định rằng khử nhiễu đang tạo ra khoảng cách có ý nghĩa, nếu vậy, hãy giữ nó hoặc tiếp tục.

Khi các khoảng trống nhỏ hơn được lấp đầy, bạn có thể mở rộng tương tự để chiếm kích thước lớn hơn. các đỉnh sẽ nhiều hơn, nhưng bạn có thể chọn ít hơn từ nó.


cảm ơn Dipan, tôi cũng nghĩ về điều đó Nó sẽ được hoạt động tốn kém nhưng tôi có thể trích xuất một số thông tin. Nhưng đôi khi biến hình Hoguh cũng không cho tôi các đường kết nối. Hough chỉ chăm sóc các đường thẳng hoàn hảo. Và không quan tâm đến sự kết nối của các pixel. Nó chỉ phù hợp với một dòng đến 3 pixel ngẫu nhiên trở lên trên một đường thẳng. Tôi đang mã hóa giả thuyết của mình. Tôi sẽ đăng kết quả ở đây để thảo luận thêm. Naresh
Naresh

θ

4

Điều đó sẽ không đơn giản thực sự ... Bạn có thể thử làm việc hoàn toàn với cấu trúc Biểu đồ. Đầu tiên trích xuất tất cả các pixel được kết nối từ hình ảnh và chèn chúng vào Biểu đồ nơi các nút lân cận được kết nối với một cạnh. Bạn có thể loại bỏ các Đồ thị nhỏ hơn một số nút M (để loại trừ các điểm nhỏ không liên quan đến hình ảnh).

Khi kết thúc quá trình này, bạn sẽ có một bộ Đồ thị bị ngắt kết nối. (Đánh giá từ hình ảnh của bạn, đây không phải là Cây chính xác vì có chu kỳ trong đó)

Bạn có thể tìm thấy các điểm cực trị của mỗi Biểu đồ (các pixel cực trong ngoại vi của mỗi Biểu đồ) bằng cách bắt đầu từ một số nút ngẫu nhiên và thực hiện DFS .

Khi kết thúc quá trình này, bạn sẽ có một bộ tọa độ pixel cho mỗi Biểu đồ tương ứng với các điểm cực trị nơi các kết nối có nhiều khả năng hình thành.

Bây giờ bạn có thể thử kết nối các điểm lân cận điểm cực gần nhất (với khoảng cách <= 5) chỉ bằng một đường thẳng.

Nhưng, nếu bạn muốn tính đến độ dốc của đoạn đường dẫn đến pixel cực trị đó, bạn có thể cố gắng "khớp một đường" với N pixel PRIOR để đạt được pixel cực trị đó. Vì vậy, nếu N = 5, thì 5 pixel cuối cùng của một nhánh sẽ được sử dụng để ước tính một dòng.

Do đó, đối với mỗi cặp hàng xóm gần nhất, giờ đây bạn cũng có một thứ khác để sử dụng làm tiêu chí để đánh giá xem có nên kết nối hai phân đoạn hay không (ví dụ: Khoảng cách điểm cực trị <= 5 pixel VÀ độ dốc đường xấp xỉ bằng nhau).

Để giảm thiểu tác động của tiếng ồn có thể làm cho các đường kẻ của bạn xuất hiện lởm chởm gần các mẹo của chi nhánh (và do đó làm sai lệch ước tính độ dốc của bạn), bạn có thể thử áp dụng một bước đơn giản hóa cho Biểu đồ của mình (đây là một điểm khác (ngoài DFS ở trên) làm việc với cấu trúc đồ thị). Ví dụ, bạn có thể xóa các nút tiếp theo của Biểu đồ sẽ làm cho đường "uốn cong" ở các góc lớn hơn một số điểm bị cắt (đối với một cái gì đó phức tạp hơn, vui lòng xem tại đây ). Theo cách này, bạn sẽ điều chỉnh các đường "đơn giản" hơn, gần đúng với hướng của một phần lớn hơn của phân đoạn được hình thành bởi các pixel hình ảnh.

Điều đó có thể sẽ dẫn đến kết nối tốt cho phần lớn các trường hợp (đánh giá bằng hình ảnh bạn đã đăng) nhưng nó vẫn sẽ để lại cho bạn một số thách thức. Ví dụ, làm thế nào một mẫu bị gián đoạn hình chữ "Y" trong đó một trong các nhánh bị gián đoạn gần điểm kết nối được kết nối? (nghĩa là bạn có một đường cong "liên tục" phải được kết nối với một đoạn đường "hòa trộn" với nó). Có lẽ bạn có thể xem lại mức độ phổ biến của các trường hợp như vậy và sửa đổi các tiêu chí kết nối của bạn sau này.

Ngoài ra, có lẽ sẽ đáng để kiểm tra cách bạn có thể cải thiện việc thu thập hình ảnh của mình (ví dụ tăng độ phân giải).


Cảm ơn cho một phản ứng tốt. Vâng, quan sát của bạn là đúng. Nó không phải là một cái cây, vì vậy tốt hơn để làm một biểu đồ. Điều này sẽ giúp tôi trong việc tìm chu kỳ cũng. Điều đó là, MATLAB đã triển khai biểu đồ trong hộp công cụ bioinfo, mà tôi không thể cho rằng hầu hết mọi người sẽ có. Hầu hết tôi có thể đi là hộp công cụ xử lý hình ảnh. Douglas-peucker cũng là một cái gì đó tôi xem xét. Nhưng sau khi tham khảo ý kiến ​​một chuyên gia về GIS, tôi nhận ra nó có thể khiến mọi thứ phức tạp hơn và tôi có thể có các đường giao nhau. Ngoài ra, tôi cũng cần xem xét các phân đoạn dòng khác nhau trong một biểu đồ, vì tôi cần 10 pixel để tạo một dòng và tôi có thể đã có một phân nhánh.
Naresh
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.