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_) |