6

Tôi hiện đang phải đối mặt với một vấn đề khá dễ giải quyết nhưng cho đến nay tất cả những gì tôi tiếp cận đều thất bại vì vậy tôi đang chuyển sang bạn để được trợ giúp.Hình thức tiếp cận phù hợp với mô hình trong Computer Vision

Tôi nghĩ rằng vấn đề được giải thích tốt nhất với một số hình minh họa. Tôi có một số mẫu như hai:

Pattern 1 Pattern 3

Tôi cũng có một hình ảnh tương tự (có lẽ tốt hơn, vì ảnh này có nguồn gốc từ khá kém thắp sáng) này:

Picture

(Lưu ý cách mẫu được chia tỷ lệ thành phù hợp với kích thước của hình ảnh)

Mục tiêu cuối cùng là công cụ xác định liệu người dùng cho thấy một ngón tay cái lên/ngón tay cái xuống cử chỉ và cũng có một số góc ở giữa. Vì vậy, tôi muốn phù hợp với các mô hình chống lại hình ảnh và xem cái nào giống với hình ảnh nhiều nhất (hoặc chính xác hơn, góc tay đang hiển thị). Tôi biết hướng ngón tay cái đang hiển thị trong hoa văn, vì vậy nếu tôi tìm thấy hình mẫu trông giống hệt tôi cũng có góc.

Tôi đang làm việc với OpenCV (với Python Bindings) và đã thử cvMatchTemplate và MatchShapes nhưng cho đến nay nó không thực sự làm việc đáng tin cậy.

Tôi chỉ có thể đoán tại sao MatchTemplate không thành công nhưng tôi nghĩ rằng một mẫu nhỏ hơn với màu trắng nhỏ hơn phù hợp hoàn toàn với vùng màu trắng của hình ảnh, tạo yếu tố phù hợp nhất mặc dù rõ ràng là chúng không thực sự giống nhau.

Có một số Phương thức ẩn trong OpenCV mà tôi chưa tìm thấy hoặc có thuật toán đã biết cho các loại vấn đề đó mà tôi nên triển khai lại không?

Chúc mừng năm mới.

Trả lời

6

Một vài kỹ thuật đơn giản có thể làm việc:

  1. Sau binarization và phân đoạn, tìm đường kính của blob (còn gọi là khoảng cách xa nhất giữa các điểm, hoặc trục chính) Feret của.
  2. Tìm vỏ lồi của tập hợp điểm, đổ đầy và coi nó là vùng được kết nối. Trừ hình ảnh gốc bằng ngón cái. Sự khác biệt sẽ là khu vực giữa ngón tay cái và nắm tay, và vị trí của khu vực đó liên quan đến trung tâm của khối lượng sẽ cho bạn một dấu hiệu quay vòng.
  3. Sử dụng thuật toán lưu vực trên khoảng cách mỗi điểm đến cạnh blob. Điều này có thể giúp xác định vùng mỏng được kết nối (ngón cái).
  4. Phù hợp với vòng tròn lớn nhất (hoặc đa giác được ghi lớn nhất) bên trong đốm màu. Làm giãn vòng tròn hoặc đa giác này cho đến khi một phần của cạnh của nó chồng lên nền. Trừ hình ảnh được giãn ra khỏi hình ảnh gốc; chỉ ngón tay cái sẽ vẫn còn.
  5. Nếu kích thước của bàn tay phù hợp (hoặc tương đối đồng nhất), thì bạn cũng có thể thực hiện các hoạt động thay đổi hình thái N cho đến khi ngón tay cái biến mất, sau đó N giãn hoạt động để tăng nắm tay trở lại kích thước gần đúng ban đầu của nó. Trừ blob nắm tay chỉ từ đốm màu gốc để lấy đốm màu. Sau đó sử dụng hướng blob ngón tay cái (đường kính của Feret) và/hoặc trung tâm khối lượng liên quan đến trung tâm khối lượng nắm đấm của khối để xác định hướng.

Kỹ thuật tìm điểm quan trọng (vùng thay đổi hướng mạnh) là phức tạp hơn. Đơn giản nhất, bạn cũng có thể sử dụng thiết bị dò góc và sau đó kiểm tra khoảng cách từ góc này sang góc khác để xác định vị trí khi cạnh trong của ngón cái chạm vào nắm tay.

