Python Primjeri2

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

Teorija informacija i kodovanje

Teorija informacija

Prof. dr. Aljo Mujčić

oktobar 2018

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
1 / 25
Entropija

# Izracunavanje entropije za zadane v j e r o v a t n o c e


# pojavljivanja simbola

import math

v j e r o v a t n o c e =[0.125 , 0.125 , 0.125 , 0.125 , 0.125 , 0.125 , 0.125 , 0.125]


H = 0
f o r px in v j e r o v a t n o c e :
H = H + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a H=” , H
vjerovatnoce =[0.1 , 0.12 , 0.18 , 0.05 , 0.02 , 0.3 , 0.01 , 0.22]
H = 0
f o r px in v j e r o v a t n o c e :
H = H + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a H=” , H
vjerovatnoce =[0.6 , 0.15 , 0.1 , 0.06 , 0.03 , 0.01 , 0.02 , 0.015 , 0.015]
H = 0
f o r px in v j e r o v a t n o c e :
H = H + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a H=” , H

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
E n t r o p i j a H= 3 . 0
E n t r o p i j a H= 2 . 5 4 1 6 4 2 8 4 0 4 1
E n t r o p i j a H= 1 . 9 4 1 2 9 9 9 3 3 4 9

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
2 / 25
Entropija binarnog izvora

import n u m p y as np
import m a t h
import m a t p l o t l i b . m l a b as m l a b
import m a t p l o t l i b . p y p l o t as p l t
p = [ i f o r i in np . l i n s p a c e (0.001 ,0.9999 ,100) ]
e nt r op i ja =[]
for vjer in p :
e n t= v j e r ∗ m a t h . l o g ( v j e r , 2 ) +(1− v j e r ) ∗ m a t h . l o g (1− v j e r , 2)
e n t=−e n t
entropija . append ( ent )
l = p l t . p l o t ( p , e n t r o p i j a , ' b− ' , l i n e w i d t h =2)
plt . x l a b e l ( ' Vjerovatnoca p ' )
p l t . y l a b e l ( ' E n t r o p i j a H( p ) ' )
plt . t i t l e ( ' Entropija binarnog izvora ' )
plt . axis ([0 , 1 , 0 , 1 . 0 1 ] )
plt . grid ( True )
plt . show ()

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
3 / 25
Entropija binarnog izvora informacija

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
4 / 25
Entropija združene vjerovatnoće

from c o l l e c t i o n s i m p o r t C o u n t e r
import m a t h
d i s t r i b u t i o n = [ [ 1 2 , 15 , 2 , 0 ] ,
[ 4 , 21 , 10 , 0 ] ,
[ 0 , 10 , 21 , 4 ] ,
[ 0 , 2 , 15 , 1 2 ] ]
p r i n t ”Dvodimenzionalna r a s p o d j e l a f r e k v e n c i j a p o j a v l j i v a n j a simbola : ”
print distribution
# HX j e e n t r o p i j a u l a z n i h v r i j e d n o s t i ( ukupne v r i j e d n o s t i po kolonama )
#O d r e d j i v a n j e f r e k v e n c i j a po kolonama
frek_kolone = [ ]
f o r col in range ( len ( d i s t r i b u t i o n [ 0 ] ) ) :
colvalues = [ row [ col ] for row in distribution ]
f r e k _ k o l o n e . a p p e n d ( sum ( c o l v a l u e s ) )
p r i n t ”Ukupna f r e k v e n c i j a po kolonama : ” , f r e k _ k o l o n e
f r e k _ r e d o v i = [ sum ( r o w ) f o r r o w i n d i s t r i b u t i o n ]
p r i n t ”Ukupna f r e k v e n c i j a po r e d o v i m a : ” , f r e k _ r e d o v i
s u m a _ f r e k = sum ( f r e k _ r e d o v i )
vjerovatnoce = [ freq / f l o a t ( suma_frek ) for freq in frek_redovi ]
HX = 0
f o r px in v j e r o v a t n o c e :
H X = H X + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a HX=” , H X
# HY j e e n t r o p i j a i z l a z n i h v r i j e d n o s t i ( ukupne v r i j e d n o s t i po r e d o v i m a )
s u m a _ f r e k _ k = sum ( f r e k _ k o l o n e )
vjerovatnoce_k = [ freq / f l o a t ( suma_frek_k ) for freq in frek_kolone ]
HY = 0
f o r px in v j e r o v a t n o c e _ k :
H Y = H Y + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a HY=” , H Y
Fakultet elektrotehnike Univerziteta u Tuzli
Teorija informacija i kodovanje
5 / 25
Entropija združene vjerovatnoće

