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.png및 file2.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.