[Matlab]매트랩으로 그림&사진의 앤트로피 구하기
학교에서 셰넌에 대해 배우다가 혼자서 열심히 짜 본 매트랩 코드
흑백영상(그레이스케일)을 불러와서 그것의 정보량, 앤트로피를 구하는 코드이다.
흑백 영상이 아니라면 rgb2gray를 이용해 변환해서 시작
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | A = imread('gray1.png'); B = imread('gray2.png'); W = zeros(255,1); % 각 비트의 개수 X = zeros(255,1); % 각 비트에서 확률 Pn Y = zeros(255,1); % 정보량 In Z = zeros(255,1); % Pn * In X_ = zeros(255,1); % 각 비트에서 확률 Pn Y_ = zeros(255,1); % 정보량 In Z_ = zeros(255,1); % Pn * In a = A(:); % 각 비트를 벡터로 만든다 b = B(:); a_ = size(a); % 총 몇 비트가 있는지 본다 b_ = size(b); for i=0:1:254 c = find(a == i); % a벡터에서 원소 0의 개수를 찾는다 c2 = size(c); % 찾은 원소 개수 W(i+1) = c2(1,1); % 그 개수를 저장한다 c3 = find(b == i); c4 = size(c3); W_(i+1) = c4(1,1); end for j=1:1:255 X(j) = W(j)/a_(1,1); % 0,1,2,3...254가 각각 나타날 확률을 구해줌 X_(j) = W_(j)/b_(1,1); end for k=1:1:255 Y(k) = log2(X(k)\1); % 정보량을 구함 if Y(k) == Inf % 무한대값이 나오면 계산이 안되므로 예외처리함 Y(k) = 0; end Y_(k) = log2(X_(k)\1); if Y_(k) == Inf Y_(k) = 0; end end for l=1:1:255 Z(l) = X(l).*Y(l); % 앤트로피 구함 Z_(l) = X_(l).*Y_(l); end z = ['Gray1의 엔트로피는 ', num2str(sum(Z)), ' 입니다.']; z_ = ['Gray2의 엔트로피는 ', num2str(sum(Z_)), ' 입니다.']; disp(z) disp(z_) |
'각종 팁' 카테고리의 다른 글
토렌트 프로그램 광고창 없애기 (1) | 2014.11.04 |
---|