2008-09-16 75 views
69

Tôi cần một thuật toán có thể xác định hai hình ảnh là 'tương tự' và nhận ra các mẫu màu, độ sáng, hình dạng tương tự, v.v .. Tôi có thể cần một số gợi ý về các tham số mà bộ não con người sử dụng phân loại 'hình ảnh. ..Thuật toán để tìm hình ảnh tương tự

Tôi đã xem xét kết hợp dựa trên hausdorff nhưng có vẻ như chủ yếu là để đối sánh các đối tượng chuyển đổi và các mẫu hình dạng.

+0

Có một số câu trả lời tốt trong câu hỏi tương tự khác này: http://stackoverflow.com/questions/25977/how-can-i-measure-the-similarity-between-two-images – blak

+0

một rất nhiều 'cans' và 'mights'. Bất cứ ai cũng thử tất cả các đề xuất này và biết điều gì là tốt nhất? –

+0

Đã lâu rồi kể từ khi tôi nhìn vào máy tính, nhưng hãy xem Matlab, có một số chức năng tốt trong đó để phân tích hình ảnh và sau đó so sánh sự giống nhau của ma trận kết quả, dựa trên các số liệu khác nhau để so sánh. Phân tích quang phổ – Mason

Trả lời

53

Tôi đã làm điều tương tự, bằng cách phân tách hình ảnh thành chữ ký bằng cách sử dụng wavelet transform.

Cách tiếp cận của tôi là chọn các hệ số n quan trọng nhất từ ​​mỗi kênh được chuyển đổi và ghi lại vị trí của chúng. Điều này được thực hiện bằng cách phân loại danh sách (power, location) tuples theo abs (power). Những hình ảnh tương tự sẽ chia sẻ những điểm giống nhau ở chỗ chúng sẽ có hệ số đáng kể ở cùng một vị trí.

Tôi thấy tốt nhất là chuyển đổi hình ảnh sang định dạng YUV, cho phép bạn có được sự tương đồng về trọng lượng trong hình dạng (kênh Y) và màu (kênh UV).

Bạn có thể tìm thấy trong thực hiện của tôi ở trên trong mactorii, mà tiếc là tôi chưa được làm việc trên nhiều như tôi nên có :-)

Một phương pháp, mà một số người bạn của tôi đã sử dụng với cách đáng ngạc nhiên kết quả tốt, chỉ đơn giản là thay đổi kích thước hình ảnh của bạn xuống để nói, một pixel 4x4 và cửa hàng là chữ ký của bạn. Bạn có thể ghi 2 hình ảnh tương tự như thế nào bằng cách nói, tính toán Manhattan distance giữa 2 hình ảnh, sử dụng các pixel tương ứng. Tôi không có chi tiết về cách họ thực hiện thay đổi kích thước, vì vậy bạn có thể phải chơi với các thuật toán khác nhau có sẵn cho nhiệm vụ đó để tìm một trong đó là phù hợp.

+6

Cách thay đổi kích thước thành phương thức 4x4 là một ý tưởng tuyệt vời (không phải phương pháp của bạn cũng không tuyệt vời) nhưng cách đầu tiên đơn giản hơn. –

+0

@freespace, bạn có thể giải thích điều này "tính toán khoảng cách Manhattan giữa 2 hình ảnh, sử dụng pixel tương ứng" – Ambika

+0

@Ambika: xử lý màu của mỗi pixel dưới dạng vectơ có độ dài 3 và tính khoảng cách Manhattan giữa các pixel tương ứng trong hình ảnh được so sánh. Điều đó mang lại cho bạn 4 khoảng cách Manhattan. Làm thế nào bạn có được một biện pháp duy nhất từ ​​đó là tùy thuộc vào bạn. Điều hiển nhiên nhất là tổng hợp chúng lại với nhau. – freespace

1

Bạn có thể thực hiện một số loại ước tính chuyển động khối phù hợp giữa hai hình ảnh và đo tổng số tiền còn lại và chi phí vectơ chuyển động (giống như một thao tác trong bộ mã hóa video). Điều này sẽ bù đắp cho chuyển động; cho điểm thưởng, ước tính chuyển động affine-chuyển đổi (bù cho thu phóng và kéo dài và tương tự). Bạn cũng có thể thực hiện các khối chồng chéo hoặc luồng quang.

4

Bạn có thể sử dụng Perceptual Image Diff

