Tôi đang cố gắng so sánh hai hình ảnh (xác định xem chúng có giống nhau hay không) bằng cách sử dụng thư viện OpenCV. Tôi đã cấu hình trình bao bọc java và tìm thấy một số hướng dẫn (chủ yếu là trong C/C++) mà tôi đang cố gắng viết lại vào Java. Tôi đang sử dụng phương pháp phát hiện tính năng.So sánh hai hình ảnh với OpenCV trong Java
Vấn đề là thuật toán hiện tại không tạo ra bất kỳ kết quả hợp lý nào (nó cho rằng hai hình ảnh tương tự không có điểm chung và tìm thấy các kết quả trùng khớp giữa hai ảnh khác hoàn toàn khác nhau). Ai đó có thể đề nghị tôi nên sử dụng trình kết hợp openCV để tạo ra một số kết quả hợp lý không?
Đây là mã của tôi cho sự so sánh hình ảnh
private static void compareImages(String path1, String path2) {
System.out.println(path1 + "-" + path2);
FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
DescriptorExtractor descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
// first image
Mat img1 = Imgcodecs.imread(path1, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
Mat descriptors1 = new Mat();
MatOfKeyPoint keypoints1 = new MatOfKeyPoint();
detector.detect(img1, keypoints1);
descriptor.compute(img1, keypoints1, descriptors1);
// second image
Mat img2 = Imgcodecs.imread(path2, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
Mat descriptors2 = new Mat();
MatOfKeyPoint keypoints2 = new MatOfKeyPoint();
detector.detect(img2, keypoints2);
descriptor.compute(img2, keypoints2, descriptors2);
// match these two keypoints sets
MatOfDMatch matches = new MatOfDMatch();
matcher.match(descriptors1, descriptors2, matches);
for (DMatch m : matches.toArray()) {
// how to use these values to detect the similarity? They seem to be way off
// all of these values are in range 50-80 which seems wrong to me
System.out.println(m.distance);
}
}
Thật không may, các thuật toán như SURF và SIFT không có sẵn trong các wrapper java vì vậy tôi đang sử dụng ORB. Tôi có ít hoặc không có kinh nghiệm với tầm nhìn máy tính, tôi chỉ cố gắng để có được thuật toán so sánh đơn giản này làm việc để tạo ra một số kết quả hợp lý. Tôi sẽ rất vui khi được giúp đỡ!
EDIT: Trường hợp sử dụng của tôi đang chạy thuật toán này so với hình ảnh được chụp từ các góc khác nhau. Tôi đã cập nhật mã của mình để được định dạng tốt hơn.
hình ảnh mẫu để so sánh:
[có thể có ích] (http://stackoverflow.com/questions/15544158/error-matching-with-orb-in- android) – GPPK
Thuật toán trong liên kết có vẻ giống hệt như những gì tôi có ở đây ... vẫn tạo ra kết quả rất kém. Tôi chỉ muốn tải hai hình ảnh và sản xuất một số loại giá trị cho thấy sự giống nhau của chúng – Smajl
chỉ là một lưu ý: tôi đã cố gắng ghép hai hình ảnh với 'cv :: Stitcher' mà sử dụng nội bộ' xfeatures2d :: SURF' và stitcing đã thất bại. tôi nghĩ rằng điều này có nghĩa là rất khó để xác định sự hài hước của hình ảnh của SURF – sturkmen