유사한 대형 이미지를 여러 개 압축하시나요?

유사한 대형 이미지를 여러 개 압축하시나요?

나는 지구 위성 이미지의 대규모 아카이브를 다루고 있는데, 각 이미지는 같은 지역에서 15분 간격으로 촬영되었으므로 서로 매우 유사합니다. 인접한 두 개의 것은 다음과 같습니다. 여기에 이미지 설명을 입력하세요

비디오 알고리즘은 여러 개의 유사한 이미지를 매우 잘 압축합니다. 그러나 이 이미지는 비디오(10848x10848)에 비해 너무 크고 비디오 인코더를 사용하면 이미지의 메타데이터가 삭제되므로 비디오 인코더를 사용하여 이러한 큰 이미지를 작업하더라도 이미지를 추출하고 메타데이터를 복원하는 것은 번거로울 것입니다.

몇 가지 테스트를 수행하기 위해 하루의 96개 이미지를 1080x1080 픽셀(총 40.1MB)로 줄이고 다음 결과로 다른 압축을 시도했습니다.

  1. 우편번호: 39.8MB
  2. rar: 39.8MB
  3. 7z : 39.6MB
  4. tar.bz2: 39.7MB
  5. zpaq v7.14: 38.3MB
  6. fp8 v2: 32.5MB
  7. paq8pxd v45:30.9MB

마지막 3개는 컨텍스트를 훨씬 더 잘 활용하고 실제로 기존 압축보다 더 잘 작동하지만 압축률은 15MB 또는 이미지 품질을 보존하는 데 훨씬 덜 걸릴 수 있는 mp4 비디오에 비해 여전히 매우 낮습니다.

그러나 이러한 압축 유틸리티에서 사용하는 알고리즘 중 어느 것도 비디오 압축만큼 이미지의 유사성을 활용하지 못하는 것 같습니다. 실제로,팩JPG, 각 이미지를 개별적으로 압축하면 전체 세트가 32.9MB로 줄어들어 fp8 및 paq8pxd에 매우 가깝지만 이미지 간의 유사성을 전혀 활용하지 않습니다(각 이미지가 개별적으로 압축되기 때문에).

또 다른 실험에서는 Matlab에서 위 두 이미지의 차이를 계산했는데 그 결과는 다음과 같습니다.

여기에 이미지 설명을 입력하세요

두 원본 이미지(219.5 + 217.0 = 총 436.5kB)를 fp8로 압축하면 350.0kB(80%)로 줄어들지만, 둘 중 하나와 차이 이미지를 압축하면(동일한 품질의 jpg로 122.5kB 사용) 결과가 나옵니다. 270.8kB(62%)의 파일에서 다시 말하지만(mp4와 packJPG 비교에서 알 수 있듯이) fp8은 유사점을 많이 활용하지 않는 것 같습니다. rar로 압축하더라도 원본 이미지에서 하나의 이미지에 차이를 더한 것이 fp8보다 더 좋습니다. 이 경우에는 333.6kB(76%)로 낮추십시오.

나는 많은 응용 프로그램을 구상할 수 있으므로 이 문제에 대한 좋은 압축 솔루션이 있어야 한다고 생각합니다. 내 특별한 경우 외에도, 많은 전문 사진작가들은 연속 촬영이나 타임랩스 이미지 등으로 인해 유사한 사진을 많이 가지고 있는 것 같습니다. 모든 경우에 이러한 압축의 이점이 있습니다.

또한 적어도 이미지 데이터에 대해서는 무손실 압축이 필요하지 않습니다(메타데이터는 보존되어야 함).

그래서... 압축된 이미지 간의 유사성을 활용하는 압축 방법이 있습니까?

위 테스트의 두 이미지를 다운로드할 수 있습니다.여기, 그리고 첫 번째 테스트의 96개 이미지여기.

답변1

이 작업을 수행하는 특정 소프트웨어는 모르지만 해당 주제에 대한 몇 가지 연구가 있습니다. 예를 들어 기사를 참조하십시오.유사한 이미지 세트 압축작성자: Samy Ait-Aoudia, Abdelhalim Gabis, Amina Naimi,하이브리드 압축 모델을 사용하여 유사한 이미지 세트 압축작성자: Jiann-Der Lee, Shu-Yen Wan, Chemg-Min Ma, Rui-Feng Wu.

