2013-10-08 2 views
0

MATLAB을 사용하여 JPEG 압축을 구현하려고합니다. 음, 심볼의 확률 (허프만 코딩)이 계산 된 지점에서 일부 음수 값을 볼 수 있습니다. 나는 이것이 정확하지 않다라고 확신한다! !! 누군가가 도움이나 지시를 내릴 수 있다면 정말 감사 할 것입니다. 여러분 모두에게 미리 감사드립니다. MATLAB R2012b를 사용합니다. 교환JPEG 압축의 이상한 결과

clc; 
clear all; 
a = imread('test.png'); 
b = rgb2gray(a); 
b = imresize(b, [256 256]); 
b = double(b); 
final = zeros(256, 256); 

mask = [1 1 1 1 1 1 1 1 
     1 1 1 1 1 1 1 0 
     1 1 1 1 1 1 0 0 
     1 1 1 1 1 0 0 0 
     1 1 1 1 0 0 0 0 
     1 1 1 0 0 0 0 0 
     1 1 0 0 0 0 0 0 
     1 0 0 0 0 0 0 0]; 

qv1 = [ 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]; 

t = dctmtx(8); 
DCT2D = @(block_struct) t*block_struct.data*t'; 
msk = @(block_struct) mask.*block_struct.data; 

for row = 1:8:256 
    for column = 1:8:256 
     x = (b(row:row+7, column:column+7)); 
     xf = blockproc(x, [8 8], DCT2D); 
     xf1 = blockproc(xf, [8 8], msk); 
     xf1 = round(xf1./qv1).*qv1; 
     final(row:row+7, column:column+7) = xf1; 
    end 
end 

[symbols,p] = hist(final,unique(final)); 
bar(p, symbols); 
p = p/sum(p); %NEGATIVE VALUES???? 
+0

답변으로 문제가 해결 되었습니까? 아니면 도움이 되었습니까? – chappjc

답변

0

난 당신이 hist (symbolsp)의 출력을 가지고 있다고 생각 : 여기에 코드입니다. 확률은 bin 카운트에서 계산되어야하는데, 첫 번째 출력은 hist입니다.

[nelements,centers] = hist(data,xvalues)은 x 축에 각 빈 센터의 위치를 ​​나타내는 추가 행 벡터 centers을 반환합니다. 히스토그램을 플롯하려면 bar(centers,nelements)을 사용할 수 있습니다. 대신 현재 라인의 즉

,

[symbols,p] = hist(final,unique(final)); 

그냥 사용, 또한

[p,symbols] = hist(final,unique(final)); 

, final는 매트릭스가 아닌 벡터, 그래서 nelements 매트릭스 될 것입니다 :

data 인 경우 행렬을 선택하면 히스토그램이 각 열에 대해 개별적으로 생성됩니다. 각 막대 그래프 플롯은 같은 그림에 다른 색상으로 표시됩니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 그것이 더 명확하다는 것을 생각한다. 나는 계속 노력할 것이다 – anarnik

+0

응답은 여기에서 빠르다. 어쨌든 다른 문제가 발생하거나 작동하게되면 알려주십시오. 기꺼이 도와주세요. – chappjc

+0

글쎄, 만약 내가 올바르게 (코드의 결과를보고) 이해, 기호는 확률이 될 것입니다. ( 오류 심볼 입력 벡터 JPEG2에 오류 (라인 49) [딕셔너리, avglen = huffmandict 있어야 huffmandict (라인 71) 사용 : I는 심볼을 사용하려고하지만 컴파일하는 동안 이러한 에러이 발생한 기호, p); – anarnik