Đó là một tiện ích dòng lệnh đó so sánh hai hình ảnh sử dụng một thước đo tri giác. Nghĩa là, nó sử dụng một mô hình tính toán của hệ thống thị giác của con người để xác định xem hai hình ảnh có khác nhau về mặt thị giác hay không, do đó những thay đổi nhỏ về pixel bị bỏ qua. Thêm vào đó, nó làm giảm đáng kể số lượng dương tính giả gây ra bởi sự khác biệt trong việc tạo số ngẫu nhiên, hệ điều hành hoặc sự khác biệt về kiến ​​trúc máy.

1

Lần đầu tiên, bạn có thể thử sử dụng biểu đồ màu. Tuy nhiên, bạn thực sự cần thu hẹp miền vấn đề của mình. Kết hợp hình ảnh chung là một vấn đề rất khó.

4

Đó là một vấn đề khó khăn! Nó phụ thuộc vào độ chính xác bạn cần, và nó phụ thuộc vào loại hình ảnh bạn đang làm việc. Bạn có thể sử dụng biểu đồ để so sánh màu sắc, nhưng điều đó rõ ràng không tính đến sự phân bố không gian của những màu đó trong hình ảnh (nghĩa là hình dạng). Phát hiện cạnh theo sau là một số loại phân đoạn (ví dụ: chọn các hình dạng) có thể cung cấp một mẫu để khớp với một hình ảnh khác. Bạn có thể sử dụng ma trận coocurence để so sánh kết cấu, bằng cách xem xét các hình ảnh như ma trận của các giá trị pixel và so sánh các ma trận đó. Có một số cuốn sách hay có trên hình ảnh phù hợp và tầm nhìn của máy - Một tìm kiếm trên Amazon sẽ tìm thấy một số.

Hy vọng điều này sẽ hữu ích!

0

Có một số câu trả lời hay trong các chủ đề khác về điều này, nhưng tôi tự hỏi liệu có điều gì đó liên quan đến phân tích quang phổ sẽ hoạt động không? Tức là, phá vỡ hình ảnh xuống thông tin về giai đoạn và biên độ của nó và so sánh chúng. Điều này có thể tránh được một số vấn đề với sự khác biệt về cắt xén, chuyển đổi và cường độ. Dù sao, đó chỉ là tôi suy đoán vì điều này có vẻ như là một vấn đề thú vị. Nếu bạn đã tìm kiếm http://scholar.google.com Tôi chắc chắn bạn có thể đưa ra một số giấy tờ về vấn đề này.

+0

là biến đổi Fourier thứ hai, không có biểu đồ màu nào vì bạn có thể tái tạo lại hình ảnh từ hai phần - mang tính thực tế và thực tế. (không biết nếu nó sẽ làm việc, chỉ cần cho bạn biết nó không phải là trong thể loại đó). – nlucaroni

+0

Vâng, một Fourier Transform là những gì tôi có ý nghĩa. – dbrien

2

Điều này nghe giống như vấn đề về thị lực. Bạn có thể muốn xem xét Thúc đẩy thích ứng cũng như thuật toán trích xuất dòng Burns. Các khái niệm trong cả hai sẽ giúp tiếp cận vấn đề này. Phát hiện cạnh là một nơi đơn giản hơn để bắt đầu nếu bạn mới sử dụng thuật toán thị giác, vì nó giải thích các khái niệm cơ bản.

Theo như thông số để phân loại:

  • Bảng màu & Location (Gradient tính, biểu đồ màu sắc)
  • Đựng Shapes (Ada Đẩy mạnh/Đào tạo để phát hiện hình dạng.)
2

Tùy thuộc vào số lượng kết quả chính xác bạn cần, bạn có thể chỉ cần phá vỡ hình ảnh trong khối pixel nxn và phân tích chúng.Nếu bạn nhận được kết quả khác nhau trong khối đầu tiên bạn không thể ngừng xử lý, dẫn đến một số cải tiến hiệu suất.

Để phân tích các ô vuông, bạn có thể lấy tổng của các giá trị màu.

3

Có liên quan nghiên cứu sử dụng Kohonen mạng nơ-ron/tự tổ chức maps

