ImageMagick을 사용하여 이미지“Diff”


179

두 이미지의 차이점을 어떻게 알 수 있습니까? 원본 이미지가 있습니다. 누군가 원본 이미지와 정확히 동일한 사본을 작성했습니다. 이제 원본과 필기체 이미지를 비교하고 이미지 형식의 필기체 만 추출해야합니다.

예 : 집 사진이 있습니다. 누군가가 사본을 가지고“안녕하세요!”라고 썼습니다. 사본에. 나는 어떻게 든 두 그림을 비교하고 집을 제거하고“Hello!”라는 단어의 이미지를 남기고 싶습니다.

ImageMagick으로 가능합니까? 이미지 간의 통계적 차이를 얻는 방법이 있지만 이것이 내가 원하는 것이 아닙니다.


8
ImageMagick 사용 설명서 의이 섹션 을 사용해보십시오 !
Benoit

1
이 질문은 ImageMagick에 관한 것임을 알고 있습니다. 그러나 불가지론적인 해결책을 찾은 "인과적인"검색자를 위해 Resemble.js에 대한 링크를 포함시켜야했습니다 .
brichins

누구든지 첫 번째 이미지에서 두 번째 이미지의 픽셀을 빼서 두 이미지를 비교하는 도구를 알고 있습니까? 나는 내 자신을 쓰지 않는 것을 선호합니다.
MarcusJ

Imagemagick 7에는 변하지 않는 이미지 모멘트를 사용하는 기술인 지각 해시가 있습니다. 회전, 배럴 왜곡, 크기 조정, 감마 변화, 노이즈 도입, 워터 마킹 후에도 동일하게 해시된다는 점에서 좋은 점입니다.
v.oddou

1
@ v.oddou, 감사합니다. 나는 문서를 읽고 몇 가지 더 많은 테스트를 수행했습니다. 매우 드물게 채워지고 픽셀 밀도가 매우 낮은 선 그리기에서는 성능이 좋지 않은 것으로 보입니다. 픽셀 밀도가 유사성을 식별하는 PHASH의 핵심 인 것 같습니다.
BReddy

답변:


321

내가 가장 좋아하는 것은 다음 두 가지입니다.

 compare image1 image2 -compose src diff.png
 compare image1 image2 -compose src diff.pdf

위의 두 명령의 유일한 차이점은 첫 번째 이미지는 두 이미지의 시각적 차이를 PNG 파일로, 두 번째 이미지는 PDF로 보여줍니다.

결과 diff 파일은 붉은 색이 다른 모든 픽셀을 표시합니다. 변경되지 않은 것은 흰색으로 나타납니다.

짧고 달다.

이미지 는 동일한 유형일 필요는 없습니다 . 한 가지 조건에서 JPEG, TIFF, PNG를 혼합 할 수도 있습니다. 이미지의 크기는 동일해야합니다 (이미지 크기는 픽셀). 출력 형식은 출력 파일 이름의 확장자에 따라 결정됩니다.

어떤 이유로 든 기본 해상도 (72dpi)보다 높은 해상도가 필요한 경우 적절한 -density매개 변수를 추가하십시오 .

 compare -density 300 image1 image2 -compose src diff.jpeg

예시 된 예

다음은 위 명령의 변형 결과에 대한 몇 가지 그림입니다. 참고 : 비교 된 두 파일은 PDF 파일 이었으므로 1 페이저 인 경우에도 작동합니다!


왼쪽 : 텍스트가있는 이미지       중앙 : 원본 이미지       오른쪽 : 빨간색 픽셀의 차이 (= 텍스트). 적색 차이 픽셀 만;  동일한 픽셀은 흰색입니다

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
        diff-compose-default.pdf

이것은 위에서 제안한 것과 같은 명령입니다.


왼쪽 : 텍스트가있는 이미지       중앙 : 원본 이미지       오른쪽 : '해초'픽셀의 차이. 해초 차이 픽셀 만;  동일한 픽셀은 흰색입니다

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
       -highlight-color seagreen \
        diff-compose-default.pdf

이 명령은 기본 빨강 대신 차분 픽셀을 'seagreen'으로 만드는 매개 변수를 추가합니다.


왼쪽 : 텍스트가있는 이미지       중앙 : 원본 이미지       오른쪽 : 파란색 차이 (단, 컨텍스트 배경 포함) 청색 차이 픽셀 만;  밝은 배경으로 비교 된 이미지 중 첫 번째l

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -highlight-color blue \
        diff-compose-default.pdf

이 명령은 -compose src부분을 제거합니다 . 결과는 기본 동작으로 compare두 개의 다른 이미지 중 첫 번째 배경을 밝은 배경으로 유지합니다. (이번에는 diff 픽셀이 파란색으로 표시되도록 매개 변수가 추가되었습니다.)


이 비교 클리닉의 출처를 이해할 수 없습니까? 이미지 브릭의 일부입니까? 창문에서 사용할 수 있습니까?
Krishnom

