예를 들어, JPEG 압축에 관한 최근 대화를 위해 두 JPEG (압축 수준 100이있는 압축 장치와 압축 수준이 95 인 압축 장치)간에 변경된 내용을 픽셀 단위로 비교하려고했습니다.
지루한 맞춤형 소프트웨어 프로그래밍없이 변경된 내용을 시각적으로 잘 보여주는 방법은 무엇입니까?
예를 들어, JPEG 압축에 관한 최근 대화를 위해 두 JPEG (압축 수준 100이있는 압축 장치와 압축 수준이 95 인 압축 장치)간에 변경된 내용을 픽셀 단위로 비교하려고했습니다.
지루한 맞춤형 소프트웨어 프로그래밍없이 변경된 내용을 시각적으로 잘 보여주는 방법은 무엇입니까?
답변:
Photoshop + 레이어 FTW. (예, Gimp 또는 동일한 기능을 가진 다른 편집 소프트웨어를 사용할 수도 있습니다.)
기본 이미지부터 시작하십시오. 위의 경우 jpeg 품질 100 이미지를 사용했습니다.
결과 이미지에서 두 이미지간에 어떤 방식 으로든 다른 픽셀은 흰색이됩니다. 임계 값을 변경하여 사물이 "약간 다른"상태가되도록 조정할 수 있습니다.
Lightroom과 jpeg 92와 100의 차이가 많은 예를 보여줍니다.
95와 100 사이에 전혀 차이가없는 예.
그것은 단지 "변경되거나 변경되지 않은"바이너리를 보여주는 것이 아니라, 컬러 채널에 의해 얼마나 변화했는지에 대해 더 자세히 알고 싶다면 어떻게해야할까요?
결과 픽셀이 밝을수록 색상이 더 다릅니다. 그러나 단점은 많은 회색 진흙으로 끝나는 것입니다 ... 그래서 때로는 차이점을 파악하기 위해 임계 값을 지정하는 것이 더 쉽습니다. 그래서 둘 다 빌드하고 어느 것이 보이는지 토글합니다.
Photoshop을 사용하는 경우 다음과 같이하십시오.
두 개의 jpeg를 동일한 psd 파일에 두 개의 별도 레이어에 넣습니다. 치수가 동일하기 때문에 정확하게 겹치게됩니다. (위에 올라간 것은 중요하지 않습니다).
레이어 혼합 모드를 "차이"로 설정하십시오. 대부분 검은 색 결과가 나타납니다. 두 원본 레이어 간의 품질 차이에 따라 노이즈가 다소 나타날 수 있습니다.
모든 이미지 처리 패키지는 이것을 쉽게 만들어야합니다. 이 시스템에 접근 할 수 있다면 Mathematica에서 어떻게하는지 보여 드리겠습니다. Mathematica는 프로그래밍 언어이지만 이러한 종류의 조작은 정말 쉽습니다. 예를 들어 대학 사이트 라이센스 등을 통해 액세스 할 수있는 경우 사용해보십시오.
먼저 이미지를 가져옵니다.
img = Import["http://farm1.staticflickr.com/62/171463865_36ee36f70e.jpg"]
JPEG 압축을 사용하여 다시 압축
img2 = ImportString@ExportString[img, "JPEG", "CompressionLevel" -> 0.35]
이제 픽셀 값의 차이를 가져 와서 음수 값이 유지되도록 먼저 부동 소수점 숫자로 변환하십시오.
diff = ImageSubtract[Image[img, "Real"], Image[img2, "Real"]]
차이 이미지에는 그다지 눈에 띄지 않으며 (차이가 작음) 음수 값이 검은 색으로 잘립니다. 전체 동적 범위를 채우도록 모든 값의 크기를 조정합니다 (최소값은 0, 최대 값은 1).
ImageAdjust[diff]
ImageDifference
두 이미지의 절대 차이를 제공하고 음수를 생성하지 않습니다. 이미지 처리 패키지, 특히 GUI 패키지 (Photoshop, GIMP)에서 찾을 수있는 작업입니다.
ImageDifference[img, img2]
또한 단일 RGB 채널 (예 : 빨간색)을 가져 와서 '대향'색상을 사용하여 양과 음의 차이를 시각화 할 수 있습니다.
ArrayPlot[0.5 + ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
차이가 5 배로 증폭 된 것과 같은 것이 있습니다. JPEG 아티팩트는 이제 더 잘 인식됩니다.
ArrayPlot[0.5 + 5 ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
프로그래밍 언어를 사용하는 이점은이를 쉽게 자동화 할 수 있으며 0.1과 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]
GitHub에는 여기 에 설명되어 있고이 데모에서 설명 된 것처럼 흥미로운 이미지 diff 도구가 웹에 내장되어 있습니다 .