Tôi khuyên bạn nên xem xét chuyển từ chỉ sử dụng biểu đồ RGB.
Có thể thu được thông tin chi tiết tốt hơn về hình ảnh của bạn nếu bạn chụp một wavelet 2d của hình ảnh (nó dễ hơn rất nhiều so với âm thanh của nó, nó chỉ là rất nhiều giá trị trung bình và một số căn bậc hai được sử dụng để cân các hệ số của bạn) và chỉ giữ lại k lớn nhất các hệ số có trọng số trong wavelet dưới dạng một vectơ thưa thớt, chuẩn hóa nó và lưu lại để giảm kích thước của nó. Bạn nên chia tỷ lệ RG và B bằng cách sử dụng trọng lượng cảm nhận trước ít nhất hoặc tôi khuyên bạn nên chuyển sang YIQ (hoặc YCoCg, để tránh nhiễu lượng tử hóa) để bạn có thể lấy mẫu thông tin sắc độ với mức độ quan trọng giảm.
Bây giờ bạn có thể sử dụng tích số chấm của hai trong số các vectơ chuẩn hóa thưa thớt này làm thước đo độ giống nhau. Các cặp hình ảnh có sản phẩm chấm lớn nhất sẽ có cấu trúc rất giống nhau. Điều này có lợi ích là có khả năng chống thay đổi kích thước, thay đổi màu sắc và đánh dấu nước một chút, đồng thời thực sự dễ thực hiện và nhỏ gọn.
Bạn có thể đánh đổi khả năng lưu trữ và độ chính xác bằng cách tăng hoặc giảm k.
Việc sắp xếp theo một điểm số sẽ trở nên khó khăn đối với loại bài toán phân loại này. Nếu bạn nghĩ về nó, nó sẽ yêu cầu hình ảnh chỉ có thể 'thay đổi' dọc theo một trục, nhưng chúng không. Đây là lý do tại sao bạn cần một vector các đặc trưng. Trong trường hợp Haar wavelet, nó gần như là nơi xảy ra sự gián đoạn sắc nét nhất trong hình ảnh. Bạn có thể tính toán khoảng cách giữa các hình ảnh theo từng cặp, nhưng vì tất cả những gì bạn có là thước đo khoảng cách nên thứ tự tuyến tính không có cách nào để thể hiện một 'tam giác' gồm 3 hình ảnh đều cách xa nhau. (tức là nghĩ về một hình ảnh toàn màu xanh lá cây, một hình ảnh toàn màu đỏ và một hình ảnh toàn màu xanh lam.)
Điều đó có nghĩa là bất kỳ giải pháp thực sự nào cho vấn đề của bạn sẽ cần các phép toán O (n ^ 2) với số lượng hình ảnh bạn có. Trong khi nếu có thể tuyến tính hóa số đo, bạn có thể chỉ yêu cầu O (n log n) hoặc O (n) nếu số đo phù hợp với, chẳng hạn như sắp xếp cơ số. Điều đó nói rằng, bạn không cần phải chi tiêu O (n ^ 2) vì trong thực tế, bạn không cần phải sàng lọc toàn bộ tập hợp, bạn chỉ cần tìm những thứ gần hơn ngưỡng nào đó. Vì vậy, bằng cách áp dụng một trong số các kỹ thuật để phân vùng không gian vectơ thưa thớt của bạn, bạn có thể có được tiệm cận nhanh hơn nhiều cho vấn đề 'tìm ra tôi k trong số các hình ảnh giống nhau hơn một ngưỡng cho trước' hơn là so sánh một cách ngây thơ mọi hình ảnh với mọi hình ảnh, mang lại cho bạn những gì bạn có thể cần ... nếu không chính xác những gì bạn yêu cầu.
Trong mọi trường hợp, tôi đã sử dụng điều này một vài năm trước để tạo hiệu ứng tốt khi cố gắng giảm thiểu số lượng các kết cấu khác nhau mà tôi đang lưu trữ, nhưng cũng có rất nhiều nghiên cứu trong không gian này cho thấy hiệu quả của nó (và trong trường hợp này là so sánh nó sang một dạng phân loại biểu đồ phức tạp hơn):
http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf
Nếu bạn cần độ chính xác cao hơn trong việc phát hiện, các thuật toán minHash và tf-idf có thể được sử dụng với wavelet Haar (hoặc biểu đồ) để xử lý các chỉnh sửa mạnh mẽ hơn:
http://cmp.felk.cvut.cz/~chum/papers/chum_bmvc08.pdf
Cuối cùng, Stanford có một tìm kiếm hình ảnh dựa trên một biến thể kỳ lạ hơn của loại phương pháp này, dựa trên việc thực hiện nhiều tính năng hơn trong việc trích xuất các tính năng từ các wavelet để tìm các phần hình ảnh được xoay hoặc thu nhỏ, v.v., nhưng điều đó có thể vượt quá khối lượng công việc của bạn. muốn làm.
http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi