Làm thế nào tôi có thể phát hiện các bức ảnh được nâng cấp?


8

Tôi có một bộ sưu tập ảnh JPEG, mỗi ảnh dài 500 đến 600 pixel. Làm cách nào tôi có thể phát hiện những cái nào đã được phóng to bằng thuật toán từ một bức ảnh nhỏ hơn đáng kể?

Thị trường trực tuyến yêu cầu mỗi người bán tải lên ảnh của sản phẩm mà họ bán và những ảnh này phải rộng tối thiểu 500 pixel hoặc cao 500 pixel vì ảnh sản phẩm có ít chi tiết gây ra trải nghiệm kém cho người mua. Tôi đã có thể biết liệu người bán có đang cố gắng phá vỡ yêu cầu này hay không bằng cách thêm đường viền màu, chẳng hạn như mở rộng nền trắng tiêu chuẩn với nhiều màu trắng hơn. Nhưng gần đây, người bán đã bắt đầu phá vỡ điều này bằng cách nâng cấp các bức ảnh cũ được chụp trước khi yêu cầu 500 pixel được công bố. Một cách tốt để xác định xem các bức ảnh đã được phóng to với phép nội suy lân cận, song tuyến hoặc nhị phân gần nhất là gì?


Chỉ cần làm rõ, bạn đang hỏi về phát hiện hoàn toàn tự động, mà không có bất kỳ đánh giá nào của nhãn cầu con người?
Junkyardsparkle

4
Đối với thử nghiệm tự động, stackoverflow có nhiều khả năng cung cấp cho bạn câu trả lời
Renan Le Caro

@Renan Ngay cả một thử nghiệm thủ công sử dụng chuỗi bộ lọc GIMP cũng có thể hoạt động để kiểm tra tại chỗ các hình ảnh của một người bán cụ thể.
Damian Yerrick

1
Tôi đoán câu hỏi chúng ta cần hỏi là tại sao bạn quan tâm? Nó làm cho khá nhiều sự khác biệt cho câu trả lời ...
James Snell

@JamesSnell Ảnh xấu đẩy lùi người mua. Xem ví dụ hướng dẫn của eBay .
Damian Yerrick

Câu trả lời:


9

Có một DOG đánh hơi mờ trong các bức ảnh.

Nếu bạn sẽ bị phạt vì những bức ảnh được phóng to kỹ thuật số, bạn cũng có thể bị phạt vì những bức ảnh thiếu nét. Các cạnh mờ và chi tiết trong cả hai đều gây ra trải nghiệm xấu giống nhau cho người xem, bất kể nguyên nhân là do nguyên bản nhỏ hay tiêu cự kém. Những gì bạn muốn làm là phát hiện mờ, đó là sự vắng mặt của tần số không gian cao.

Hãy thử lấy sự khác biệt giữa một hình ảnh và một bản sao mờ của chính nó. Nếu hình ảnh đã bị mờ, độ mờ Gaussian 1 pixel sẽ không thay đổi hình ảnh nhiều như thể hình ảnh sắc nét. Vì vậy, sẽ có nhiều sự khác biệt giữa một hình ảnh sắc nét và một phiên bản mờ hơn so với giữa một hình ảnh mờ và một phiên bản mờ hơn nữa. Trong thị giác máy tính, kỹ thuật này được gọi là " sự khác biệt của Gaussian " (DOG).

  1. Mở hình ảnh trong GIMP hoặc trình chỉnh sửa ảnh lớp khác.
  2. Nhân đôi layer.
  3. Áp dụng Gaussian Blur với bán kính 1 pixel cho lớp mới này.
  4. Thay đổi chế độ lớp thành "Khác biệt". Hình ảnh sẽ chuyển sang màu đen ngoại trừ các cạnh.
  5. Lặp lại các bước 1-4 cho một hình ảnh sắc nét đã biết về chủ đề, bố cục và kích thước tương tự.
  6. So sánh cường độ của các cạnh trong hai hình ảnh khác nhau. Bạn có thể nhãn cầu này hoặc sử dụng một biểu đồ.

Tôi vừa thử điều này trên một bức ảnh 400x480 pixel và trên cùng một thứ đã được giảm xuống 200x240 (50%) và sau đó được phóng to trở lại 400x480 (200%), và các cạnh trong bức ảnh được nâng cấp khá mờ nhạt. Nó sẽ không được kết luận về một sự mở rộng nhẹ như 140%, nhưng nó sẽ bắt các trường hợp trắng trợn.