2
@Krishnom : 'imagebrick'과 같은 것은 없습니다. ImageMagick을 의미합니까?
커트 파이 플

2
@Krishnom :이 질문은 ImageMagick 솔루션에 대한 질문이었습니다. ImageMagick의 v6.x 소프트웨어 제품군에는 별도의 CLI 도구가 'compare'있습니다. ImageMagick v7.x의 경우 'magick compare'대신 실행해야합니다 .
커트 파이 플

내 잘못이야. 그 문제를 해결해 주셔서 감사합니다 (imagebrick-> imageMagick). 나는 그것을 시도 할 것이다. 또한 대량 이미지를 비교하는 도구를 찾고 있습니다. 도움을 주셔서 다시 한 번 감사드립니다
Krishnom

@Krishnom : "벌크 이미지"가 무엇인지 모르겠습니다. 그러나 여전히 ImageMagick 도구 모음이 원하는 것을 할 수 있다고 확신합니다.
Kurt Pfeifle

53

compare많은 응용 프로그램에서 잘 작동 하지만 특히 회색조 이미지를 비교할 때 때로는 다른 접근법을 선호한다는 것을 알았습니다.

convert '(' file1.png -flatten -grayscale Rec709Luminance ')' \
        '(' file2.png -flatten -grayscale Rec709Luminance ')' \
        '(' -clone 0-1 -compose darken -composite ')' \
        -channel RGB -combine diff.png

아이디어는 다음과 같습니다. 둘 다 file1.pngfile2.png회색조 로 변환합니다 . 그런 다음 첫 번째를 결과 이미지의 빨간색 채널로, 두 번째를 녹색 채널로 트래 트하십시오. 파란색 채널은 darken작성 연산자를 사용 하여이 두 가지로 구성되며, 기본적으로 최소값을 사용합니다.

따라서 두 이미지에서 모두 흰색이 흰색으로 유지됩니다. 두 이미지에서 모두 검은 색은 검은 색으로 유지됩니다. 첫 번째 이미지에서 흰색이지만 두 번째 이미지에서 검은 색은 빨간색으로 바뀌고 두 번째 이미지에서 흰색은 첫 번째 이미지에서 검은 색은 녹색으로 바뀝니다.

결과는 녹색을 첫 번째 입력에, 빨간색을 두 번째 입력에 쉽게 연결할 수있는 멋진 색상 코드 이미지입니다. 다음은 LaTeX의 출력과 KaTeX 의 출력을 비교하기 위해이를 사용하는 예입니다 ( 이를 개선하기 위해 버그수정 하기 전에 ).

여기에 이미지 설명을 입력하십시오

당신이 사용하는 접근 방식을 결합 할 수 있습니다 compare위치를 더 자세히보기 위해 위의 사용 후 뭔가 변경과 방법 이 변경되었습니다.


2
좋은! 약간의 상호 작용이 필요했기 때문에 Gimp에서 분석법을 복제했습니다. 참조 : 1) 이미지를 레이어로로드, 2) 색상-> 두 레이어의 채도 감소, 3) 레이어 탭의 두 레이어에서 알파 채널 제거, 4) 한 레이어에서 G + B 채널을 선택하고 모두 선택하고 채널을 지우십시오 검은 색, 두 번째 레이어의 R + B 채널과 동일, 4) 레이어 탭에서 상위 레이어의 화면 모드를 설정합니다.
Matěj Šmíd

1
@ 팜스 트롬 : 감사합니다! 원래 Gimp를 사용하여 이러한 이미지 비교를 수행했지만 입력 이미지에서 직접 "그레인 추출"레이어 모드를 사용 했기 때문에 공통 영역이 회색으로 끝나고 diff는 한 방향으로 검은 색이되고 다른 방향은 흰색이됩니다. . 읽기가 어렵지만 생성 속도가 빠르고 색상 정보를 포함 할 수 있습니다. “스크린”대신“어둡게 만”을 사용하고 검은 색 대신 흰색을 사용하지 않으면 내 명령을 더 가깝게 일치시킬 것입니다.
MvG

1
어떤 이유로 PDF를 입력하면 어떤 이유로 든 그레이 스케일 변환 후 이미지가 반전됩니다. 수정 -colorspace gray대신 사용 -grayscale Rec709Luminance하면 구성이 엉망이됩니다. 이를 처리 -respect-parentheses하기위한 첫 번째 옵션으로 추가하십시오 convert.
Brecht Machiels

다음은이 방법을 사용하여 두 개의 PDF를 페이지별로 시각적으로 구분하는 스크립트입니다 : gist.github.com/brechtm/891de9f72516c1b2cbc1 . pdfdiff디렉토리 의 PDF 각 페이지에 대해 하나의 JPG를 출력 하고 두 PDF간에 다른 페이지 수를 추가로 인쇄합니다.
Brecht Machiels

1
ImageMagick이에서 보인다 v6.7.7-10 -grayscale내가 사용했다, 지원되지 않습니다 -colorspace gray@BrechtMachiels는 제안
austinmarton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.