2013-05-21 38 views
15

TinEye, Google và những người khác cung cấp "tìm kiếm hình ảnh ngược" - bạn có thể tải lên một bức ảnh và trong vài giây nó sẽ tìm thấy các bức ảnh tương tự.Thuật toán để tìm hình ảnh tương tự trực quan từ cơ sở dữ liệu?

Có phiên bản nguồn mở của các thuật toán này không?


tôi biết về "SIFT" và các thuật toán khác cho việc tìm kiếm hình ảnh "tương tự như trực quan", nhưng họ chỉ làm việc để so sánh một hình ảnh trực tiếp sang người khác. tức là, để tìm các ảnh tương tự cho một ảnh nhất định là hoạt động O(n), để tìm tất cả các ảnh có hình ảnh tương tự sẽ là O(n^2) - cả hai ảnh đều bị chậm quá mức.

Tôi cần một bộ mô tả tính năng được lập chỉ mục bởi cơ sở dữ liệu [quan hệ] để giảm tập hợp kết quả thành một thứ dễ quản lý hơn.

Bằng "tương tự trực quan", tôi có nghĩa là rất tương tự. tức là, một bức ảnh đã được chạm nhẹ lên/đổi màu trong Photoshop, hơi bị cắt bớt hoặc thay đổi kích thước, ảnh được chụp liên tiếp nhanh chóng của cùng một cảnh, hoặc hình ảnh lộn xộn hoặc xoay.

+1

Bạn đã xem Phân tích phân biệt đối xử tuyến tính (LDA)/Phân tích thành phần chính (PCA) chưa? Nếu tôi nhớ chính xác, họ đã ở một số điểm được sử dụng để xử lý hình ảnh/nhận diện khuôn mặt và không có điều gì.Điểm mạnh của họ bao gồm chính xác việc giảm mô tả tính năng cho một cái gì đó dễ quản lý hơn :) trong trường hợp này, thông tin pixel –

+0

@Arthur: Tôi đang triển khai "AN IMAGE SIGNATURE FOR ANY LOẠI HÌNH ẢNH" ngay bây giờ, tôi sẽ xem xét một cái tiếp theo nếu cái này không bị bong ra. Cảm ơn :-) Nhận diện khuôn mặt tôi không cần mặc dù. – mpen

+0

Tôi đã xây dựng một công cụ tương tự hình ảnh một vài năm trước. Bạn chắc chắn có thể lưu trữ các tính năng trong cơ sở dữ liệu quan hệ nhưng đề xuất của tôi sẽ là xem xét sử dụng một chỉ số đảo ngược làm công cụ truy vấn của bạn. Nó cung cấp cho bạn một thứ tự cường độ cao hơn và linh hoạt khi nói đến việc phân phối dữ liệu của bạn. –

Trả lời

15

Cách tiếp cận hợp lệ bạn có thể xem xét là Bag-of-Words model.

Về cơ bản, bạn có thể thực hiện tính toán ngoại tuyến các hình ảnh mục tiêu. Bạn có thể trích xuất từ ​​những hình ảnh đó một loạt các tính năng để tạo một cuốn sách mã với các thuật toán như k-means clustering. Tìm kiếm các hình ảnh gần nhất sẽ dẫn đến các ứng dụng của một thuật toán như Nearest neighbor search trong không gian của codebook.

Đối với những người hàng xóm tìm kiếm, bạn có thể sử dụng Flann

Hãy xem cũng tại địa chỉ: Visual similarity search algorithm

Đây chỉ là một khả năng, và sự thật phải được cho biết, chủ đề này thực sự là một thách thức và vất vả trên nó thực sự là rất lớn.

Chỉ cần một số tài liệu tham khảo:

+0

Phần tôi quan tâm nhất là làm cách nào để chúng tôi thực hiện tìm kiếm lân cận gần nhất trên cơ sở dữ liệu quan hệ với vectơ có kích thước ~ 500? – mpen

+0

Tôi đã cập nhật câu trả lời –

+1

FLANN không trả lời phần DB của câu hỏi;) Tôi chắc chắn rằng sẽ tuyệt vời khi tất cả dữ liệu trong bộ nhớ, nhưng tôi không thể đọc một triệu bản ghi vào bộ nhớ mỗi lần ai đó thực hiện tìm kiếm. Trừ khi tôi có thể giữ tất cả dữ liệu trong bộ nhớ giữa các yêu cầu ... chữ ký của tôi là ~ 500 byte Tôi nghĩ, vì vậy tôi có thể lưu trữ một vài tùy thuộc vào yêu cầu bộ nhớ của FLANN. – mpen

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