[Hỏi] So sánh tỉ lệ khác nhau giữa 2 images

Discussion in 'Thảo Luận Chung' started by money, Jan 9, 2018.

  1. money

    money Hương Chủ

    Anh em có ai biết thư viện nào dùng để so sánh tỉ lệ khác nhau giữa 2 ảnh không share mình với.

    Cần xử lý cả các trường hợp như ảnh khác width/height, khác resolution, revert color, rotate, ...
     
  2. Hoa Mãn Lâu

    Hoa Mãn Lâu Trưởng Môn

    Tự viết thôi anh, kiểu như mình chạy đoạn lệnh so sánh dài ngắn qui theo cm rồi so ra. ^^ Em nghĩ cái nầy chắc ko có thư viện sẵn đâu
     
  3. money

    money Hương Chủ

    Đơn giản thế thì nói làm gì nữa {doubt}{doubt}{doubt}
     
  4. bksparrow

    bksparrow Khách Qua Đường

    Trường hợp phức tạp thì rất khó, chắc phải tụi chuyên gia (Google/MS...)
    còn bình thường có cái này https://huddle.github.io/Resemble.js lười up thì click (Use example images) để xem ví dụ
     
    money likes this.
  5. money

    money Hương Chủ

    Không ăn thua bro ạ.
    Dùng hình A kích thước 900x600 rồi resize về kích thước 750x500 và save thành hình B.
    Đem 2 hình này so sánh nó nói là khác nhau 90% {doubt}{doubt}{doubt}
     
  6. Hoa Mãn Lâu

    Hoa Mãn Lâu Trưởng Môn

    Em thấy nó ghi khác nhau 90% là đúng rồi mà anh, Chứ anh muốn kết quả ra thế nào mới đúng ý anh??? Giống nhau 100% ạ?
     
  7. money

    money Hương Chủ

    Giống nhau gần 100% mới đúng. Ảnh resize mà nói khác ảnh gốc thì nói làm gì nữa.
     
  8. Phan Thị

    Phan Thị Bang Chúng

    cụ thử làm như này dc ko
    1. Resize về chung 1 kích thước
    2. chọn random 100 điểm hoặc nhiều hơn trên cả 2 bức ảnh. rồi đem so sánh màu của chúng xem có giống nhau ko. nếu giống thì ảnh giống nhau
     
  9. money

    money Hương Chủ

    Cách này trên stackoverflow có nói nhưng ko pass trường hợp rotate hoặc revert color.
     
  10. Hoa Mãn Lâu

    Hoa Mãn Lâu Trưởng Môn

    Yêu cầu của anh khó vãi, chắc phải kiếm lib về AI hoặc ML mới làm dc quá {beat_brick}{beat_plaster}{beat_shot}
     
  11. nhat.itsuper

    nhat.itsuper Moderator Staff Member

    Mông lung quá a @@. Lâu rồi e cũng bỏ nghiệp auto. Chuyển qua trade :D
     
  12. money

    money Hương Chủ

    Bọn GG, Bing nó làm dc đó thôi. Em up 1 cái image lên là nó show ra image tương tự cho dù có resize, crop, rotate, revert color ... các kiểu. Anh nghĩ là ko khó lắm vì giữa hàng tỉ image nó lưu trữ mà nó so sánh và trả kết quả về nhanh thế chứng tỏ thuật toán cũng đơn giản.
     
    Tony Vu likes this.
  13. money

    money Hương Chủ

    Ếu tin. Cái gì đây?
    tool.jpg
     
  14. nhat.itsuper

    nhat.itsuper Moderator Staff Member

    Dự
    dự phòng a ơi :))
     
  15. atula111

    atula111 Tân Thủ Thôn

    Cái anh đang bảo nó như kiểu là thuật toán rồi. Trước em cũng phải viết 1 cái code bằng c với object c để xoá watermark trên ảnh. Em toàn tự nghĩ ra thuật toán thôi. Như của anh thì thường là cộng trừ giá trị của 2 điểm ảnh cạnh nhau. Bọn google với bing nó search hình ảnh cũng dùng trò này mà
     
  16. money

    money Hương Chủ

    Cách này ko pass dc trường hợp revert color.
    Anh có tìm hiểu thì thấy có cách là tụi nó dùng thuật toán edge detection trên từng image rồi map các edge ra ma trận 0 1 sau đó tính toán giá trị của 2 ma trận để đo độ khác nhau. Thấy phức tạp quá :D Nhưng có lẽ cách này dùng cho số lượng lớn ảnh phù hợp vì khi so sánh chỉ cần thông tin ma trận của ảnh (sẽ gọn hơn và việc tính toán nhanh hơn vì chỉ có các số 0 1)
    Cái anh cần là thư viện chứ ko phải thuật toán. Code cực lắm :D Nếu có thư viện cho dùng hoặc mua để dùng thì tốt.
     
  17. Luxifer

    Luxifer Sơ Nhập Giang Hồ

    Tool/API có sẵn thì mình không biết. Nhưng thư viện hỗ trợ thì nhiều...và phải code. Money đưa ra nhiều tiêu chí so sánh quá, mình nghĩ cứ theo cấp độ khác nhau mà chọn giải pháp khác nhau thôi.

    Tham khảo:
    - OpenCV => Google
    - https://rosettacode.org/wiki/Percentage_difference_between_images
     
    money likes this.
  18. money

    money Hương Chủ

    Mình đang xem thằng này, dùng DTC Hash của nó khá chính xác: http:// phash. org/demo/
    OpenCV thấy cũng hay mà không thấy có demo trực quan sinh động cho dễ test :D
    rosettacode xem phần code C# thấy đoạn dưới này là biết chuối rồi:

    Code:
    if (img1.Size != img2.Size)
            {
                Console.Error.WriteLine("Images are of different sizes");
                return;
            }
     
  19. Luxifer

    Luxifer Sơ Nhập Giang Hồ

    LOL quá chuối, cơ mà tùy tiêu chí đánh giá như thế nào là khác thôi.

    phash.org kia thì C API, OpenCV cũng làm được mấy cái này.
     
  20. money

    money Hương Chủ

    Kaka chốt lại là dùng Magick.Net nha 500 anh em. Mới code xong cái tool, để ngưỡng xác định 2 images khác nhau là 0.26 (kết quả so sánh <= 0.26 là giống nhau, > 0.26 là khác nhau)
    Kết quả tạm chấp nhận được chứ không tuyệt đối. Mình không cần phải thông minh như GG nên thấy cũng ổn (AQ tí cho lên tinh thần :D )
    Code đơn giản (dùng C#):

    Code:
    MagickImage img1 = new MagickImage(firstImagePath);
    MagickImage img2 = new MagickImage(secondImagePath);
    double magickCompare = img1.Compare(img2, ErrorMetric.RootMeanSquared); // có hỗ trợ compare theo perceptual hash như http:// phash. org nhưng thấy RootMeanSquared chính xác hơn
    MessageBox.Show(String.Format("MagickCompare: difference {0}", magickCompare), "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);