2011-03-02 18 views
6

Hiện tại, trong C#, cố gắng tìm ra cách tìm mẫu cụ thể trong hình ảnh lớn, ảnh chụp màn hình thực sự. Một trận đấu 100% là cần thiết, do đó, vấn đề là khá thẳng về phía trước.Ghép mẫu hình ảnh (nếu tồn tại tọa độ trả lại)

thử nghiệm vật liệu: http://www.myhideout.eu/temp/pattern.png (NB: điểm ảnh trong suốt là không thích hợp và không nên được kiểm tra.) http://www.myhideout.eu/temp/test.png

Nếu một mô hình được tìm thấy, tôi sẽ cần một số loại phối hợp vì vậy tôi biết ở đâu, nhưng đó là phần dễ dàng.

Cách tiếp cận duy nhất tôi đã đưa ra cho đến nay là điều hiển nhiên. Lấy điểm ảnh đầu tiên của mẫu và lặp qua hình ảnh kiểm tra cho đến khi tìm thấy kết quả phù hợp, sau đó kiểm tra phần còn lại của mẫu cho đến khi thử nghiệm thất bại hoặc không có mẫu nào khác. Nếu thử nghiệm không thành công, hãy tiếp tục tới pixel tiếp theo khớp với pixel đầu tiên của mẫu và thử lại. Nếu bạn chạy qua hình ảnh thử nghiệm mà không có một trận đấu, thì rõ ràng là không có mô hình như vậy và đó sẽ là kết quả của thử nghiệm.

Tôi lý thuyết này hoạt động, nhưng trong thực tế mọi thứ phức tạp hơn một chút. Tôi chưa đến với u với một cách thích hợp của cấu trúc mã và các trường hợp thử nghiệm tôi đã thực hiện đã có một số lỗi khá lạ, đó không phải là một bất ngờ lớn xem xét sự phức tạp.

Tuy nhiên, mối quan tâm lớn nhất của tôi là thời gian. Đây chỉ là một phần nhỏ của một quá trình lâu dài và mục tiêu là để đưa tổng thời gian thực hiện xuống một vài giây. Hãy tưởng tượng một hình ảnh 1920 * 1200, đó là về giới hạn, nơi mà các mô hình là ở phần cuối và một số trận đấu một phần xảy ra trước đó. Tôi có tất nhiên tìm kiếm trên mạng, nhiều loại khác nhau, vv, nhưng vật liệu duy nhất tôi đưa ra là rất tiên tiến và sẽ ít được sử dụng ngay cả khi tôi hiểu được nó có nghĩa là cho các mục đích rất khác nhau.

Tôi cũng đã cân nhắc xem có thể chuyển đổi hình mẫu và hình ảnh thử nghiệm thành một số bitet và sau đó chỉ cần AND, SHIFT và/hoặc MASK theo cách của tôi, nhưng đó là vượt quá khả năng hiện tại của tôi.

Tôi nghĩ rằng tôi đã mô tả khá nhiều vấn đề của mình ở đây. Tôi xin lỗi vì sự chậm trễ của các ví dụ mã, nhưng những gì tôi đã có được sẽ được sử dụng ít cho bất cứ ai và cũng loại lúng túng.

Tôi rất cảm kích mọi trợ giúp.

Trả lời

1

Nếu bạn có thể đảm bảo hình ảnh của mình sẽ có cùng hướng, khi đó việc triển khai đơn giản của bạn có thể sẽ nhanh nhất.

Tuy nhiên, nếu bạn đang kiểm tra các hình ảnh đã được xoay, được chuyển đổi thành màu xám hoặc bất kỳ loại chuyển đổi nào khác, nó sẽ nhanh chóng thất bại.

Tôi không có mã nào cho bạn, nhưng có một số tài nguyên tốt từ Generation5 (bài viết AI), cụ thể là từ McGill University's COMP-644 (Pattern Recognition) course.

Hy vọng bạn thích toán học.

+0

Cảm ơn câu trả lời của bạn. Nếu đó là sự thật những gì bạn nói, tôi đoán nó chỉ là vấn đề tìm ra cách cấu trúc mã đúng cách. – Zacariaz

+0

Tôi chắc chắn sẽ xem xét nó. cảm ơn. – Zacariaz

0

Ngoài việc nghiên cứu chung về mô hình kết hợp

  1. Các mô tả về chiến lược tìm kiếm của bạn có vẻ như các thuật toán tìm kiếm lực lượng chuỗi vũ phu; bạn có thể áp dụng các phương pháp tìm kiếm chuỗi được tối ưu hóa hay không (ví dụ:Boyer Mooore) cho vấn đề của bạn?
  2. Nhìn vào mẫu của bạn và 'haystack' của bạn - tìm kiếm (nhanh?) Cho khung màu xám trước khi bạn tìm kiếm các biểu tượng sẽ cải thiện tốc độ thực thi.
  3. Nếu bạn có thể giới hạn khu vực mong đợi mẫu và tiền xử lý mẫu, sử dụng các khái niệm/mã OCR có thể là một tùy chọn.

Tất nhiên, không gì có thể đánh bại thư viện thực hiện chính xác những gì bạn muốn.

+0

Tôi đã tra cứu Boyer Mooore và thành thật mà nói, tôi không nghĩ rằng tôi hiểu khái niệm này. Tuy nhiên nó đã cho tôi một ý tưởng mà tôi sẽ phải suy nghĩ. Bây giờ, giả sử bạn kiểm tra pixel đầu tiên của điểm ảnh so với pixel đầu tiên của hình ảnh thử nghiệm. Nếu nó phù hợp, bạn làm như mô tả trước đó, nhưng nếu nó không, bạn vẫn di chuyển đến pixel tiếp theo trong patter, tuy nhiên, trong hình ảnh thử nghiệm bạn di chuyển 2 pixel về phía trước. Điều đó có thể, có khả năng, một nửa công việc tôi nghĩ, nhưng tôi cần phải suy nghĩ về nó. 2.Có, tôi cho rằng như vậy, nhưng tôi nghĩ rằng đó sẽ là một triển khai sau này, bây giờ tôi sẽ thực hiện một bước vào thời điểm đó. – Zacariaz

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