# HXY z d r u z e n a e n t r o p i j a
frek_sve = [ ] # Inicijalizacija
for red in distribution : # Prolaz kroz redove
for kol in red : # p r o l a z kroz kolonu u redu
frek_sve . append ( kol )
s u m a _ f r e k _ s = sum ( f r e k _ s v e )
vjerovatnoce_s = [ freq / f l o a t ( suma_frek_s ) for freq in frek_sve ]
HXY = 0
for pxy in vjerovatnoce_s :
i f p x y != 0 :
HXY = HXY + pxy ∗ m a t h . log ( 1 . 0 / pxy , 2)
else :
H X Y=H X Y
p r i n t ” E n t r o p i j a HXY=” , H X Y
#Zdruzen i n f o r m a c i j a
IXY = HX + HY − HXY
print ” Z d r u z e n a i n f o r m a c i j a IXY=” , I X Y
# E n t r o p i j a suma
H s u m a=H Y − I X Y
p r i n t ”Hsuma=” , H s u m a

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
6 / 25
Entropija združene vjerovatnoće - rezultat proračuna

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Dvodimenzionalna raspodjela frekvencija pojavljivanja simbola :
[ [ 1 2 , 15 , 2 , 0 ] , [ 4 , 21 , 10 , 0 ] , [ 0 , 10 , 21 , 4 ] , [ 0 , 2 , 15 , 1 2 ] ]
Ukupna f r e k v e n c i j a po k o l o n a m a : [ 1 6 , 48 , 48 , 16]
Ukupna f r e k v e n c i j a po r e d o v i m a : [ 2 9 , 35 , 35 , 29]
E n t r o p i j a H X= 1 . 9 9 3 6 5 0 7 1 1 6 9
E n t r o p i j a H Y= 1 . 8 1 1 2 7 8 1 2 4 4 6
E n t r o p i j a H X Y= 3 . 2 9 5 6 1 1 6 2 8 5 9
Z d r u z e n a i n f o r m a c i j a I X Y= 0 . 5 0 9 3 1 7 2 0 7 5 5 7
H s u m a= 1 . 3 0 1 9 6 0 9 1 6 9

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
7 / 25
Izračunavanje Shannonove entropije za ulazni niz simbola

# I z r a c u n a v a n j e Shannonove e n t r o p i j e z a u l a z n i n i z s i m b o l a
# U prvom d i j e l u v r s i s e d e t e k c i j a s v i h s i m b o l a
# U drugom k o r a k u s e i z r a c u n a v a f r e k v e n c i j a s i m b o l a
# U p o s l j e d n j e m koraku v r s i s e proracun e n t r o p i j e
import m a t h
from s e t s i m p o r t S e t

s t = ' Samo sam Samiru r e k a o da sam r a d i samo sedam s a t i ' # u l a z n i t e k s t i l i ←-


niz simbola
# s t = ' 0 0 0 1 0 1 0 1 0 1 1 1 1 0 ' # Shannonova e n t r o p i j a u ovom s l u c a j u j e 1 b i t /←-
simbolu

print ' Ulazni niz simbola : '


print st
print
stList = l i s t ( st )
a l p h a b e t = l i s t ( Set ( s t L i s t ) ) # l i s t a simbola k o j i se p o j a v l j u j u u ulaznom ←-
tekstu
p r i n t ' S i m b o l i k o j i s e p o j a v l j u j u u ulaznom n i z u : '
print alphabet
print
# Izracunavanje f r e k v e n c i j e ulaznih simbola
freqList = [ ]
for symbol in alphabet :
ctr = 0
for sym in stList :
i f s y m == s y m b o l :
c t r += 1
freqList . append ( f l o a t ( ctr ) / len ( stList ) )

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
8 / 25
Izračunavanje Shannonove entropije za ulazni niz simbola - nastavak

