Na przykład podczas niedawnej rozmowy na temat kompresji JPEG chciałem porównać piksel po pikselu, co zmieniło się między dwoma JPEG (jednym z poziomem kompresji 100, a drugim z poziomem kompresji 95).
Jak wygenerować dobre wizualne mapy tego, co się zmieniło bez żmudnego programowania niestandardowego?
Odpowiedzi:
Photoshop + warstwy FTW. (Tak, możesz również użyć Gimp lub dowolnego innego oprogramowania do edycji z tymi samymi funkcjami).
Zacznij od podstawowego obrazu, w powyższym przypadku użyłem obrazu 100 jakości JPEG.
Na powstałym obrazie każdy piksel, który w jakikolwiek sposób różni się między dwoma obrazami, będzie biały. Możesz go dostosować, aby rzeczy były „trochę inne”, zmieniając wartość progową.
Przykład pokazujący DUŻĄ różnicę między JPEG 92 a 100 od Lightroom.
Przykład pokazujący brak różnicy między 95 a 100.
Nie chodzi tylko o pokazanie binarnego „zmienionego czy nie”, a co jeśli chcesz uzyskać więcej szczegółów na temat tego, jak bardzo się zmieniło, powiedzmy przez kanał kolorów?
Im jaśniejsze wynikowe piksele, tym bardziej różnią się kolorem. Minusem jest jednak to, że kończysz z dużą ilością szarego błota ... więc czasami łatwiej jest po prostu przekroczyć próg, aby zobaczyć, gdzie są różnice. Dlatego buduję oba i przełączam, który z nich jest widoczny.
źródło
Jeśli używasz Photoshopa, oto jak bym to zrobił:
Umieść dwa pliki JPEG w tym samym pliku psd, na dwóch osobnych warstwach. Powinny nakładać się dokładnie, ponieważ ich wymiary są takie same. (który z nich jest na górze, nie ma znaczenia).
Ustaw tryb mieszania warstw na „Różnica”. Zobaczysz głównie czarny wynik. Zależy od różnicy jakości między dwiema oryginalnymi warstwami, w których może być mniej lub więcej hałasu.
źródło
Wszystkie pakiety przetwarzania obrazu powinny to ułatwić. Pokażę ci, jak to zrobić w Mathematica, jeśli masz dostęp do tego systemu. Mathematica jest językiem programowania, ale naprawdę łatwo jest wykonywać tego rodzaju manipulacje, więc jeśli masz do niego dostęp (np. Za pośrednictwem licencji witryny uniwersyteckiej), polecam spróbować!
Najpierw zaimportuj obraz:
Ponownie skompresuj go za pomocą kompresji JPEG
Teraz weź różnicę wartości pikseli, konwertując je najpierw na liczby zmiennoprzecinkowe, aby zapewnić zachowanie wartości ujemnych.
Na obrazie różnicy niewiele widać (różnica jest niewielka), a wartości ujemne są przycinane na czarno. Przeskalujmy więc wszystkie wartości, aby wypełnić cały zakres dynamiczny (minimum zostanie przeskalowane do 0, maksimum do 1):
ImageDifference
daje absolutną różnicę między dwoma obrazami i nie wytwarza liczb ujemnych. Jest to operacja, którą częściej można znaleźć w pakietach do przetwarzania obrazów, szczególnie w GUI (Photoshop, GIMP).Możemy również wziąć pojedynczy kanał RGB, na przykład czerwony, i wizualizować pozytywne i negatywne różnice za pomocą „przeciwnych” kolorów:
Oto to samo, z różnicami powiększonymi 5 razy. Artefakty JPEG są teraz bardziej rozpoznawalne.
Zaletą używania języka programowania jest to, że możemy go łatwo zautomatyzować i zobaczyć, jak zmienia się różnica dla „poziomów kompresji” między 0,1 a 1,0:
źródło
Możesz użyć narzędzi wiersza poleceń Imagemagick.
zapewni bezwzględną wartość różnic dla każdego kanału RGB.
źródło
GitHub ma wbudowane w nią kilka interesujących narzędzi do porównywania obrazów, jak opisano tutaj i zademonstrowano w tym demo .
źródło
Na powstałym obrazie czarne części pokazują, gdzie oryginalne obrazy są identyczne, a wszystko jaśniejsze pokazuje różnice.
źródło