보다 실용적인 수준에서는 예를 들어 다음을 사용하는 스크립트를 작성하여 뺄셈 기술을 확장할 수 있습니다.이미지매직연속 이미지 간의 차이를 계산하고 결과를 jpeg(또는 무손실을 원하는 경우 압축된 png)로 저장합니다. 하나의 기본 이미지와 훨씬 더 작은 압축된 "델타" 이미지 세트를 얻게 됩니다. ImageMagick을 사용하여 차이를 계산하려면:

convert image2.png image1.png -compose MinusSrc -composite -depth 24 -define png:compression-filter=2 -define png:compression-level=9 -define png:compression-strategy=1 difference-2-1.png

다시 추가하여 다시 계산하려면 다음을 수행합니다.

convert image1.png difference-2-1.png -compose Plus -composite image2-reconstructed.png

(대신 jpg를 사용하여 동일한 작업을 수행하고 많은 공간을 절약할 수 있습니다).

답변2

비슷한 이미지/PNG를 압축하고 검색을 통해 여기에서 길을 찾는 다른 사람들이 있기를 바랍니다.

링크가 더 이상 작동하지 않기 때문에 제가 비교 작업한 사용 사례가 운영 사진에 어떻게 적용될지 잘 모르겠습니다. 내 사용 사례는 비슷했지만 동일하지는 않았습니다. 매우 유사한 컴퓨터 프로그램 스크린샷을 압축하려고 했기 때문에 단순히 PNG 파일을 압축하는 것보다 잠재적으로 훨씬 더 압축할 수 있었습니다. 검색을 통해 해결책을 찾을 수 없어서 직접 생각해 냈고 결국 4.4%의 압축률을 기록했습니다(단순히 PNG를 압축하는 순진한 사용의 경우 96%와 반대).

내 데이터 세트는 1920x1080의 300개 PNG 파일이었고 원시 크기는 431.8mb였으며 bz2, 7z 및 유사한 도구에서 찾을 수 있는 최상의 설정을 사용하여 417.4mb로 압축되었습니다. 제가 이해한 바로는 다양한 PNG 최소화 도구가 원시 크기를 파일당 약 1.4mb에서 900kb로 줄였기 때문에 소스 파일이 PNG 수준에서 이상적으로 압축되지 않았다는 것입니다.

내 생각에 문제는 압축 도구가 데이터가 이미 압축되었다는 사실을 파악할 수 없고 원시 데이터의 작은 변화가 크게 다른 압축 파일로 이어질 수 있다는 것이었습니다. 그래서 ffmpeg데이터 손실이 발생하지 않는 설정을 사용하여 파일의 압축을 풀었습니다 .

for FILE in screenshot-2024*; do ffmpeg -loglevel error -i $FILE -vframes 1 -compression_algo raw -pix_fmt rgb24 $FILE.tiff; done

이로 인해 개별 파일 크기가 1.4에서 6MB로 늘어났지만 7z/LZMA2로 압축하면 결과 파일 크기가 19.175.127바이트로 엄청나게 낮아져 원래 크기의 4.4%로 압축이 줄어듭니다.

.tiff다음을 사용 하여 파일을 다시 변환 .png할 수 있습니다.

for FILE in screenshot-2024*.tiff; do ffmpeg -loglevel error -i $FILE $FILE.png; done

물론 중복된 파일 끝을 수정할 수 있지만 이렇게 하면 테스트하는 동안 원본 소스를 덮어쓰지 않습니다.

압축에 사용한 설정은 다음과 같습니다. 설정이 Solid block size출력 크기에 가장 큰 영향을 미치는 것으로 보입니다.

  • 압축 수준: 9/울트라
  • 압축 방식: LZMA2
  • 사전 크기: 512MB
  • 단어 크기: 256
  • 솔리드 블록 크기: 512MB
  • 압축을 위한 메모리 사용량: 12GB

우리의 목표는 장기 보관이었기 때문에 추가 후프와 압축 시간은 큰 요인이 아니었습니다. 물론 마일리지는 다를 수 있습니다.

관련 정보