Jak uzyskać różnicę między dwoma obrazami? Mam oryginalny obraz. Ktoś napisał na dokładnej kopii oryginalnego obrazu. Teraz muszę porównać oryginał z zapisanym na obrazie i wyodrębnić tylko zapis w formacie obrazu.
Przykład: mam zdjęcie domu. Ktoś wziął kopię i napisał „Cześć!” na kopii. Chcę w jakiś sposób porównać dwa zdjęcia, usunąć dom i zostać z obrazem ze słowami „Hello!”.
Czy jest to możliwe dzięki ImageMagick? Wiem, że istnieją sposoby na uzyskanie statystycznej różnicy między obrazami, ale nie tego szukam.
image
image-processing
imagemagick
diff
difference
Justin Noel
źródło
źródło
Odpowiedzi:
Moimi ulubionymi są te dwa:
Jedyna różnica między dwoma powyższymi poleceniami: pierwsze pokazuje wizualną różnicę między dwoma obrazami jako plik PNG, a drugie jako plik PDF.
Wynikowy plik różnicowy wyświetla wszystkie piksele, które różnią się kolorem czerwonym. Te niezmienione wyglądają na białe.
Krótkie i słodkie.
Uwaga, Twoje obrazy nie muszą być tego samego typu. Możesz nawet mieszać pliki JPEG, TIFF, PNG - pod jednym warunkiem: obrazy powinny mieć ten sam rozmiar (wymiary obrazu w pikselach). Format wyjściowy jest określany przez rozszerzenie nazwy pliku wyjściowego.
Jeśli z jakiegoś powodu potrzebujesz wyższej rozdzielczości niż domyślna (72 dpi) - wystarczy dodać odpowiedni
-density
parametr:Ilustrowane przykłady
Oto kilka ilustracji wyników dla odmian powyższego polecenia. Uwaga: dwa porównywane pliki były nawet plikami PDF , więc działa również z nimi (o ile są 1-stronicowe)!
Po lewej: obraz z tekstem Środek: obraz oryginalny Po prawej: różnice (= tekst) w czerwonych pikselach.
To jest to samo polecenie, które zasugerowałem wcześniej.
Po lewej: obraz z tekstem Środek: obraz oryginalny Po prawej: różnice w pikselach „seagreen”.
To polecenie dodaje parametr powodujący, że piksele różnicy będą „zielone” zamiast domyślnego czerwonego.
Po lewej: Obraz z tekstem Środek: Obraz oryginalny Po prawej: Niebieskie różnice (ale z pewnym tłem kontekstowym) l
To polecenie usuwa
-compose src
część - w wyniku tego domyślne zachowaniecompare
zachowuje jako rozjaśnione tło pierwszy z dwóch rozróżnionych obrazów. (Tym razem z dodanym parametrem sprawiającym, że piksele diff są wyświetlane na niebiesko).źródło
'compare'
. W przypadku wersji 7.x programu ImageMagick należy'magick compare'
zamiast tego uruchomić .Chociaż
compare
dobrze radzi sobie z wieloma aplikacjami, odkryłem, że czasami wolę inne podejście, szczególnie podczas porównywania obrazów, które są głównie w skali szarości:Pomysł jest następujący: przekonwertuj oba
file1.png
ifile2.png
na skalę szarości. Następnie potraktuj pierwszy jako czerwony kanał wynikowego obrazu, a drugi jako zielony kanał. Niebieski kanał jest tworzony z tych dwóch za pomocądarken
operatora tworzenia, co w zasadzie oznacza przyjmowanie minimum.Zatem rzeczy, które są białe na obu obrazach, pozostają białe. Rzeczy, które są czarne na obu obrazach, pozostają czarne. Rzeczy, które są białe na pierwszym obrazie, ale czarne na drugim, zmieniają kolor na czerwony, a rzeczy, które są białe na drugim, ale czarne na pierwszym, zmieniają kolor na zielony.
W rezultacie otrzymujesz ładnie zakodowany kolorami obraz, w którym możesz łatwo skojarzyć kolor zielony z pierwszym wejściem, a czerwony z drugim. Oto przykład, w którym używam tego do porównania danych wyjściowych z LaTeX z tymi z KaTeX (zanim naprawiłem jakiś błąd, aby to poprawić):
Możesz połączyć te podejścia, używając,
compare
aby zobaczyć, gdzie coś się zmieniło, a następnie używając powyższego, aby zobaczyć bardziej szczegółowo, jak to się zmieniło.źródło
-colorspace gray
zamiast-grayscale Rec709Luminance
naprawia to, ale to psuje kompozycję. Dodaj-respect-parentheses
jako pierwszą opcję, abyconvert
się tym zająć.pdfdiff
katalogu i dodatkowo drukuje numery stron, które różnią się między dwoma plikami PDF.-grayscale
nie jest obsługiwany, musiałem użyć-colorspace gray
zgodnie z sugestią