Đối với các phương pháp phức tạp hơn, hãy xem xét các giấy tờ về phân hủy hình dạng của các tác giả như Kimia, Siddiqi và Xiaofing Mi.

1

MatchTemplate có vẻ phù hợp với vấn đề bạn mô tả. Bằng cách nào nó không cho bạn? Nếu bạn đang thực sự che dấu các ngón tay cái lên/ngón tay cái xuống/ngón tay cái giữa các dấu hiệu độc đáo như bạn thể hiện trong hình ảnh mẫu của bạn thì bạn đã thực hiện phần khó nhất.

MatchTemplate không bao gồm xoay vòng và chia tỷ lệ trong không gian tìm kiếm, vì vậy bạn nên tạo thêm mẫu từ hình ảnh tham chiếu của mình ở tất cả các vòng bạn muốn phát hiện và bạn nên chia tỷ lệ mẫu của mình sao cho phù hợp với kích thước chung của ngón tay cái lên/ngón tay cái xuống dấu hiệu.

[sửa] Mảng kết quả cho MatchTemplate chứa giá trị số nguyên xác định mức độ phù hợp của mẫu trong hình ảnh tại vị trí đó. Nếu bạn sử dụng CV_TM_SQDIFF thì giá trị thấp nhất trong mảng kết quả là vị trí phù hợp nhất, nếu bạn sử dụng CV_TM_CCORR hoặc CV_TM_CCOEFF thì đó là giá trị cao nhất. Nếu tất cả các hình ảnh được chia tỷ lệ và xoay đều có cùng số pixel trắng thì bạn có thể so sánh giá trị phù hợp nhất với tất cả các hình ảnh mẫu khác nhau và hình ảnh mẫu có hình ảnh phù hợp nhất là hình ảnh bạn muốn chọn.

Có rất nhiều chức năng phát hiện độc lập xoay/mở rộng có thể giúp bạn, nhưng bình thường hóa vấn đề của bạn để làm việc với MatchTemplate là dễ nhất.

Đối với các công cụ tiên tiến hơn, hãy kiểm tra SIFT, Haar feature based classifiers, hoặc one of the others available in OpenCV

+0

có, hình ảnh được cung cấp là hình ảnh gốc. của nó chỉ là ví dụ hình ảnh mẫu thứ hai không có giá trị phù hợp nhất khi so sánh với hình ảnh mẫu. ngay cả khi chúng có kích thước gần giống như trong hình ảnh. bạn có đề xuất một phương thức matchtemplate đặc biệt (CV_TM_SQDIFF, ...) không? giá trị tôi nhận được là gì? lỗi cho toàn bộ hình ảnh? khoảng cách trên mỗi pixel (để tôi phải phân chia nó theo kích thước hình ảnh hoặc một cái gì đó như thế này?) – Nicolas

+0

Tôi đã cập nhật câu trả lời của mình để giải quyết các câu hỏi của bạn. –

+0

Đối với hình dạng "co giãn" chẳng hạn như nắm tay, các mẫu đối sánh có thể không luôn hoạt động tốt như bạn muốn. Các phép biến đổi xoay, chia tỷ lệ và affine cùng nhau không tính đến việc xoay vòng và kéo dài từng phần riêng biệt. Nếu kết hợp các kỹ thuật hình thái và phân đoạn không hoạt động, hãy xem xét tìm kiếm các giấy tờ về "phân hủy hình dạng". – Rethunk

1

Tôi nghĩ rằng bạn có thể nhận được kết quả tuyệt vời nếu bạn chỉ tính hai điểm đó có con đường xa ngắn nhất đi qua trắng. Hướng mà ngón tay trỏ chỉ là hướng của đường nối hai điểm.

Bạn có thể thực hiện việc này dễ dàng bằng cách lấy mẫu các điểm trên vùng trắng và sử dụng Floyd-Warshall.

+0

Điều này nghe giống như một cách tiếp cận thú vị nhưng bạn có thể xây dựng thêm? Tôi không hiểu ý bạn là gì bởi "lấy mẫu điểm trên vùng trắng" và cách bạn có thể sử dụng thuật toán cho đồ thị để giải quyết vấn đề của chúng tôi – Nicolas

+1

Xem bài báo này, mô tả kỹ thuật này: "Phân loại hình dạng bằng cách sử dụng bên trong -Distance "của Ling và Jacobs www.cs.umd.edu/~djacobs/pubs_files/ID-pami-8.pdf – Rethunk

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