2016-12-13 9 views
0

저는 artisanal jpeg 알고리즘을 프로그래밍하고 있습니다. 여기 을 내가 인코딩하기 위해 노력하고있어 사진입니다 : 그러나, 양자화 단계는 문제가 될 것으로 보인다 Lena.pngJPEG 압축 인공물 (녹색 픽셀)

을 그리고 여기 양자화 단계 (디코딩하지만 허프만 인코딩 물건없이 +) 직후 결과입니다 post quantization result

지금이 단계 내 코드 :

def quantification(transformee) : 
matrice=np.array([(16 , 11 , 10 , 16 , 24 , 40 , 51 , 61),(12 , 12 , 14 , 19 , 26 , 58 , 60 , 55),(14 , 13 , 16 , 24 , 40 , 57 , 69 , 56),(14 , 17 , 22 , 29 , 51 , 87 , 80 , 62),(18 , 22 , 37 , 56 , 68 , 109 , 103 , 77),(24 , 35 , 55 , 64 , 81 , 104 , 113 , 92),(49 , 64 , 78 , 87 , 103 , 121 , 120 , 101),(72 , 92 , 95 , 98 , 112 , 100 , 103 , 99)],dtype=float) 
quanti=[] 
for i in transformee : 
    k=i/matrice 
    quanti+=[np.around(k)] 
return quanti 

def dequantification(quanti) : 
matrice=np.array([(16 , 11 , 10 , 16 , 24 , 40 , 51 , 61),(12 , 12 , 14 , 19 , 26 , 58 , 60 , 55),(14 , 13 , 16 , 24 , 40 , 57 , 69 , 56),(14 , 17 , 22 , 29 , 51 , 87 , 80 , 62),(18 , 22 , 37 , 56 , 68 , 109 , 103 , 77),(24 , 35 , 55 , 64 , 81 , 104 , 113 , 92),(49 , 64 , 78 , 87 , 103 , 121 , 120 , 101),(72 , 92 , 95 , 98 , 112 , 100 , 103 , 99)],dtype=float) 
retour_transformee=[] 
for k in quanti : 
    temp=np.zeros((8,8),dtype=float) 
    for i in range(8) : 
     for j in range(8) : 
      temp[i,j]=matrice[i,j]*k[i,j] 
    retour_transformee.append(temp) 
return retour_transformee 

transformee 8 * 8 행렬의 목록 (DCT 이미 사용)이다. 양자화 매트릭스는 디코딩 한 후 값을 클리핑하지 않는 것처럼 이미지가 보이는 알고리즘

답변

0

에서 프랑스 부분에 대한

죄송 위키 피 디아 (JPEG)에 주어진 하나입니다.

양자화에 의해 DCT 계수가 변경되면 IDCT가 0-255 범위를 벗어나는 값을 생성 할 수 있습니다.

+0

조언을 주셔서 감사합니다, 내 알고리즘을 수정 않았다. 그러나 IDCT 결과에 대한 테스트를 수행했습니다. 모든 계수는 0에서 255 사이의 값을 갖습니다 ([[-128 : +127]]). 최종 사진과 동일합니다. – Merlu

0

RGB에서 YCbCr 및 YCbCr에서 RGB 로의 변환이 [0..255]로 고정되도록하는 것이 좋습니다. 두 색 공간은 겹치지 만 동일하지는 않습니다.

+0

제안 해 주셔서 감사합니다. – Merlu