0

나는 512x512 이미지가 있고 그것을 재 압축하려고했습니다. 여기에 내가 DCT 계수의 수를 계산 jpeg 파일허프만 인코딩은 어떻게 dct 계수에서 이미지 (jpeg)를 구성합니까?

1) convert rgb to YCrCb 
    2) perform down sampling on Cr and Cb 
    2) convert YCrCb to DCT and Quantized according to chosen Quality 
    3) perform Huffman Encoding on Quantized DCT 

에 그러나 허프만 인코딩하기 전에 이미지를 다시 압축하는 단계를 그리고 그것은 64에 의해 그것을 의한 393216. 딩이되는 것이다 나에게 DCT 블록 (8 × 8)의 개수를 알 수있다 be be 6144.

이제 픽셀 도메인의 8x8 블록 수를 계산하려고했습니다. 512/8 = 64로 나에게 수직으로 64 블록을 제공합니다. 64 x 64 = 4096 픽셀 수를 512x512 = 262144

내에서 DCT 블록 수와 같지 않습니다. 압축 된 이미지의 크기 (512x512) (jpeg).

미리 감사드립니다. : D

+0

수동으로 호프만 인코딩을 했습니까? 아니면 라이브러리를 사용하고 있습니까? –

+0

전체 압축 프로세스에 라이브러리를 사용했습니다. –

답변

1

이미지가 색상 서브 샘플링없이 인코딩 된 경우 8x8 계수 블록 대 8x8 색상 구성 요소 블록의 비율이 1 : 1이됩니다. 각 MCU (최소 코딩 단위)는 8x8 픽셀이고 3 개의 8x8 계수 블록을 갖습니다. 512x512 픽셀 = 64x64 8x8 블록 x 3 (Y, Cr 및 Cb 각각 하나) = 12288 계수 블록.

색상을 서브 샘플링했다고 했으므로 (양방향으로 가정 함) 각 MCU 당 6 개의 8x8 블록을 갖게됩니다. 아래 다이어그램에서 가장 왼쪽의 다이어그램은 색상을 서브 샘플링하지 않은 경우를 보여주고 오른쪽 그림은 양방향으로 서브 샘플링을 보여줍니다. 이 경우 MCU 크기는 16x16 픽셀입니다. 각 16x16 블록의 픽셀에는 6 개의 8x8 계수 블록이 필요합니다 (4Y, 1Cr, 1Cb). 이미지를 16x16 MCU로 나누면 MCU 당 6 개의 8x8 블록 = 6144 계수 블록이있는 32x32 MCU가됩니다. 그래서, 귀하의 질문에 대답하기 위해, 허프만 인코딩은 계수의 수를 변경하는 것이 아니라 색상 서브 샘플링입니다. JPEG 이미지에서 컬러 서브 샘플링을 사용함으로써 발생하는 압축의 일부는 사람의 시각 시스템의 기능을 활용합니다. 우리의 눈은 색차보다는 휘도의 변화에 ​​더 민감합니다.

enter image description here

0

허프만 부호화 그런 픽셀 아무것도 변환 계수하지 않는다. 적어도 내가 생각하고있는 허프만 인코딩은 아닙니다. 모든 허프만 인코딩은 토큰 목록을 가져와 해당 토큰의 빈도를 기반으로 적은 비트로 나타냅니다.

예 : 당신이 A는, B, C 및 D

이제, 압축, 토큰들 각각은 2 개 비트를 필요 토큰 (00, 01, 10, 11).

의라고하자 0000010010101100 16 비트

하지만 허프만으로는 적은 비트 a를 나타내는 것 부호화 등 = 00, B = 01, C = 10 및 D = 11

aabaccda가 표시 될

A = 0, B = 110, C = 10, D = 111 다음

: 더 일반적인, 그리고 때문에이 정도 덜 흔한 일이기 때문에 당신은 더 많은과 bd을 나타내는 것,210

aabaccda00110010101110 14 비트

로 표현 될
0

이미지가 Y 성분은 512 × 512을 따라서 262,144 픽셀 262144 DCT 계수 65536 DCT로 바뀌 2 따라서, 256 × 256 픽셀로 다운 샘플링 인증 기관 및 CR 요소로되어있다 512 × 512 픽셀 인 계수 각각. 모든 DCT 계수의 합은 262144 + 65536 + 65536 = 393216입니다. 허프만은 이와 관련이 없습니다.