print ' Vjerovatnoca p o j a v l j i v a n j a simbola : '


f o r x in range ( len ( f r e q L i s t ) ) :
p r i n t ( ”%.2 f ” % f r e q L i s t [ x ] ) ,
print
# Shannonova e n t r o p i j a
ent = 0.0
for freq in freqList :
ent = ent + freq ∗ math . log ( freq , 2)
e n t = −e n t
p r i n t ' Shannonova e n t r o p i j a : '
print ent
p r i n t ' Minimalan b r o j b i t a z a k o d o v a n j e s i m b o l a : '
print int ( math . ceil ( ent ) )

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
9 / 25
Izračunavanje Shannonove entropije za ulazni niz simbola - nastavak

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Ulazni niz simbola :
Samo sam Samiru rekao da sam radi samo sedam sati
S i m b o l i koji se p o j a v l j u j u u u l a z n o m nizu :
[ ' a ' , ' ' , ' e ' , ' d ' , ' i ' , ' k ' , 'm ' , ' s ' , ' o ' , ' S ' , ' r ' , ' u ' , ' t ' ]
Vjerovatnoca pojavljivanja simbola :
0.20 0.18 0.04 0.06 0.06 0.02 0.12 0.10 0.06 0.04 0.06 0.02 0.02
Shannonova entropija :
3.33129001862
M i n i m a l a n broj bita za k o d o v a n j e s i m b o l a :
4

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Ulazni niz simbola :
00010101011110001001000010011
S i m b o l i koji se p o j a v l j u j u u u l a z n o m nizu :
[ '1 ' , '0 ' ]
Vjerovatnoca pojavljivanja simbola :
0.41 0.59
Shannonova entropija :
0.978449329269
M i n i m a l a n broj bita za k o d o v a n j e s i m b o l a :
1

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
10 / 25
Entropija izvora informacija dobijenog sa dvije kockice

#I z r a c u n a v a n j e entropije slucajne varijable pri bacanju dvije kockice

from c o l l e c t i o n s i m p o r t C o u n t e r
import i t e r t o o l s
import m a t h
import n u m p y as np
from m a t p l o t l i b i m p o r t p y p l o t

# Kreiranje l i s t e brojeva ishoda bacanja jedne kockice


kockica = [1 , 2 , 3 , 4 , 5 , 6]
p r i n t ” B r o j e v i na k o c k i : ” , k o c k i c a

# Dobijanje svih kombinacija bacanja d v i j e kockice


# K o r i s t i se i t e r t o o l s . product k o j i daje Cartesian proizvod d v i j e l i s t e .
k o m b i n a c i j e= l i s t ( i t e r t o o l s . p r o d u c t ( k o c k i c a , k o c k i c a ) )
p r i n t ”Moguce k o m b i n a c i j e b a c a n j a d v i j e k o c k i c e ” , k o m b i n a c i j e
k o c k i c e _ s u m a = [ sum ( k o m b i n a c i j e ) f o r k o m b i n a c i j e i n k o m b i n a c i j e ]
p r i n t ”Ukupna suma b a c a n j a d v i j e k o c k i c e ” , k o c k i c e _ s u m a
# g e n e r i s a n j e mogucih i z l a z a i n j i h o v i h mogucih p o j a v l j i v a n j a
mogucnosti = Counter ( kockice_suma )
p r i n t ” P r i k a z u parovima : suma i b r o j p o j a v l j i v a n j a t e sume : ” , m o g u c n o s t i
# I z d v a j a n j e f r e k v e n c i j a i suma
frekvencije = mogucnosti . values ()
p r i n t ”Broj p o j a v l j i v a n j a datog z b i r a ” , f r e k v e n c i j e
suma_dvije_kockice = mogucnosti . keys ()
p r i n t ”Suma d a t o g z b i r a ” , s u m a _ d v i j e _ k o c k i c e
s u m a _ f r e k v e n c i j a = sum ( f r e k v e n c i j e )

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
11 / 25
Entropija izvora informacija dobijenog sa dvije kockice - nastavak

