Đôi khi hai tệp hình ảnh có thể khác nhau ở cấp tệp, nhưng một con người sẽ xem xét chúng giống hệt nhau. Cho rằng, bây giờ giả sử bạn có một cơ sở dữ liệu khổng lồ của hình ảnh, và bạn muốn biết nếu một con người sẽ nghĩ rằng một số hình ảnh X có mặt trong cơ sở dữ liệu hay không. Nếu tất cả các hình ảnh có một băm/vân tay cảm nhận, thì người ta có thể băm hình ảnh X và nó sẽ là một vấn đề đơn giản để xem nó có nằm trong cơ sở dữ liệu hay không.Phát hiện xem hai hình ảnh có giống hệt nhau không
Tôi biết có nghiên cứu xung quanh vấn đề này và một số thuật toán tồn tại, nhưng có công cụ nào, như công cụ dòng lệnh UNIX hoặc thư viện tôi có thể sử dụng để tính toán băm như vậy mà không thực hiện một số thuật toán không?
chỉnh sửa: Mã liên quan từ findimagedupes, sử dụng ImageMagick
try $image->Sample("160x160!");
try $image->Modulate(saturation=>-100);
try $image->Blur(radius=>3,sigma=>99);
try $image->Normalize();
try $image->Equalize();
try $image->Sample("16x16");
try $image->Threshold();
try $image->Set(magick=>'mono');
($blob) = $image->ImageToBlob();
chỉnh sửa: Cảnh báo! ImageMagick $ image object dường như chứa thông tin về thời gian tạo tập tin ảnh đã được đọc. Điều này có nghĩa là blob bạn nhận được sẽ khác ngay cả đối với cùng một hình ảnh, nếu nó được truy xuất vào một thời điểm khác. Để đảm bảo rằng dấu vân tay vẫn giữ nguyên, hãy sử dụng $ image-> getImageSignature() làm bước cuối cùng.
Quy trình đó có vẻ cực kỳ chuyên sâu về xử lý. – endolith
* Điều này có nghĩa là các đốm màu bạn nhận được sẽ khác nhau ngay cả đối với cùng một hình ảnh, nếu nó được truy xuất vào một thời điểm khác. * Điều này không đúng với chuỗi '" $ blob "' (nếu được đưa vào dấu ngoặc kép), sẽ chính xác là 32 byte nếu các pixel hình ảnh giống nhau. – pts