2011-12-27 39 views
49

Tôi đã dành khá nhiều thời gian nghiên cứu cho một thư viện cho phép tôi so sánh hình ảnh với nhau trong Java.Thư viện Java để so sánh hình ảnh tương tự

Tôi thực sự không tìm thấy gì hữu ích, có thể kỹ năng GoogleSearch của tôi không đủ cao nên tôi nghĩ tôi sẽ hỏi các bạn xem bạn có thể chỉ cho tôi một hướng mà tôi có thể tìm thấy thứ như thế này không.

Về cơ bản những gì tôi muốn làm là so sánh hai hình ảnh với nhau và nhận được một giá trị của hai là tương tự nhau. Giống như một tỷ lệ phần trăm hoặc hơn.

Tôi hy vọng các bạn có một cái gì đó tôi có thể sử dụng, tôi sẽ không biết làm thế nào để viết một cái gì đó như thế bản thân mình ...

PS: Nó không nhất thiết phải là trong Java, đó mới chỉ là môi trường ứng dụng của tôi sẽ chạy.

+0

Loại tương tự bạn muốn so sánh? Hình ảnh có cùng kích thước hoặc chúng có thể được thu nhỏ/xoay/cắt? – dbf

+1

Tôi chỉ muốn biết nếu hai hình ảnh giống nhau (từ một POV của con người) –

+0

Gần đây tôi đã phát hiện ra một lib tuyệt vời có tên là Rainbow4j, được phát triển và sử dụng bởi các nhân viên khung Galen. Nó có thể so sánh hình ảnh dựa trên điểm ảnh khác biệt, màu sắc khác nhau vv, với rất nhiều cấu hình. – kaqqao

Trả lời

28

Bạn có thể xem hai câu trả lời trên SO: this one is about image comparison itself, offering links to stuff in C++ (nếu tôi đọc chính xác) trong khi this one offers links to broader approaches, one being in C.

Tôi khuyên bạn nên bắt đầu với liên kết thứ hai vì có các liên kết trong cuộc thảo luận đó sẽ dẫn đến mã thực hiện của một số kỹ thuật có liên quan mà bạn có thể "tự dịch" sang Java.

Đó là kỹ năng google tốt nhất của tôi có thể làm, không có Java mặc dù - xin lỗi. Tôi hy vọng đó là một điểm khởi đầu tốt!

EDIT: Here's someone with your problem who wrote his own comparison class in Java. Tôi đã không đọc mã nguồn mặc dù. Anh ta tuyên bố rõ ràng rằng anh ta không thể tìm thấy các thư viện Java cho mục đích đó, vì vậy đó là lý do tại sao anh ấy tự viết nó.

Ồ, và điều này question on SO has probably the best links về điều này, tất cả liên quan đến thư viện xử lý hình ảnh Java. Hy vọng rằng có một trong số đó có thể so sánh hình ảnh cho sự giống nhau.

Ok, chỉnh sửa cuối cùng: The Java Image Processing Cookbook cho thấy triển khai Java của thuật toán cơ bản để xác định sự khác biệt giữa hai ảnh. Nó cũng có một email để liên lạc với người đã viết nó cũng như một loạt các tài liệu tham khảo. Không có thư viện.

CHỈNH SỬA sau khi đọc nhận xét cho câu hỏi của bạn: Trừ khi bạn đã kiểm tra tất cả các liên kết ở trên, vì bạn muốn kiểm tra xem hai hình ảnh có bằng nhau không, tôi khuyên bạn nên bắt đầu với Sách xử lý hình ảnh Java (vì điều đó đã thực hiện một thuật toán trong Java để kiểm tra các hình ảnh bằng nhau) và liên kết cuối cùng đến một câu hỏi SO. Ngoài ra, check PerceptualImageDiff và mã nguồn của dự án đó (C++); nó có vẻ thực sự tiện lợi - nó dường như phải kiểm tra xem hai hình ảnh có giống nhau không với hệ thống thị giác của con người.

+0

Tôi đã tìm hiểu tài nguyên của bạn - đặc biệt là bài viết có triển khai đơn giản thực sự hữu ích. –

+0

dang .. 404 không tìm thấy liên kết nấu ăn đó – tObi

+0

@tobi [lưu trữ] (http://archive.org) vẫn có phiên bản; đang cập nhật bài đăng của tôi. –

8

Chỉ cần ra khỏi đỉnh đầu của tôi, OpenCV là một thư viện xử lý hình ảnh tuyệt vời, nhưng nó có thể quá mức cần thiết nếu bạn chỉ muốn so sánh hình ảnh. Nếu đúng như vậy, tôi sẽ đi với ImageJ.

Ai đó đã hỏi cách thực hiện việc này bằng cách sử dụng OpenCV here.

Tôi muốn sử dụng C++ cho điều này, nhưng nếu bạn phải sử dụng Java, có một dự án tạo ra một trình bao bọc Java cho OpenCV, here.

7

Tôi đã sử dụng lớp học trong this link để so sánh hai hình ảnh sản phẩm và kết quả thật tuyệt.Nó không phải là rất khó để thực hiện nó chỉ để được sử dụng để so sánh hai hình ảnh, bạn chỉ cần xóa các dòng của JAI và Swing và như vậy. Nó thay đổi kích thước hình ảnh thành 300x300 và trả về một giá trị khác biệt như "1234". Giá trị chênh lệch tối đa gần "11041", nó được ghi trong liên kết. Làm một bộ phận, bạn chỉ có thể nhận được tỷ lệ phần trăm. Nếu tôi quan tâm, tôi có thể đăng mã đã sửa đổi ở đây sau.

Kết quả thật tuyệt, nhưng tôi vẫn có "ảnh máy ảnh kỹ thuật số", được phát hiện giống với "ảnh trên TV". Vì vậy, tôi đã sử dụng ImageJ để phát hiện cạnh trong hình. Sử dụng phát hiện các hoạt động cạnh, ImageJ chuyển đổi hình ảnh thành một hình ảnh greyform cạnh phát hiện. Hơn tôi đặt hai hình ảnh được phát hiện cạnh trong cùng một bộ so sánh và nhân cả hai giá trị. Kết quả thậm chí còn chính xác hơn.

Getting the edge-detected form of the images

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