#I z r a c u n a v a n j e sume s v i h f r e k v e n c i j a
vjerovatnoce = [ freq / float ( suma_frekvencija ) for freq in frekvencije ]
print ”Vjerovatnoce : ” , v j e r o v a t n o c e
HX = 0
# Izracunavanje entropije
f o r px in v j e r o v a t n o c e :
H X = H X + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
print ”Entropija : ” , HX
p y p l o t . f i g u r e ( ”Primjer d v i j e kockice ”)
axes = pyplot . subplot (111)
width = 0.2 # s i r i n a bar p r i k a z a
# dodavanje praznog p r o s t o r a p o s l i j e
suma_dvije_kockice = [ ” ”] + suma_dvije_kockice

a x e s . bar ( range ( len ( s u m a _ d v i j e _ k o c k i c e ) ) , [0] + vjerovatnoce , w i d t h=w i d t h )

# S p a c e t h e t i c k s and s e t t h e l a b e l s t o be t h e d i c e throw t o t a l s .
axes . s e t _ x t i c k s ( np . a r a n g e ( len ( s u m a _ d v i j e _ k o c k i c e ) ) + w i d t h / 2)
axes . set_xticklabels ( suma_dvije_kockice )

# Oznake na osama i n a s l o v u
p y p l o t . t i t l e ( ” E n t r o p i j a = %s b i t s / p a i r ” % ( H X ) , f o n t s i z e =20)
p y p l o t . x l a b e l ( ”Suma d v i j e k o c k i c e ” , f o n t s i z e =20)
p y p l o t . y l a b e l ( ” V j e r o v a t n o c a ” , f o n t s i z e =20)

# Prikaz dijagrama
pyplot . show ()

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
12 / 25
Entropija izvora informacija dobijenog sa dvije kockice

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
13 / 25
Entropija izvora informacija sa kuglicama i brojevima

# Izracunavanje entropije slucaj izvlacenja kuglica


# U p o s u d i imamo 50 b i j e l i h i 150 c r v e n i h
# B i j e l i h k u g l i c a ima 10 s a brojem 1 i 40 s a broje m 2
# C r v e n i h k u g l i c a ima 100 s a bro jem 1 i 50 s a bro jem 2

import math
import numpy as np

p_boja =[50/200.0 , 150/200.0]


H_boja = 0
f o r px in p_boja :
H _ b o j a = H _ b o j a + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a H b o j a=” , H _ b o j a
p_broj =[110/200.0 , 90/200.0]
H_broj = 0
f o r px in p_broj :
H _ b r o j = H _ b r o j + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a H b r o j=” , H _ b r o j

p _ z d r u z e n a =[10/200.0 , 40/200.0 , 100/200.0 , 50/200.0]


p_zdruzena_1 =[[10/200.0 , 40/200.0] , [100/200.0 , 50/200.0]]
H_zdruzena = 0
f o r px in p _ z d r u z e n a :
H _ z d r u z e n a = H _ z d r u z e n a + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a H z d r u z e n a=” , H _ z d r u z e n a

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
14 / 25
Entropija izvora informacija sa kuglicama i brojevima

H_uslovna = 0
f o r i in l i s t ( range ( len ( p _ z d r u z e n a _ 1 ) ) ) :
f o r j in l i s t ( range ( len ( p _ z d r u z e n a _ 1 ) ) ) :
H _ u s l o v n a = H _ u s l o v n a + p _ z d r u z e n a _ 1 [ j ] [ i ] ∗ m a t h . l o g ( p _ b o j a [ j ] ←-
/ p _ z d r u z e n a _ 1 [ j ] [ i ] , 2)
p r i n t ” E n t r o p i j a H u s l o v n a b r o j I b o j a=” , H _ u s l o v n a
H_uslovna_2 = 0
f o r i in l i s t ( range ( len ( p _ z d r u z e n a _ 1 ) ) ) :
f o r j in l i s t ( range ( len ( p _ z d r u z e n a _ 1 ) ) ) :
H _ u s l o v n a _ 2 = H _ u s l o v n a _ 2 + p _ z d r u z e n a _ 1 [ i ] [ j ] ∗ m a t h . l o g ( p _ b r o j [ j ] ←-
/ p _ z d r u z e n a _ 1 [ i ] [ j ] , 2)
p r i n t ” E n t r o p i j a H u s l o v n a b r o j I b o j a=” , H _ u s l o v n a _ 2

