2012-02-01 3 views
1

첫째, 숙제 문제라는 것을 인정합니다. 그러나 나는 붙어있는 것처럼 보인다. Phil Sallee's JPEG Toolbox을 사용하여 jpeg 이미지에서 모든 양자화 된 계수를 가져와야합니다 (링크는 "업데이트"제목 아래에있는 테이블 아래쪽에 나열되어 있습니다) (히스토그램을 작성할 것입니다. 그러나 그 부분은 처리 할 수 ​​있습니다. 필요한 데이터). 나는 크기가 약 5 MB입니다 JPEG 이미지를 가지고 내가 Sallee의 코드를 실행할 때이 데이터를 다시 얻을 :Sallee의 코드를 사용하여 MATLAB에서 양자화 된 계수를 찾는 방법은 무엇입니까?

image_width: 3000 
    image_height: 4000 
    image_components: 3 
    image_color_space: 2 
    jpeg_components: 3 
    jpeg_color_space: 3 
    comments: {} 
    coef_arrays: {[4000x3000 double] [2000x3000 double] [2000x3000 double]} 
    quant_tables: {[8x8 double] [8x8 double]} 
    ac_huff_tables: [1x2 struct] 
    dc_huff_tables: [1x2 struct] 
    optimize_coding: 0 
    comp_info: [1x3 struct] 
    progressive_mode: 0 

가 어떻게이 이미지에서 양자화 된 계수를받을 수 있나요? 처음 엔 그저 내가 처리 된 것을 볼 수 있었다 계수를 뱉어 이런 식으로 뭔가를 시도 :

pic = jpeg_read(image) 
img_coef = pic.quant_tables{pic.comp_info(1).quant_tbl_no} 
img_coef = pic.quant_tables{pic.comp_info(2).quant_tbl_no} 

img_coefquant_tables 데이터에 대한 두 가지 요소 위가 포인트입니다 배 때문에 실행됩니다. 그러나, 이것은 그러한 큰 이미지에 대해 매우 낮은 양의 계수처럼 보입니다. 이 점에서 저보다 지식이 많은 사람이 올바른 방향으로 나를 가리킬 수 있습니까? 어디/어떻게 jpeg 이미지에서 양자화 된 계수를 당겨합니까?

답변

0

파일을 열고 휘도, Cr 및 Cb 배열 및 두 개의 양자화 배열을 제거합니다. 그런 다음 휘도, Cr 및 Cb를 자체 변수로 양자화합니다.

im = jpeg_read(image); 
% Pull image information - Lum, Cb, Cr 
lum = im.coef_arrays{im.comp_info(1).component_id}; 
cb = im.coef_arrays{im.comp_info(2).component_id}; 
cr = im.coef_arrays{im.comp_info(3).component_id}; 
% Pull quantization arrays 
lqtable = im.quant_tables{im.comp_info(1).quant_tbl_no}; 
cqtable = im.quant_tables{im.comp_info(2).quant_tbl_no}; 
% Quantize above two sets of information 
lqcof = quantize(lum,lum_qtable); 
bqcof = quantize(cb,cho_qtable); 
rqcof = quantize(cr,cho_qtable); 
0

필요한 정보가있는 것으로 보입니다. 제공 한 데이터에서 JPEG 툴킷이 계수를 디코딩하고이를 "coef_arrays"에로드하는 것처럼 보입니다. 이미지에 수평 서브 샘플링이 있습니다. 이는 휘도의 절반 인 색 계수 배열에 의해 표시됩니다. 3 개의 배열은 (Y, Cr, Cb)를 나타냅니다. 하나는 Y 성분을위한 것이고 다른 하나는 Cr 및 Cb 성분을위한 것이기 때문에 2 개의 양자화 테이블이있다. 계수를 역 양자화하려면 quant_tables [] 배열의 올바른 요소에 각 계수를 곱해야합니다. 예를 들어, 계수 배열의 요소 [8, 10]에 quant_table의 요소 [0,2]를 곱해야합니다. 8x8 양자화 배열은 8x8 세트의 계수마다 다시 사용됩니다. 일반적으로 이것들은 지그재그 주문으로되어 있습니다 만, 툴킷이 완전한 이미지처럼 레이아웃 한 것처럼 보입니다.