Làm sao để biết hai hình ảnh có giống nhau không? [đóng cửa]


20

Tôi có hơn 10000 hình ảnh trong đó khoảng 2000 là trùng lặp ở các định dạng khác (như trong JPEG, PNG, GIF). Cả hai con số này đang tăng lên mỗi ngày. Tôi cần phải xóa những bản sao đó và tôi phải biết cách tìm chúng trước.

Suy nghĩ đầu tiên của tôi là kiểm tra một pixel hình ảnh và tìm các hình ảnh khác có cùng pixel màu trong cùng tọa độ. Nhưng tùy chọn này không phải lúc nào cũng hoạt động. Hãy nói rằng tôi tìm kiếm một bản sao. Đối với đối tượng có thể tìm kiếm, tôi chọn tệp PNG 8 bit. Nó sẽ tìm thấy tất cả các bản sao của hình ảnh đó, nhưng chỉ có PNG 8 bit, đôi khi là GIF 8 bit và hiếm khi là JPEG (vì tôi cho rằng thuật toán hình ảnh là gì?).

Suy nghĩ thứ hai của tôi là sao chép tất cả những hình ảnh đó và tô màu lại chúng trong một bảng màu hai màu nghiêm ngặt (giả sử đen trắng) và thực hiện quét tương tự như đã nêu ở trên. Một lần nữa, hình ảnh JPEG không giống 100% với định dạng PNG hoặc GIF (lý do tương tự như trên?).

Ý nghĩ thứ ba là giảm tỷ lệ phần trăm về mức độ quen thuộc của hình ảnh và tăng mức độ màu sắc có thể thay đổi, dẫn đến loại bỏ hình ảnh không mong muốn ...

Có suy nghĩ gì không?



Các định dạng với nén mất dữ liệu sẽ dẫn đến hình ảnh không giống 100% với các phiên bản không mất dữ liệu. Bạn phải có tiện ích dòng lệnh hay bạn có thể chạy chương trình gui, đưa ra đề xuất, sau đó hiển thị hình ảnh có độ phân giải tương tự> 90% (tính độ lệch trung bình)? (và tất nhiên kích thước pixel phải giống hệt nhau ở bất kỳ định dạng nào)
thorsten müller


1
Bao nhiêu sẽ có cùng tên tệp nhưng phần mở rộng khác nhau?
JeffO

4
Câu trả lời hữu ích không cần nhiều tuần mã hóa: stackoverflow.com/questions/596262/ mẹo
mac

Câu trả lời:


17

Băm nhận thức có thể là câu trả lời:

http://www.phash.org/

Băm tri giác là dấu vân tay của một tệp đa phương tiện có nguồn gốc từ các tính năng khác nhau từ nội dung của nó. Không giống như các hàm băm mật mã dựa trên hiệu ứng tuyết lở của những thay đổi nhỏ trong đầu vào dẫn đến thay đổi mạnh mẽ ở đầu ra, băm nhận thức sẽ "gần gũi" với nhau nếu các tính năng tương tự nhau.


9
  1. Kiểm tra kích thước. Nếu khác nhau => hình ảnh không giống nhau.
  2. Kiểm tra định dạng. Nếu giống nhau => Thực hiện so sánh chính xác, pixel theo pixel.
  3. Nếu các định dạng khác nhau làm điều này:

Không so sánh RGB (đỏ, xanh lá cây, xanh dương). So sánh Độ sáng bằng một nửa trọng lượng và so sánh màu sắc / màu sắc với nửa còn lại (hoặc 2/3 so với 1/3). Tính toán sự khác biệt về giá trị và tùy thuộc vào giá trị 'dung sai' chúng giống nhau hoặc không.

JPEG nén rất nhiều thông tin màu sắc nhưng cố gắng không làm hỏng các giá trị giới hạn.


6

Khi tôi sàng lọc một loạt các hình ảnh cho các bản sao cách đây vài năm, tôi thấy rằng việc giảm mọi thứ thành hình thu nhỏ 8 x 8 và sau đó tính điểm tương tự dựa trên bình phương khoảng cách (xử lý ba màu riêng biệt) giữa các hình thu nhỏ hoạt động khá tốt. Lưu ý rằng bạn có thể giữ RẤT NHIỀU hình thu nhỏ trong bộ nhớ.

Hầu như tất cả các bản sao đều ghi điểm dưới các bản sao, về vấn đề duy nhất là một số hình ảnh có độ tương phản rất thấp và tổng thể tương tự mặc dù nội dung thực tế khác nhau (nền trong mỗi trường hợp là cát bãi biển.)

Điều này cũng hiệu quả trong việc bắt các hình ảnh bị sao chép trừ khi ai đó đã giảm độ phân giải hoặc chất lượng trên một để giảm kích thước tệp.


1
Thông thường YUV tốt hơn RGB, ít nhạy cảm hơn với những thay đổi nhỏ trong cân bằng màu.
Martin Beckett

Kỹ thuật thu nhỏ này để chọn trước các kết quả phù hợp tiềm năng là hợp lệ, YUV là một điểm nhấn tuyệt vời và tôi đã thấy nó chuyển sang bản đồ độ chói thuần túy vì những lý do tương tự.
Patrick Hughes

@Martin Beckett: Tổng bình phương của sự khác biệt RGB là điều đầu tiên tôi đã thử và nó hoạt động đủ tốt để tôi không cố gắng cải thiện nó - và lúc đó nó đã bắt được các bản sao với chỉnh sửa. Với một định nghĩa nghiêm ngặt về dupe, nó đủ tốt để tôi có thể tự động xóa nó.
Loren Pechtel

@Loren, nếu chúng là các chỉnh sửa pixel nhỏ của cùng một hình ảnh sẽ hoạt động. Chỉ là những thứ như jpeg làm rối tung RGB hơn là không gian màu YUV. Chỉ là một mẹo ;-)
Martin Beckett

Theo tự nhiên, hình ảnh rất tối có xu hướng có tổng bình phương thấp hơn, ngay cả khi chúng không giống nhau chút nào. Ngưỡng có thể được điều chỉnh với độ sáng trung bình của hình ảnh. Tôi sử dụng độ chói avg này làm bộ lọc trước để tránh so sánh hình ảnh O (n ^ 2), vì vậy nó đã có sẵn.
Gabriel

1

Có lẽ bạn nên viết một số mã để quét hình ảnh cho giống nhau. Bạn có thể chuyển đổi tất cả các bức ảnh sang định dạng ARGB và so sánh chúng. (trong trí nhớ)

Một cách tiếp cận có thể là cách này: Chia hình ảnh theo khu vực. Quét màu trung bình và / hoặc độ sáng trung bình của khu vực để so sánh hai hình ảnh cho giống nhau.

Nếu hơn nói, 90% các khu vực khớp, bạn đã chọn một để chuyển đến danh sách ứng cử viên xóa. Bằng cách này bạn có một danh sách các ứng cử viên. Bạn có thể sử dụng tỷ lệ khung hình của hình ảnh để phân loại hình ảnh theo hình ảnh ngang và dọc để tăng tốc độ so sánh. bằng cách này, bạn có thể bù cho các thuật toán bị mất không tái tạo đúng màu pixel theo pixel. Bạn chạy chương trình qua đêm và vào buổi sáng bạn đã hoàn thành nó :) trong .Net điều này có thể được thực hiện khá dễ dàng với anh ấy GDI + lib.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.