print ”Entropija H b o j a=H z d r u z e n a−H u s l o v n a=” , H _ z d r u z e n a −H _ u s l o v n a


print ”Entropija H b r o j=H z d r u z e n a−H u s l o v n a 2=” , H _ z d r u z e n a −H _ u s l o v n a _ 2

Entropija H _ b o j a= 0 . 8 1 1 2 7 8 1 2 4 4 5 9
Entropija H _ b r o j= 0 . 9 9 2 7 7 4 4 5 3 9 8 8
Entropija H _ z d r u z e n a= 1 . 6 8 0 4 8 2 0 2 3 7 2
Entropija H _ u s l o v n a b r o j I b o j a= 0 . 8 6 9 2 0 3 8 9 9 2 6 3
Entropija H _ u s l o v n a b r o j I b o j a= 0 . 6 8 7 7 0 7 5 6 9 7 3 4
Entropija H _ b o j a=H _ z d r u z e n a −H _ u s l o v n a= 0 . 8 1 1 2 7 8 1 2 4 4 5 9
Entropija H _ b r o j=H _ z d r u z e n a −H _ u s l o v n a _ 2= 0 . 9 9 2 7 7 4 4 5 3 9 8 8

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
15 / 25
Entropija izvora informacija teksta iz knjige

from c o l l e c t i o n s i m p o r t C o u n t e r
from c o d e c s i m p o r t open
import m a t h

t e k s t = open ( ” d e r v i s . t x t ” , e n c o d i n g= ' u t f −8 ' ) . r e a d ( )#. l o w e r ( )


slova_frek = Counter ( tekst )

print slova_frek

# Izdvajanje frekvencija i slova


frekvencije = slova_frek . values ()
slova = slova_frek . keys ()

b r o j _ s l o v a=l e n ( f r e k v e n c i j e )

p r i n t ”Broj r a z l i c i t i h karaktera j e : ” , b r o j _ s l o v a
s u m a _ f r e k v e n c i j e = sum ( f r e k v e n c i j e )
p r i n t ”Ukupan b r o j s l o v a j e : ” , s u m a _ f r e k v e n c i j e

vjerovatnoce = [ frek / float ( suma_frekvencije ) for frek in frekvencije ]

H = 0
for pxy in vjerovatnoce :
i f p x y != 0 :
H = H + pxy ∗ m a t h . log ( 1 . 0 / pxy , 2)
else :
H=H
p r i n t ” E n t r o p i j a H= ” , H

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
16 / 25
Entropija izvora informacija teksta iz knjige - nastavak