Cả hai hệ thống học thuật hơn (Google cho PicSOM) hoặc ít học
(http://www.generation5.org/content/2004/aiSomPic.asp, (có thể không phù hợp cho tất cả các môi trường làm việc)) thuyết trình tồn tại .

11

Tôi đã sử dụng SIFT để phát hiện lại cùng một đối tượng trong các hình ảnh khác nhau. Nó thực sự mạnh mẽ nhưng khá phức tạp, và có thể là quá mức cần thiết. Nếu hình ảnh được cho là khá giống một số thông số đơn giản dựa trên sự khác biệt giữa hai hình ảnh có thể cho bạn biết một chút. Một số con trỏ:

  • Bình thường hóa hình ảnh tức là làm cho độ sáng trung bình của cả hai hình ảnh giống nhau bằng cách tính độ sáng trung bình của cả hai bạn quan tâm nhiều hơn về màu sắc.
  • Tổng chênh lệch màu sắc trên hình ảnh được chuẩn hóa trên mỗi kênh.
  • tìm các cạnh trong hình ảnh và đo pixel cạnh của các đường viền trong cả hai hình ảnh. (đối với hình dạng)
  • Chia hình ảnh thành một nhóm các khu vực riêng biệt và so sánh màu trung bình của từng khu vực.
  • Ngưỡng các hình ảnh ở một (hoặc một bộ) cấp độ và đếm số lượng pixel mà hình ảnh đen/trắng kết quả khác nhau.
+0

bạn có thể trỏ đến mã sử dụng fetures giống như rây để tính toán sự giống nhau về hình ảnh không? – mrgloom

+0

Tôi xin lỗi, tôi chắc chắn có sẵn mã công khai, nhưng không có mã nào tôi biết. Có một số ví dụ trên trang web này. Ví dụ ở đây: http://stackoverflow.com/questions/5461148/sift-implementation-with-opencv-2-2 –

40

pHash có thể bạn quan tâm.

băm nhận thức n. dấu vân tay của tệp âm thanh, video hoặc hình ảnh dựa trên nội dung âm thanh hoặc hình ảnh chứa đựng toán học. Không giống như hàm băm mật mã dựa vào hiệu ứng tuyết lở của những thay đổi nhỏ trong đầu vào dẫn đến những thay đổi mạnh mẽ trong đầu ra, băm cảm nhận được "đóng" với nhau nếu các đầu vào là trực quan hoặc tương tự như auditorily.

+6

Chỉ cần kiểm tra trang web của pHash.Họ hiện có tính năng này trên trang web của họ cho phép bạn tải lên hai hình ảnh và nó cho bạn biết liệu chúng có giống nhau hay không. Tôi đã thử khoảng 10 hình ảnh tương tự và 10 hình ảnh không giống nhau. Tỷ lệ thành công không phải là ấn tượng, thật không may. –

+1

Độ pH thực sự khá nghiêm ngặt, bạn có thể muốn sử dụng 'ahash' hoặc băm trung bình, có xu hướng ít nghiêm ngặt hơn. Bạn có thể tìm thấy việc triển khai python tại đây https://github.com/JohannesBuchner/imagehash/blob/master/find_similar_images.py Liên kết – Rohit

2

Tính tổng các bình phương của sự khác biệt của các giá trị màu điểm ảnh của một phiên bản thu nhỏ đáng kể (ví dụ: 6x6 pixel) hoạt động tốt. Hình ảnh giống hệt nhau mang lại 0, hình ảnh tương tự mang lại số lượng nhỏ, hình ảnh khác nhau mang lại những hình ảnh lớn. Ý tưởng của những người khác ở trên để đột nhập vào YUV âm thanh đầu tiên hấp dẫn - trong khi ý tưởng của tôi hoạt động tốt, tôi muốn hình ảnh của tôi được tính là "khác" để nó mang lại kết quả chính xác - thậm chí từ góc nhìn của một người quan sát colourblind .

0

Xin lỗi vì đã tham gia thảo luận muộn.

Chúng tôi thậm chí có thể sử dụng phương pháp ORB để phát hiện các điểm giống nhau giữa hai hình ảnh. liên kết sau mang đến cho thực hiện trực tiếp của ORB trong python

http://scikit-image.org/docs/dev/auto_examples/plot_orb.html

Thậm chí OpenCV đã có chỉ đạo thực hiện ORB. Nếu bạn có thêm thông tin, hãy làm theo bài báo nghiên cứu dưới đây.

https://www.researchgate.net/publication/292157133_Image_Matching_Using_SIFT_SURF_BRIEF_and_ORB_Performance_Comparison_for_Distorted_Images

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