2013-03-07 2 views
5

여러 JPEG 이미지를 하나의 큰 이미지로 함께 저장할 때 저장 공간을 줄이는 문제를보고 있습니다. 기본적인 직관은 이미지가 비슷한 위치에 있거나 같은 시점에서 찍은 것과 같은 유사점을 갖는 경향이 있으며 공간을 절약하기 위해이 유사점을 활용할 수 있습니까?JPEG 이미지 압축

전체적인 흐름은 : 입력 JPG 이미지 -> 함께 유사한 RGB 타일 재구성 - -> 다시 포맷 변환 JPG> 각 화상 RGB 이미지 타일로 변환된다. 당연히 이미지를 검색 할 때 역순 처리가 필요합니다.

타일 재구성을위한 유사성 척도로 Y 구성 요소의 DC 계수를 사용하여 10 개의 이미지에 대해 ~ 8 % 공간 절약 효과를 얻었습니다. 100 개의 이미지에 대해 이렇게하면 절약 효과가 ~ 3 %로 줄어 듭니다.

  • 타일 재구성 후 절약 효과를 얻으려면 어떻게해야합니까? 즉 JPEG 인코딩 프로세스의 어느 부분에서이 이미지 타일 재구성을 활용할 수 있습니까?

    다른 일부 거기에 대신 Y 구성 요소의 DC 계수의

  • , 당신이 생각할 수있는 다른 지표보다


개정 JPEG 인코딩에 의해 악용 될 것이다있다 JPG 이외의 이미지 형식으로이 종류의 유사성을 악용하여 이미지를 여러 개 모을 때 더 좋습니까? 예를 들어 PNG처럼? 이 될 것입니다하지만 - 당신이 다음 이미지의 가장자리가없는 불연속과 완벽하게 일치, 특히 (서로 유사한 지역을 넣을 때,

첫째 : 당신이 혜택을 볼 곳

답변

5

아마도 인코딩에 JFIF를 사용하고있을 것입니다.

이 방법이 어떻게 작동하는지 잘 모르겠습니다. 제가 올바르게 이해한다면, 여러분은 이미지를 타일로 나누어 하나의 메가 이미지로 모으고, "유사한"타일을 서로 가깝게 배치하십시오.

AFAIK, JPEG 구현은 매크로 블록이라고하는 이미지의 개별 8x8 타일마다 별도의 DCT를 수행합니다. 즉, JPEG는 인접 매크로 블록 간의 일관성을 활용할 수 없습니다 (이는 압축 기술의 기본 가정으로 간주됩니다).

타일이 매크로 블록보다 큰 경우 이미지 헤더 공간을 절약 할 수있는 것보다 개선되지 않습니다.

예 : JPG 이미지 헤더를 1로 바꾸면 90 %의 공간이 절약되지만 헤더에는 만 남습니다. 전반적인 파일을 볼 때 머리글은 전체 파일의 작은 부분이므로 공간을 절약 할 수 있습니다. 100 이미지 헤더를 1로 바꾸면 99 %를 저장하지만 헤더에만 만 다시 저장합니다. 두 경우 모두 모든 매크로 블록은 이전과 마찬가지로 여전히 인코딩되고 저장됩니다.

+0

감사합니다. libjpeg을 사용하여 인코딩 및 디코딩을 수행합니다. JPEG는 8x8 매크로 블록 내에서 DCT를 수행하므로 매크로 블록보다 큰 타일 간의 유사성은별로 도움이되지 않습니다. 그러나 이웃 매크로 블록의 DCT 계수는 상대적으로 인코딩 된 것으로 생각되며이 타일 재구성을 통해 어느 정도 개선 될 수 있습니다. 나는 내 질문을 수정했다. 한번보세요. – user655617

+0

다행을 밝히면 도움이됩니다. 예, libjpeg는 JPEG 표준의 IJG의 참조 JFIF 구현입니다. 델타 인코딩 (이웃 매크로 블록 중)을 사용하여 DCT 계수를 기억하지 못합니다. AFAIR, 모든 매크로 블록은 계수의 단일 8x8 행렬이되고, 그 다음에 데시 메이트됩니다 (이를 저장하는 데 필요한 비트 수를 줄이기 위해 나뉘어집니다 - 여기에서 손실 압축의 "손실"이 발생합니다). 그리고 zig에서 읽습니다 -zag 패션. 이 순서는 0의 장기 실행을 생성하며, 이는 실행 길이 인코딩을 통해 효율적으로 압축됩니다 (17 개의 0을 저장하는 대신 17, 0을 저장함). –

2

두 가지 영역이 있습니다 매우 드문 경우) jpeg 알고리즘의 DCT (주파수 공간) 부분은 큰 영역의 점진적 근사 (가장 큰 크기가 무엇인지 확실하지 않음)로 작동 한 다음 큰 영역과 여러 개의 작은 영역의 근사값 간의 오차를보고, 더 많은 현지화 보정을 생산할 수 있습니다.

귀하의 이미지가 매우과 비슷하거나 매우 작 으면 (이미지의 가장자리가 해당 영역에 비례하도록)이 효과가 작은 것으로 생각됩니다. 동일한 비트 패턴이 토큰 다수의 서브 - 이미지에 나타나는 것 같은 (쇼트)로 압축 될 수 있기 때문에 둘째

, JPEG 압축의 Huffman coding 부분) 이득을 볼 것이다.

이 부분은 동일한 이미지에있는 한 이미지를 압축하는 방식에 의존하지 않습니다.

+0

응답 해 주셔서 감사합니다. 나는 당신의 첫 번째 부분에 대해 확신하지 못합니다. 그러나, 나는 허프만 코딩이 이것을 이용하여 _some_ extent _if_ 내가 최종 출력을 유사한 타일을 가진 여러 이미지로 분할 할 수 있다고 생각합니다. 그러나 나는 그것이 내가 얻은 공간 절약을 설명한다고 생각하지 않는다. 나는 내 질문에 대해 다시 한 번 생각해 보았다. – user655617