Một số thư viện thị giác máy tính bao gồm các phương tiện để tính toán sự khác biệt của Gaussian trên một hình ảnh. Vì vậy, nhiều biên tập hình ảnh đồ họa. Các phiên bản gần đây của GIMP, ví dụ. bao gồm macro DOG tự động hóa các bước từ 2 đến 4: Bộ lọc> Phát hiện cạnh> Sự khác biệt của Gaussian, sau đó đặt bán kính thành 1.0 và 0.0.

Các câu hỏi liên quan trên các trang web Stack Exchange khác:

DOG sẽ không bắt được người hàng xóm gần nhất, nhưng bạn có thể làm điều đó bằng cách tìm kiếm một mô hình các hàng và cột giống hệt với hàng xóm trực tiếp của họ về phía trên hoặc bên trái.

  1. Mở hình ảnh.
  2. Nhân đôi layer.
  3. Bù đắp lớp mới một pixel lên hoặc sang trái.
  4. Thay đổi chế độ lớp thành "Khác biệt".
  5. Tìm kiếm một mô hình của các dòng trống.

1
Điều gì sẽ xảy ra nếu hình ảnh được nâng cấp có mặt nạ unsharp thực sự mạnh được áp dụng?
Vui lòng đọc hồ sơ của tôi

1
@mattdm unsharp mask làm tăng độ tương phản, nó không tạo ra nội dung hình ảnh tần số cao.
Matt Grum

@mattdm USM là bộ lọc tăng cường cao : x + amt*(x - GB(x, r)). Kết hợp USM và phóng to sẽ chỉ tăng cường mức trung bình (freqs không gian giữa), chứ không phải mức cao, bởi vì mức cao không tồn tại. DOG (x, 1, 0) cô lập các mức cao.
Damian Yerrick

1

Tôi không cho rằng điều này là có thể theo nghĩa chung. Có rất nhiều thuật toán nâng cấp có thể, với một chữ ký có thể khó phát hiện rõ ràng mà không có kiến ​​thức về nội dung hình ảnh (như một ví dụ cực đoan, một vùng màu đồng nhất được nâng cao vẫn là màu đồng nhất ...).

Có thể một tùy chọn sẽ là tính toán một số liệu cho độ phức tạp của hình ảnh, chẳng hạn như ước tính entropy (ví dụ: xem /programming/4935380/get-or-calculate-the-entropy-of-an-image-with -ruby-và-fantemagick ).

Nếu bạn làm điều này trên một số lượng lớn hình ảnh, bạn có thể tạo số liệu thống kê cho toàn bộ bộ sưu tập. Sau đó, bạn có thể xem lại thủ công các hình ảnh ngoại lệ trong các thống kê đó.

Thật không may, điều này luôn dẫn đến kết quả dương tính giả và hình ảnh được tăng tỷ lệ tốt có thể không bị bắt (nhưng nếu chúng tốt, có vấn đề gì không?)


Tôi thích phần cuối cùng - nếu không ai có thể nói, ai quan tâm? Nhắc tôi về Xkcd này . (Cảnh báo: ngôn ngữ mạnh.)
Vui lòng đọc hồ sơ của tôi

0

Tôi sẽ có một cách tiếp cận lai. Tôi nghĩ rằng các ý tưởng khác về việc sử dụng Sự khác biệt của Gaussian, kiểm tra EXIF ​​hoặc siêu dữ liệu khác hoặc thậm chí FFT có thể được kết hợp. Một cách khác có thể dễ dàng hơn là chỉ cần lấy từng hình ảnh, thu nhỏ nó, nâng cấp lại và so sánh. Nếu chúng rất giống nhau (có thể sử dụng một cái gì đó như Delta E , có lẽ), thì có khả năng chúng đã được nâng cấp (hoặc mờ như một bài đăng khác gợi ý). Có lẽ bạn có thể tạo ra một ngưỡng của số lượng thử nghiệm vượt qua so với thất bại? Nếu hơn một nửa các bài kiểm tra vượt qua, thì tốt, nếu không, nó xấu hoặc cần sự can thiệp của con người để xác minh, hoặc một cái gì đó tương tự.


0

Bạn sẽ có thể thực hiện một công việc đủ tốt bằng cách giải nén một phần dữ liệu JPEG và thực hiện một số phép tính nhỏ.

