Tất cả các gói xử lý hình ảnh nên làm điều này dễ dàng. Tôi sẽ chỉ cho bạn cách làm điều đó trong Mathematica, nếu bạn có quyền truy cập vào hệ thống này. Mathematica là một ngôn ngữ lập trình, nhưng thực sự dễ dàng thực hiện các loại thao tác này, vì vậy nếu bạn có quyền truy cập vào nó (ví dụ như thông qua giấy phép trang web của trường đại học), tôi khuyên bạn nên thử!
Đầu tiên, nhập hình ảnh:
img = Import["http://farm1.staticflickr.com/62/171463865_36ee36f70e.jpg"]
Giải nén nó bằng nén JPEG
img2 = ImportString@ExportString[img, "JPEG", "CompressionLevel" -> 0.35]
Bây giờ lấy sự khác biệt của các giá trị pixel, trước tiên chuyển đổi chúng thành số dấu phẩy động để đảm bảo rằng các giá trị âm được giữ nguyên.
diff = ImageSubtract[Image[img, "Real"], Image[img2, "Real"]]
Không nhìn thấy nhiều trên hình ảnh khác biệt (sự khác biệt là rất nhỏ) và các giá trị âm được cắt thành màu đen. Vì vậy, hãy bán lại tất cả các giá trị để điền vào toàn bộ phạm vi động (mức tối thiểu sẽ được chia tỷ lệ thành 0, tối đa thành 1):
ImageAdjust[diff]
ImageDifference
cho sự khác biệt tuyệt đối của hai hình ảnh và không tạo ra số âm. Đây là thao tác bạn có nhiều khả năng tìm thấy trong các gói xử lý hình ảnh, đặc biệt là các gói GUI (Photoshop, GIMP).
ImageDifference[img, img2]
Chúng ta cũng có thể lấy một kênh RGB duy nhất, ví dụ như kênh màu đỏ và hình dung sự khác biệt tích cực và tiêu cực bằng cách sử dụng màu sắc 'đối lập':
ArrayPlot[0.5 + ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
Đây là điều tương tự, với sự khác biệt được khuếch đại 5 lần. Các đồ tạo tác JPEG dễ nhận biết hơn bây giờ.
ArrayPlot[0.5 + 5 ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
Ưu điểm của việc sử dụng ngôn ngữ lập trình là chúng ta có thể dễ dàng tự động hóa ngôn ngữ này và xem sự khác biệt thay đổi như thế nào đối với "mức nén" giữa 0,1 và 1,0:
Grid@Partition[Table[
ArrayPlot[
0.5 + ImageData[
First@ColorSeparate[
ImageSubtract[Image[img, "Real"],
Image[ImportString@
ExportString[img, "JPEG", "CompressionLevel" -> c],
"Real"]], "Red"]], ColorFunction -> "RedGreenSplit",
ColorFunctionScaling -> False],
{c, 0.1, 1, 0.1}
], 5]