C o u n t e r ( { u ' ' : 4 8 9 4 3 , u ' a ' : 2 5 1 3 6 , u ' o ' : 2 1 9 0 9 , u ' i ' : 2 0 4 4 8 , u ' e ' : 2 0 2 2 3 , u ' ←-
n ' : 1 2 8 9 8 , u ' j ' : 1 1 4 3 6 , u ' s ' : 1 0 8 6 5 , u 'm ' : 1 0 1 9 9 , u ' u ' : 9 1 5 0 , u ' t ' : ←-
8 6 1 9 , u ' r ' : 8 2 5 8 , u ' d ' : 7 9 6 0 , u ' l ' : 6 8 0 6 , u ' v ' : 6 7 9 8 , u ' k ' : 6 1 5 3 , u ' , ' : ←-
5 9 6 3 , u ' p ' : 4 4 6 7 , u ' g ' : 3 9 7 1 , u ' b ' : 3 7 1 1 , u ' z ' : 3 7 0 6 , u ' \ u0161 ' : 3 3 1 0 , u←-
' . ' : 2 7 5 7 , u ' \ u010d ' : 2 3 0 3 , u ' \ u0107 ' : 1 7 7 4 , u ' \ u 0 1 7 e ' : 1 6 6 2 , u ' h ' : ←-
1 3 0 1 , u ' \n ' : 1 1 4 9 , u ' c ' : 7 6 3 , u '− ' : 7 0 5 , u ' \ u0111 ' : 4 8 3 , u 'N ' : 4 4 8 , u ' ? ' ←-
: 3 6 8 , u 'A ' : 3 3 6 , u ' I ' : 2 7 2 , u ' S ' : 2 6 1 , u 'O ' : 2 0 4 , u 'P ' : 2 0 0 , u 'M' : 1 9 5 , ←-
u ' Z ' : 1 8 9 , u ' : ' : 1 7 5 , u 'K ' : 1 7 1 , u 'D ' : 1 6 3 , u 'T ' : 1 5 4 , u 'U ' : 1 4 4 , u 'B ' : ←-
1 3 7 , u 'H ' : 1 2 7 , u ' J ' : 1 2 3 , u ' f ' : 1 1 6 , u 'G ' : 7 1 , u 'R ' : 6 6 , u ' ! ' : 6 1 , u ' \←-
u 0 1 0 c ' : 5 8 , u 'V ' : 5 5 , u ' \ u0160 ' : 5 5 , u ' ; ' : 3 5 , u ' L ' : 3 3 , u ' ) ' : 2 6 , u ' ( ' : ←-
2 6 , u ' \ u017d ' : 2 3 , u 'E ' : 1 9 , u ' \ u0142 ' : 1 0 , u 'C ' : 7 , u ' F ' : 7 , u ' \ u02d9 ' ←-
: 7 , u ' \ u2028 ' : 4 , u ' ” ' : 2 , u ' 1 ' : 1 , u ' 3 ' : 1 , u ' 2 ' : 1 , u ' 5 ' : 1 , u ' 7 ' : 1 , ←-
u ' 6 ' : 1 , u ' 4 ' : 1})
Broj r a z l i c i t i h k a r a k t e r a je : 74
Ukupan broj slova je : 278181
E n t r o p i j a H= 4 . 3 9 9 1 3 4 2 3 8 8 1

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
17 / 25
Prikaz slova iz našeg pisma - nastavak

Prikaz slova iz našeg jezika a koje su kodovane sa UTF-8


u’u0106’ - Ć u’u0107’ -ć
u’u010d’ -č u’u010c’ -Č
u’u0111” -đ u’ u0110” -Ð
u’u0161’ -š u’ u0160’ -Š
u’u017d’ -Ž u’u017e’ -ž

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
18 / 25
Entropija izvora informacija piksela sa slike

from P I L i m p o r t I m a g e
import n u m p y as np
import m a t h

Image . Image . tostring = Image . Image . tobytes

s l i k a = I m a g e . open ( ” s l i k a g r a y . j p g ” )

# U c i t a v a n j e s l i k e kao i t e r a b l e list
pikseli = slika . getdata ()

# postavljanje nultih vrijednosti frekvencija pojavljivanja


f r e k v e n c i j e = [ 0 ] ∗ 256

# Odredjivanje frekvencija pojavljivanja pojedinih vrijednosti


# k o j e moze p o p r i m i t i p i k s e l na s l i c i od 0 do 256
for piksel in pikseli :
f r e k v e n c i j e [ p i k s e l ] += 1

s u m a _ f r e k _ s = sum ( f r e k v e n c i j e ) #Ukupna suma

# O d r e d j i v a n j e v j e r o v a t n o c a na b a z i f r e k v e n c i j a pojavljivanja
vjerovatnoce_s = [ freq / float ( suma_frek_s ) for freq in frekvencije ]
HXY = 0
for pxy in vjerovatnoce_s :
i f p x y != 0 :
HXY = HXY + pxy ∗ m a t h . log ( 1 . 0 / pxy , 2)
else :
H X Y=H X Y
Fakultet elektrotehnike Univerziteta u Tuzli
Teorija informacija i kodovanje
19 / 25
Entropija izvora informacija piksela sa slike - nastavak

p y p l o t . f i g u r e ( ”Primjer s l i k e sa slucajnim pikselima ”)