Dữ liệu JPEG được tạo bằng cách thực hiện chuyển đổi cosine rời rạc trên dữ liệu ảnh gốc, định lượng hóa (loại bỏ dữ liệu độ phân giải cao), sau đó đi qua khối DCT kết quả theo mô hình zigzag và đóng gói luồng bit kết quả bằng mã hóa Huffman.

Nếu bạn đảo ngược mã hóa Huffman và hoàn tác zigzag, bạn sẽ có một loạt các khối DCT 8x8, trong đó dữ liệu tần số thấp nhất nằm ở góc trên bên trái của khối và thông tin tần số cao nhất nằm ở phía dưới bên phải.

Điều đó có nghĩa là bạn có thể lướt qua dữ liệu theo định dạng trung gian theo nghĩa đen và cho biết liệu nó có bị đảo lộn hay không, bởi vì tất cả các khối 8x8 sẽ chỉ có các giá trị khác không ở góc trên bên trái (đại khái).


0

Thật ra bạn có thể

Bạn không cần một con chó để đánh hơi hình ảnh. Đi đến:

http://rest7.com/image_upscaled

Trên trang này, bạn có thể tải lên hình ảnh của mình và sẽ nhận được kích thước ban đầu , như thế này:

{
  "is_upscaled": true,
  "current_width": "2000",
  "current_height": "928",
  "original_width": "1750",
  "original_height": "696",
  "accuracy": "82%",
  "accuracy_width": "82%",
  "accuracy_height": "82%",
  "success": 1
}

Đôi khi nó không đoán đúng độ phân giải gốc. Tôi nghĩ rằng nó phụ thuộc vào thuật toán tăng tỷ lệ đã được sử dụng trên ảnh. Ngoài ra, tôi phát hiện ra rằng nếu một bức ảnh được nâng cấp và sau đó được nén thành định dạng JPEG với độ nén nặng (như 30%) thì các tạo phẩm JPEG sẽ khiến trang này khó đoán hơn. Nhưng nếu ảnh của bạn có chất lượng tốt, được nâng cấp bằng các phương pháp phổ biến (Lanczos, Bilinear) thì nó sẽ khá chính xác.

Dưới đây là 2 hình ảnh mẫu:

NGUYÊN

https: // i. cây rơm. imgur. com / iXYKV.png

(xin lỗi, tôi không có đủ danh tiếng để đăng hơn 2 liên kết)

UPSCALED & CROPPED

nhập mô tả hình ảnh ở đây

Nếu bạn đăng ảnh đã cắt, trang này sẽ trở lại:

{
  "is_upscaled": true,
  "current_width": "700",
  "current_height": "300",
  "original_width": 352.33333333333,
  "original_height": 151,
  "accuracy": "57%",
  "accuracy_width": "57%",
  "accuracy_height": "57%",
  "cropped": true,
  "success": 1
}

Vì vậy, bạn có thể thấy nó phát hiện hình ảnh được phóng to và cắt. Nó sẽ không cho bạn biết kích thước của ảnh gốc trước khi cắt vì không thể lấy thông tin về thứ gì đó đã bị xóa chỉ từ các pixel còn nguyên.


Trang web đó sẽ chỉ hoạt động miễn là bạn có thể tin tưởng vào dữ liệu được nhúng trong hình ảnh. Nhưng thật dễ dàng để sửa đổi dữ liệu đó. Và nếu tôi đang cố gắng đánh lừa một thị trường để kiếm tiền, tôi sẽ thay đổi dữ liệu bên trái và trung tâm.
Peter M

@PeterM Tôi không chắc ý của bạn là gì. Bạn muốn cắt một hình ảnh? Trang web này vẫn sẽ phát hiện ra rằng nó đã được nâng cấp.
Jack

Hãy tự hỏi làm thế nào nó biết rằng hình ảnh đã được cắt. Bạn nghĩ thông tin được lưu trữ ở đâu cho biết kích thước hình ảnh gốc là ở đâu?
Peter M

@PeterM Vâng, tôi không chắc chính xác nó hoạt động như thế nào nhưng tôi đã sử dụng nó một chút và tôi có thể nói với bạn rằng nó phân tích các pixel và phát hiện độ phân giải gốc dựa trên đó. Nó không phân tích định dạng tệp nhưng chính các pixel. Vì vậy, độ phân giải ban đầu không được lưu trữ ở bất cứ đâu.
Jack

@Jack Khi "nó phân tích các pixel", nó có thể sử dụng cái gì đó như DOG.
Damian Yerrick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.