Kết hợp đường viền - tìm đường viền dịch chuyển


16

Tôi tìm thấy đường viền trên hai hình ảnh với cùng một đối tượng và tôi muốn tìm sự dịch chuyển và xoay của đối tượng này. Tôi đã thử với các hộp giới hạn xoay của các đường viền này, sau đó các góc và điểm trung tâm của nó, nhưng các góc của các khung giới hạn không nói chính xác về xoay vòng đường viền vì nó giống nhau cho các góc a + 0, a + 90, a + 180, v.v. độ. Có cách nào khác tốt để tìm xoay và dịch chuyển đường viền không? Có thể một số sử dụng vỏ lồi, khuyết tật lồi? Tôi đã đọc trong Tìm hiểu về OpenCv về các đường viền phù hợp nhưng nó không có ích. Ai đó có thể cho một số ví dụ?

Ví dụ:

1 2 3 4

Tôi muốn phát hiện ví dụ hình vuông màu hồng, và trong trường hợp bút thứ hai. Các ví dụ khác có thể là hình vuông với một số lỗ, ngôi sao, v.v. Như tôi đã nói tôi muốn tạo ra một số thứ không thông thường. Mọi đề xuất đều được đánh giá cao vì tôi muốn thử nghiệm càng nhiều phương pháp càng tốt.


Hình ảnh sẽ giúp ở đây
mirror2image

Tôi muốn làm cho một số chức năng phổ quát. Vì vậy, như hình ảnh thử nghiệm có thể là bất cứ điều gì. Yếu tố hình đơn giản như hình chữ nhật, hoặc hình phức tạp hơn một chút.
krzych

2
Vâng, bạn không thể phù hợp với phương pháp duy nhất cho tất cả các trường hợp. Phương pháp thực tế phụ thuộc vào phạm vi tương phản, ước tính nhiễu, nền và hình dạng - đó là độ mịn, cấu trúc liên kết, v.v ... Đó là lý do tại sao hình ảnh sẽ giúp ích.
mirror2image

Câu trả lời:


4

Bạn có phải lo lắng về sự khác biệt về quy mô giữa các đường viền? Nếu không hơn, bạn có thể chỉ cần tìm trọng tâm của từng đường viền và tính toán độ dịch chuyển bằng cách trừ đi một điểm khác. Sau đó, bạn có thể tính toán các trục chính của các đường viền và tìm góc xoay giữa chúng.

Nếu tỷ lệ có liên quan, thì bạn có thể tính hệ số tỷ lệ bằng cách lấy tỷ lệ của các trục chính tương ứng.


Có quy mô cũng có thể khác nhau. Tôi cũng nghĩ về một cái gì đó tương tự như chuỗi freeman từ opencv tạo ra chuỗi freeman của mỗi đường viền và sau đó so sánh chúng và cố gắng tìm translaton theo cách nào đó, nhưng tôi không thể tìm ra thuật toán tốt cho nó.
krzych

Nó giống như việc tạo hộp giới hạn xoay tối thiểu và thực hiện chuyển động xoay và dịch chuyển của nó. Đã thử phương pháp này và kết quả không hài lòng. Vì vậy, tôi nghĩ rằng phương pháp này không tốt chút nào.
krzych

Bạn có thể cụ thể hơn về lý do tại sao điều đó không làm việc? Là các đường viền chỉ liên quan bằng cách dịch, xoay và chia tỷ lệ, hoặc chúng có thể bị biến dạng theo những cách khác? Một số hình ảnh thực sự sẽ giúp. Nếu bạn cần xử lý các phép biến đổi không liên kết hoặc nhiễu ngẫu nhiên, bạn có thể thử bối cảnh hình dạng. Hãy cho tôi biết, tôi có thể chỉ cho bạn một số giấy tờ.
Dima

Chúng chỉ liên quan bằng cách dịch, xoay và chia tỷ lệ, các biến dạng được kết nối với ít phát hiện đường viền khác nhau trên các ảnh khác nhau. Hình dạng bối cảnh? Bạn có thể mở rộng điều này?
krzych

1
@kzych Có vẻ như vấn đề lớn nhất của bạn ở đây sẽ là tiếng ồn trong việc phát hiện cạnh. Làm thế nào để bạn tìm thấy hộp xoay tối thiểu? Tôi vẫn không rõ tại sao điều đó không làm việc đúng. Hình dạng bối cảnh là một cách để đại diện cho một đường viền. Chi tiết tại đây: vi.wikipedia.org/wiki/Shape_context
Dima

2

Nếu bạn không phải lo lắng về mã chuỗi biến dạng quy mô hoặc dự kiến ​​có thể giúp đỡ ở đây. Nếu bạn có mã chuỗi có hình dạng gần giống nhau với cùng tỷ lệ, bạn có thể tìm thấy bản dịch với tương quan pha FFT một chiều http://en.wikipedia.org/wiki/Phase_correlation

Nếu bạn phải tính đến biến dạng phóng xạ, bạn cũng có thể xem xét khả năng sử dụng các điểm đặc trưng (như các góc) thay vì các đường viền.


Bất kỳ lời khuyên làm thế nào để xây dựng mã chuỗi tốt? Mayby gì đó từ OpenCv (theo như tôi biết nó chỉ có chuỗi freeman)? Hiện tại tôi đang xây dựng mã chuỗi bằng cách sử dụng từng điểm đường viền và tính góc cho trục x của các điểm lân cận, nhưng có thể có ý tưởng nào tốt hơn? Nếu bạn có tham khảo bất kỳ bài báo hay về chuỗi, nó sẽ được đánh giá cao.
krzych

2

Trong câu hỏi bạn nói

Như tôi đã nói tôi muốn làm một số điều không thường xuyên

nhưng tôi e rằng khá khó để tìm ra giải pháp "phổ quát" cho vấn đề này.

Bạn có thể mua một phần mềm định vị mẫu thương mại có sẵn và tích hợp nó vào ứng dụng của bạn, thông thường chúng hoạt động khá tốt cho nhiều ứng dụng. Chỉ cần cung cấp cho bạn một ý tưởng, đây là hướng dẫn tham khảo cho một sản phẩm như vậy http://www.lmi3d.com/sites/default/files/support/4.2.0,70-hexsight_user_guide.pdf

Ngoài ra, bạn có thể phát triển một giải pháp đặc biệt cho một số trường hợp cụ thể (ví dụ cho bút trong hình ảnh của bạn).

Nếu không, bạn có thể nghiên cứu kỹ vấn đề, bắt đầu từ những nền tảng rất cơ bản bắt nguồn từ hình học tính toán ( http://www.cs.sunysb.edu/~alers/files/shape-similarity.shtml ), trong đó "đường viền" của bạn được gọi là "đa giác", đọc những thứ như:

M. de Berg, O. Devillers, M. Kreveld, O. Schwarzkopf và M. Teillaud. Tính toán sự chồng chéo tối đa của hai đa giác lồi theo bản dịch. Khoa học máy tính lý thuyết, 31: 613 Từ628, 1998.

H. Ahn, O. Cheong, C. Park, C. Shin và A. Vigneron. Tối đa hóa sự chồng chéo của hai bộ lồi phẳng dưới các chuyển động cứng nhắc. Hình học tính toán: Lý thuyết và ứng dụng, 37: 3 trận15, 2007.

và kết thúc với "Nhận dạng thời gian thực phân cấp các đối tượng hợp chất trong hình ảnh" của Markus Ulrich , người cộng tác với MVTec , một nhà phần mềm khác bán các công cụ phần mềm nhận dạng đối tượng.

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.