p y p l o t . s u b p l o t (2 , 1 , 1)
p y p l o t . i m s h o w ( s l i k a , c m a p=” g r a y ” )

p y p l o t . s u b p l o t (2 , 1 , 2)
# k r e i r a n j e v e k t o r a s a 256 g r e y −l e v e l v r i j e d n o s t i
x = range (256)
pyplot . plot (x , frekvencije )
p y p l o t . t i t l e ( ” E n t r o p i j a = %s b i t s / p i k s e l u ” % ( H X Y ) , f o n t s i z e =12)
p y p l o t . x l a b e l ( ”Grey−l e v e l ” )
p y p l o t . y l a b e l ( ”Frequency ”)

pyplot . xlim ([0 , len ( frekvencije ) ] )


pyplot . show ()

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
20 / 25
Entropija izvora informacija piksela sa slike

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
21 / 25
Entropija izvora informacija piksela sa slike

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
22 / 25
Entropija izvora informacija piksela sa slike

import m a t p l o t l i b . p y p l o t as pyplot
from P I L i m p o r t I m a g e
import n u m p y as np
import m a t h

Image . Image . tostring = Image . Image . tobytes

#g e n e r i s i a n j e d v o d o m e n z i o n a l n e m a t r i c e 300 x 300 s l u c a j n i h v r i j e d n o s t i od 0 ←-
do 256
s l i k a _ n i z = ( np . r a n d o m . r a n d (300 , 300) ∗256) . a s t y p e ( np . u i n t 8 )

s l i k a = I m a g e . f r o m a r r a y ( s l i k a _ n i z ) #g e n e r i s a n j e slike

frek_sve = [ ] # Inicijalizacija
for red in slika_niz : # Prolaz kroz redove
for kol in red : # p r o l a z kroz kolonu u redu
frek_sve . append ( kol )

# postavljanje nultih vrijednosti frekvencija pojavljivanja


f r e k v e n c i j e = [ 0 ] ∗ 256

# Odredjivanje frekvencija pojavljivanja pojedinih vrijednosti


# k o j e moze p o p r i m i t i p i k s e l na s l i c i od 0 do 256
for piksel in frek_sve :
f r e k v e n c i j e [ p i k s e l ] += 1

s u m a _ f r e k _ s = sum ( f r e k v e n c i j e ) #Ukupna suma


Fakultet elektrotehnike Univerziteta u Tuzli
Teorija informacija i kodovanje
23 / 25
Entropija izvora informacija piksela sa slike - nastavak

# O d r e d j i v a n j e v j e r o v a t n o c a na b a z i f r e k v e n c i j a pojavljivanja
vjerovatnoce_s = [ freq / float ( suma_frek_s ) for freq in frekvencije ]
HXY = 0
for pxy in vjerovatnoce_s :
i f p x y != 0 :
HXY = HXY + pxy ∗ m a t h . log ( 1 . 0 / pxy , 2)
else :
H X Y=H X Y

p y p l o t . f i g u r e ( ”Primjer s l i k e sa slucajnim pikselima ”)


p y p l o t . s u b p l o t (2 , 1 , 1)
p y p l o t . i m s h o w ( s l i k a , c m a p=” g r a y ” )

p y p l o t . s u b p l o t (2 , 1 , 2)
# make v e c t o r o f 256 g r e y −l e v e l v a l u e s
x = range (256)
pyplot . plot (x , frekvencije )
p y p l o t . t i t l e ( ” E n t r o p i j a = %s b i t s / p i k s e l u ” % ( H X Y ) , f o n t s i z e =12)
p y p l o t . x l a b e l ( ”Grey−l e v e l ” )
p y p l o t . y l a b e l ( ”Frequency ”)

# T r u n c a t e x a x i s a t max v a l u e of greyscale
pyplot . xlim ([0 , len ( frekvencije ) ] )
pyplot . show ()

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
24 / 25
Entropija izvora informacija dobijeni slučajno generisanim pikselima
na slici

Fakultet elektrotehnike Univerziteta u Tuzli


Teorija informacija i kodovanje
25 / 25

You might also like