[Matlab]매트랩으로 그림&사진의 앤트로피 구하기

Posted by 유니브
2014. 10. 22. 19:01 각종 팁

학교에서 셰넌에 대해 배우다가 혼자서 열심히 짜 본 매트랩 코드
흑백영상(그레이스케일)을 불러와서 그것의 정보량, 앤트로피를 구하는 코드이다.
흑백 영상이 아니라면 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
= imread('gray1.png');
= imread('gray2.png');
 
= zeros(255,1); % 각 비트의 개수 
= zeros(255,1); % 각 비트에서 확률 Pn
= zeros(255,1); % 정보량 In
= zeros(255,1); % Pn * In
 
X_ = zeros(255,1); % 각 비트에서 확률 Pn
Y_ = zeros(255,1); % 정보량 In
Z_ = zeros(255,1); % Pn * In
 
= A(:); % 각 비트를 벡터로 만든다
= 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
= ['Gray1의 엔트로피는 ', num2str(sum(Z)), ' 입니다.'];
z_ = ['Gray2의 엔트로피는 ', num2str(sum(Z_)), ' 입니다.'];
 
disp(z) 
disp(z_)



'각종 팁' 카테고리의 다른 글

토렌트 프로그램 광고창 없애기  (1) 2014.11.04