2012-04-14 64 views
8

Có thể so sánh hai hình ảnh với các độ phân giải khác nhau không?So sánh hình ảnh với các độ phân giải khác nhau

Ý tôi là ở đây một số cách tiếp cận thuật toán/lập trình. Ví dụ, bây giờ tôi tính mã băm từ mảng byte của hình ảnh và so sánh các giá trị mã băm này. Đó là công việc tuyệt vời nhưng không thành công trong trường hợp các độ phân giải khác nhau, tức là hình ảnh giống hệt nhau bằng mắt nhưng khác nhau về nội dung byte.

Ví dụ nhìn thấy hình ảnh của tôi gắn:
enter image description hereenter image description here

một trong số đó có 72 ppi nhưng khác 96 ppi. Tôi muốn có giá trị TRUE trong khi so sánh trên bình đẳng nhưng bây giờ tôi nhận được FALSE. Giúp xin vui lòng tìm giải pháp đúng ở đây.

+0

Có thể tạo bản sao có độ phân giải thấp của cả hai hình ảnh (nói 128 * 128, có thể 32 * 32) và so sánh các hình này thay thế? YMMV – wildplasser

+1

Câu trả lời này cho thấy một số phương pháp thú vị http://stackoverflow.com/a/844113/441354 – AntonS

Trả lời

5

Hai phương pháp băm nhận thức rất đơn giản, bạn có thể đưa ra một thử trước khi mạo hiểm vào lãnh thổ phức tạp hơn dựa trên rời rạc Cosine transform và các địa phương vs bình GLOCAL của một hình ảnh:

  1. Chuyển đổi hình ảnh thành màu xám

    1.1 (EDIT) Thực hiện hình ảnh của bạn không có nghĩa là

  2. Đè bẹp hình ảnh của bạn xuống đến kích thước thu nhỏ, nói [32x32]
  3. Run hai chiều rời rạc Cosine Transform
  4. Giữ phía trên bên trái [8 x 8], hầu hết các thành phần tần số thấp đáng kể
  5. Binarize khối, dựa trên các dấu hiệu của các thành phần
  6. Kết quả là một 64 bit băm

Và một biến thể về chủ đề này sẽ là

  1. Chuyển hình ảnh thành thang độ xám
  2. Tùy chọn tái kích thước thành kích thước được xác định trước.
  3. phân vùng các hình ảnh trong một số cố định của các khối
  4. Xác định toàn cầu trung bình
  5. Xác định giá trị trung bình ở địa phương cho mỗi khối
  6. Đối với băm, viết ra 1 hoặc 0 cho mỗi khối, trong khi chờ nếu địa phương có nghĩa là lớn hơn hoặc nhỏ hơn mức trung bình toàn cầu.

Ngoài ra, hãy xem phash.

+0

Tên phương thức chính thức cho phương pháp tiếp cận đầu tiên của bạn là gì? Có bất kỳ triển khai miễn phí nào trong một số ngôn ngữ lập trình không? –

+0

@Michael Z, tôi chỉ biết chúng là "băm cảm giác" xin lỗi. phash là mã nguồn mở, nhưng có những hạn chế cho việc sử dụng thương mại. Tốt nhất để nói chuyện với họ. Chúc may mắn. – Maurits

+1

Vâng cảm ơn. Nhưng tôi đã có một số vấn đề với bản ngã của bạn (tôi đã sử dụng cái đầu tiên). Sự thiếu hụt là trong * 5.Bao vụ khối, dựa trên dấu hiệu của các thành phần * bạn chưa làm rõ quá trình này. Tôi đã thực hiện binarization dựa trên dưới/trên không (0) giá trị, nhưng giải pháp chính xác là xem xét giá trị trung bình của màu sắc nhưng không phải bằng không. Bài viết này giúp tôi rất nhiều: https://www.memonic.com/user/aengus/folder/coding/id/1qVeq –

3

Đối với hình ảnh tổng hợp có một vài màu riêng biệt, tôi sẽ bắt đầu với đối sánh biểu đồ.

Về cơ bản, tăng số lượng pixel của mỗi màu trong mỗi hình ảnh và chia cho tổng số pixel. Sau đó, bạn có một vector float đơn giản như một dấu vân tay. Bạn có thể bỏ qua màu trắng nếu bạn muốn hình ảnh có ít hoặc nhiều đường viền được tính là một kết quả phù hợp

Nó sẽ không phát hiện cùng một hình ảnh với các lát được sắp xếp lại hoặc văn bản được di chuyển xuống một dòng nhưng tôi không nghĩ đó là mối quan tâm trong trường hợp này

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