Professional Documents
Culture Documents
Anej Sterle
IMPLEMENTACIJA ALGORITMA
ADDING-DOUBLING V PROGRAMSKEM
JEZIKU PYTHON
Zaključna naloga
Ljubljana, 2021
Zahvala
Na prvem mestu bi se rad zahvalil doc. dr. Matiji Milaniču za vso podporo, čas in
spodbudo, predvsem pa za izvrstno mentorstvo.
Prav tako gre zahvala mami, bratu, Tisi, Moniki in Alu, ki so me med študijem
podpirali in mi stali ob strani.
Hvala tudi vsem prijateljem in kolegom, ki so mi med študijem pomagali, me
spodbujali in mi ga polepšali s prijetnimi debatami.
Zahvaljujem se tudi Joštu Stergarju in Luki Roglju za vso tehnično pomoč pri
izvedbi naloge.
Za korektno lekturo se zahvaljujem Živi Kadunc.
Implementacija algoritma Adding-Doubling v programskem jeziku
Python
Izvleček
1 Uvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 Teoretično ozadje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1 Struktura kože . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Absorpcija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Lom svetlobe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Sipanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
9
5.3.1 Albedo a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3.2 Optična debelina τ . . . . . . . . . . . . . . . . . . . . . . . . 42
5.3.3 Faktor anizotropije g . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.4 Lomni količnik vzorca nS . . . . . . . . . . . . . . . . . . . . . 44
5.4 Primerjava hitrosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.4.1 Henyey-Greenstein SPF . . . . . . . . . . . . . . . . . . . . . 45
5.4.2 Gegenbauer SPF . . . . . . . . . . . . . . . . . . . . . . . . . 48
7 Zaključek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
10
Poglavje 1
Uvod
11
Poglavje 1. Uvod
12
Poglavje 2
Teoretično ozadje
13
Poglavje 2. Teoretično ozadje
2.2 Absorpcija
Ko svetloba potuje po tkivu, se del energije atenuira zaradi absorpcije. Verjetnost,
da se foton abosrbira v mediju na enoto dolžine, opišemo z absorpcijskim koeficien-
tom µa [m−1 ]. V bioloških tkivih je reprezentativna vrednosti 0.1 cm−1 . Atenuacijo
svetlobe nam opiše Beer-Lambertov zakon, ki se za medij z zgolj absorpcijo glasi
Slika 2.2: Absorpcijski spekter obeh vrst hemoglobinov, melanina in vode v območju
vidnega in IR spektra. Povzeto po [7].
Najbolj opazno razliko med dvema lahko opazimo z absorpcijskih spektrov (slika
2.2). Prva vrhova se nahajata v območju med 400 in 500 nm in sta med seboj rahlo
zamaknjena. Bolj očitno razliko opazimo v območju rumeno-zelene svetlobe med 500
in 600 nm. Tu ima oksigeniran hemoglobin dva vrhova, deoksigeniran hemoglobin
pa enega. Vidimo tudi, da absorpcija pada po vrednosti 600 nm. Voda v vidnem
14
2.3. Lom svetlobe
Slika 2.3: Lom žarkov na meji dveh snovi z različnima lomnima količnikoma. Ker je
lomni kot θ2 manjši od vpadnega kota θ1 , lahko iz lomnega zakona sklepamo, da je
n2 > n1 .
Ko svetlobni žarek prispe do meje dveh snovi, lahko pride do delnega odboja. Raz-
merje med intenziteto vpadne in odbite svetlobe označimo z odbojnostjo R, delež
svetlobe, ki vstopi v snov, pa kot prepustnost T , ki je definirana tudi kot T = 1−R. V
matematičnih modelih pogosto privzamemo, da je površina kože popolnoma gladka,
zato se lahko odbojnost izračuna po Fresnelovih enačbah (glej enačbo (3.24) v po-
glavju 3.2), kjer se predpostavi, da svetloba ni polarizirana. Polarizacija je v bio-
loških tkivih še posebej pomembna pri dvolomnih snoveh, kot so recimo kolagen,
mišična vlakna in keratin, kjer sprememba v polarizaciji pomeni tudi spremembo
15
Poglavje 2. Teoretično ozadje
2.4 Sipanje
Del atenuacije svetlobe, ko potuje skozi tkivo, pripišemo tudi sipanju. Sipanje je
proces, pri katerem svetloba interagira s snovjo (v našem primeru s tkivom) in pri
tem spremeni smer. Če obravnavamo elastično sipanje, potem se valovna dolžina po
interakciji s snovjo ne spremeni. V tkivu do sipalnih dogodkov pride na mestih, kjer
pride do fluktuacij lomnega količnika [10]. Ta območja – sipalci – so lahko večja ali
manjša od valovne dolžine svetlobe.
V primeru, ko so sipalci veliko manjši od valovne dolžine vpadne svetlobe (r ≪
λ), obravnavamo Rayleighevo sipanje, pri čemer sipalni presek pada z λ−4 . V pri-
meru, da so delci veliko večji od valovne dolžine svetlobe (r ≫ λ), preidemo v režim
Miejeve teorije sipanja. Miejevo sipanje je v primerjavi z Rayleighevim sipanjem bolj
usmerjeno naprej. Odvisnost sipalnega preseka od valovne dolžine ni trivialna in jo
dobimo z zapletenim reševanjem Maxwellovih enačb za elektromagnetno valovanje,
ki se siplje na homogenem krogelnem sipalcu. V koži pride tako do Rayleighevega
kot do Miejevega sipanja. Glavni sipalci so vlaknasti proteini – npr. kolagen in
kreatin – in celični organeli – melanosomi, celična jedra, celične stene, itd.
Ena izmed glavnih vrednosti, ki jo podajamo ob opisu sipanja, je sipalni koefici-
ent µs [m−1 ], ki podobno kot µa predstavlja verjetnost na enoto dolžine, da se foton
v mediju siplje. V bioloških medijih je reprezentativna vrednost 100 cm−1 . Atenua-
cijo vpadle svetlobe zaradi sipanja lahko podobno kot pri absorpciji za sipajoč medij
opišemo z
ki lahko zavzame vrednosti med 1 in -1 [10]. Pri tem vrednost 1 opiše naprej usmer-
jeno sipanje, vrednost 0 izotropno sipanje in vrednost -1 sipanje nazaj.
16
2.4. Sipanje
Za opis sipanja v tkivu poznamo več faznih funkcij, kot so recimo Henyey-
Greensteinova fazna funkcija (glej (3.17)), modificirana Henyey-Greensteinova fa-
zna funkcija in Delta-Eddington aproksimacija [10]. Za potrebe naše naloge smo
uporabili Henyey-Greensteinovo in Gegenbauerjevo fazno funkcijo.
Količina, ki se pogosto uporablja v literaturi, je reducirani sipalni koeficient
µ′s = µs (1 − g). Na grafu 2.4 opazimo, da je µ′s funkcija valovne dolžine, pri čemer
imamo pri krajših valovnih dolžinah večji prispevek Reyleighevega sipanja, pri dalj-
ših pa večji prispevek Miejevega sipanja. Skupni prispevek obeh nam precej dobro
aproksimira sipalni spekter kože, kjer sipalni koeficient z valovno dolžino pada.
Slika 2.4: Prikaz sipalnega spektra, kjer je z modro črto prikazano Rayleighevo
sipanje, z zeleno pa Miejevo sipanje. Z rdečo črto je prikazan sipalni spekter kože, ki
se dobro ujema s skupnim prispevkom obeh sipanj, označenim s črno črtkano črto.
Slika je povzeta po [11].
17
Poglavje 2. Teoretično ozadje
18
Poglavje 3
19
Poglavje 3. Adding-Doubling algoritem in Monte Carlo
20
3.2. Metoda Adding-Doubling
⎡ ⎤ ⎡ ⎤ ⎡ ⎤
I − (ν1 ) R(ν1′ , ν1 ) . . . R(ν1′ , νm ) I + (ν1′ )
⎢ .. ⎥ ⎢ .. .. ⎥ ⎢ .. ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ . ⎥ ⎢ = . . ×
⎥ ⎢ . ⎥. (3.5)
⎣ ⎦ ⎣ ⎦ ⎣ ⎦
I − (νm ) R(νm′ ′
, ν1 ) . . . R(νm , νm ) I + (νm′
)
21
Poglavje 3. Adding-Doubling algoritem in Monte Carlo
kjer sta kota ν1 in ν2 robna kota vpadnega toka. I − in I + imata oba enote moči
na prostorski kot. Za primer pravokotnega vpadnega žarka in polovice prostorskega
kota v primeru odbitega toka je skupna odbojnost izračunana kot [15]
∫︂ 1 ∫︂ 1 ∫︂ 1
δ(1 − ν ′ ) ′ ′ ′
Rc = R(ν , ν)2ν dν 2νdν = R(1, ν)2ν dν. (3.7)
0 0 2ν ′ 0
22
3.2. Metoda Adding-Doubling
xi − 1 ′
Pn−1 (xi ) + Pn−1 (xi ) = 0, (3.11)
n
′
pri čemer je Pn−1 (x) Legendrov polinom n − 1. stopnje, Pn−1 (x) pa prvi odvod po x
Legendrovega polinoma n − 1. stopnje. Pri tem n označuje število pretokov m2 , saj
polovico vseh pretokov določimo prvemu integralu, polovico pa drugemu. Ustrezne
kosinuse pretoka νi in uteži wi dobimo po enačbah
1 + νc 1 − νc
νi = − xi , (3.12)
2 2
1 − νc
wi = ′
.
2(1 − xi )Pn−1 (xi )2
P ± + P ±T
P± = . (3.16)
2
23
Poglavje 3. Adding-Doubling algoritem in Monte Carlo
1 1 − g2
p(ν, g) = , (3.17)
2 (1 + g 2 − 2gν) 23
1 − g2
(︃ )︃
4gB
P (νi , νj , g) = √ E0 , (3.18)
πw− w+ w+
w± = 1 + g 2 − 2g (A ± B) ,
√︂ √︂
2 2
kjer je A = νi νj in B = 1 − νi 1 − νj . E0 (x) je eliptični integral druge vrste.
Sipalno funkcijo iz enačbe (3.17) bi lahko izračunali tudi z razvojem Legendrovih
polinomov, vendar se ta metoda izkaže za počasno.
(1 − g 2 )2α 1
p(ν, g, α) = 2αg . (3.20)
(1 + g) − (1 − g) (1 + g − 2gν)1+α
2α 2α 2
24
3.2. Metoda Adding-Doubling
c = diag(w) (3.21)
1
M = diag( )
ν
a + dτ
A = M (I − P c)
2 2
a dτ
B = M P −c
2 2
G = (I + A − B(I + A)−1 B)−1
R0 = 2GB(I + A)−1
T0 = 2G − I.
25
Poglavje 3. Adding-Doubling algoritem in Monte Carlo
Slika 3.3: Shema mejne plasti dveh snovi z različnima lomnima količnikoma.
Zgornjo mejno plast dodamo našemu vzorcu, temu pripadajoče matrike odboj-
nosti in prepustnosti pa smo izračunali po enačbi (3.23) na sledeč način:
V našem modelu za spodnjo robno plast določimo več primerov. V prvem pri-
meru je spodnja plast zrcalna, zato je matrika odbojnosti RL enaka
⎡ ⎤
R0 0 . . . 0
⎢ ⎥
⎢ ⎥
⎢ 0 R0 . . . 0 ⎥
RL = ⎢ . .
⎢
.. ⎥ .
⎥ (3.29)
⎢ .. . . . ⎥
⎣ ⎦
0 0 . . . R0
26
3.2. Metoda Adding-Doubling
⎡ ⎤
νw νw ...
⎢ 1 1 2 2
⎢ ..
⎥
RL = 2R0 ⎢ . . . . ⎥. (3.30)
⎥
⎣ ⎦
ν1 w 1 νm wm
27
Poglavje 3. Adding-Doubling algoritem in Monte Carlo
28
Poglavje 4
Za osnovo nam je služil predhodno spisan algoritem dr. Milaniča v okolju Matlab.
Pri implementaciji sta nam večkrat v pomoč prišli knjižnici NumPy [21] in SciPy
[22]. Z uporabo dotičnih knjižnic smo tako prihranili ogromno časa pri pisanju ma-
tričnih operacij in posebnih funkcij. Algoritem smo implementirali v obliki razreda,
imenovanega AD1L, vsebovanega v datoteki singleCPU. S strukturiranjem v razred
smo pridobili predvsem na preglednosti in dostopnosti algoritma. Da bi lahko al-
goritem poračunal nabor vrednosti odbojnosti in prepustnosti pri različnih valovnih
dolžinah, smo algoritem strukturirali tako, da optične lastnosti lahko vnašamo v
obliki vektorjev. Pri začetni implementaciji smo se osredotočali predvsem na na-
tančnost izračunov, posledično pa smo program s kasneje opisanimi optimizacijami
pohitrili. Ker je prvotni algoritem singleCPU dokaj neoptimiziran in časovno potra-
ten, se v tem poglavju osredotočamo na optimizirano verzijo programa, imenovanega
singleGPU. Največja razlika je v tem, da lahko singleGPU izračune izvaja tako na
ustrezni grafični enoti (GPU) kot na centralni procesni enoti (CPU), medtem ko smo
s singleCPU omejeni samo na izračune na procesorju. V poglavju opišemo različne
funkcije singleGPU algoritma in razložimo ustrezne pohitritve.
Program singleGPU je namenjen uporabi na novejših Nvidia grafičnih karticah,
ki uporabljajo CUDA tehnologijo. Ker je dostopnost do računalnikov s tovrstno gra-
fično podporo omejena, smo program tvorili z možnostjo računanja tako na ustrezni
grafični kartici kot na procesorju. S tem smo odpravili potrebo po dveh različnih
algoritmih in uporabi prvotnega neoptimiziranega singleCPU programa.
Za pohitritev na GPU smo uporabili knjižnico PyTorch [23]. Ta ima namreč
podporo batched funkcij, s katerimi lahko izvedemo paralelno računanje več manjših
matrik. Za izvajanje algoritma na grafični enoti za samo inicializacijo CUDA knji-
žnice porabimo okoli 3 sekunde, kar nam sicer ne predstavlja velikega problema, saj
je inicializacijo potrebno izvesti samo enkrat. Po začetni alokaciji spomina (takrat
se izvede tudi inicializacija) imamo pri vseh naslednjih alokacijah spomina pričako-
vane časovne zakasnitve. Najprej smo se lotili optimizacije funkcij, kjer se izvaja
največ matričnih operacij. Zaradi spoznanja, da množenje matrik v skupkih zahteva
drugačno ureditev dimenzij kot prvotni algoritem, smo se lotili celostne preuredi-
tve kode. Pri tem smo skušali odpraviti potrebo po for zankah in kodo prevesti
na računanje z večjimi matrikami, na katerih so operacije s prej opisanimi knjižni-
cami bistveno bolj optimizirane. S tem se izognemo problemu upočasnitve, ki se
29
Poglavje 4. Prevod algoritma v Python okolje in optimizacija z
delovanjem na GPU
nam zgodi pri računanju majhnih matrik na grafični kartici. V algoritmu imamo
namreč največ opravka z matrikami velikosti ≈ 10, kar bi pomenilo, da bi bil čas
izvajanja matričnih operacij v primerjavi s časom prenosa podatkov med grafično
kartico in procesorjem primerljiv, kar pa bi nam kvečjemu prineslo upočasnitve. V
nadaljevanju bomo opisali posamezne dele razreda AD1L.
4.1 Konstruktor
def __init__ ( self , lam , dtype = 1 , GPU = True ) :
30
4.3. Radau in Gauss integracija
Slika 4.1: Če želimo vsaki vrstici matrike A dodati vrednosti vektorja B, ju z upo-
rabo Numpy matrik ali v našem primeru PyTorch tenzorjev preprosto seštejemo.
Opazimo lahko, da so istoležne osi enake velikost ali velikosti 1.
For zanki pri izračunu elementov matrike nuG se izognemo tako, da vektor x0,
ki predstavlja ničle Legendrovih polinomov, in vektor nuC, ki predstavlja kosinuse
31
Poglavje 4. Prevod algoritma v Python okolje in optimizacija z
delovanjem na GPU
kritičnih kotov vzorcev, prevedemo na matrike ustreznih dimenzij, na katerih izve-
demo prenašanje. S funkcijo unsqueeze(1) smo vektorju nuC dodali eno dimenzijo
in izvedli ustrezne aritmetične operacije z vektorjem x0. Podoben postopek smo
naredili pri izračunu matrike wG. Pri številu l = 100 nam ta metoda v primerjavi s
klasičnimi for zankami prinese okoli 30-kratno pohitritev, pri številu l = 10, 000 pa
kar 250-kratno pohitritev.
4.5 Odboji
Odboje računamo v metodi getBoundary, ki vsebuje različne ugnezdene metode.
Za računanje Fresnelovega odboja uporabimo metodo getRTfresnel, za računanje
odbojev na zrcalni ali Lambertovi površini pa računamo z metodama getRLambert
in getRspecular.
32
4.6. Sipalne matrike
Slika 4.2: Prikaz tvorbe končne self.RL matrike in vmesnih korakov. Najprej
zmnožimo ustrezne vektorje in matrike. Nato vrstice matrike postavimo vsako na
svojo stran. Nazadnje vsako vrstico kopiramo m-krat, da dobimo končno obliko.
33
Poglavje 4. Prevod algoritma v Python okolje in optimizacija z
delovanjem na GPU
izračun P + uporabimo vrednosti νi , νj ≥ 0, za izračun P − pa vrednosti νi ≤ 0 ∧
νj ≥ 0. Vrednosti A in B za P + shranimo v spremenljivke AP in BP, za P − pa
v spremenljivke AM in BM. Ker žal PyTorch nima funkcije za računanje eliptičnih
integralov, moramo naše matrike začasno poslati na procesor, kjer lahko uporabimo
SciPy funkcijo ellipe za izračun eliptičnega integrala. Zopet operacije izvajamo
na matrikah, da se izognemo for zankam. Na koncu matrike P + in P − ponovno
prenesemo na grafično kartico in jih normaliziramo ter simetriziramo po formulah
(3.15) in (3.16).
34
4.8. Metoda solveAD
iteracij, nam algoritem v listo shrani prazen PyTorch tenzor objekt. Listo indeksov
uporabimo pozneje v metodi doubleRTini.
35
Poglavje 4. Prevod algoritma v Python okolje in optimizacija z
delovanjem na GPU
Rn = solver . Rn
Rn = solver . Tn
Rs = solver . Rs .
36
Poglavje 5
37
Poglavje 5. Primerjave z Matlab algoritmom in Monte Carlo
Monte Carlo
Zrcalna odbojnost = 2.78 %
Odbojnost Prepustnost
µs 25 50 100 150 25 50 100 150
µa
0.1 0.26 0.36 0.48 0.54 0.42 0.31 0.2 0.14
0.5 0.09 0.15 0.24 0.31 0.18 0.11 0.05 0.03
1 0.04 0.08 0.15 0.20 0.08 0.04 0.01 0.01
Matlab Python
m=8 m = 12 m=8 m = 12
0.1 0.28 0.43 0.68 0.96 0.27 0.37 0.50 0.59 0.1 0.28 0.43 0.68 0.96 0.27 0.37 0.50 0.59
0.5 0.07 0.13 0.25 0.34 0.08 0.15 0.24 0.31 0.5 0.07 0.13 0.25 0.34 0.08 0.15 0.24 0.31
1 0.03 0.06 0.13 0.19 0.03 0.08 0.15 0.2 1 0.03 0.06 0.13 0.19 0.03 0.08 0.15 0.2
m = 16 m = 20 m = 16 m = 20
Matlab Python
m=8 m = 12 m=8 m = 12
0.1 0.59 0.5 0.47 0.55 0.45 0.34 0.23 0.17 0.1 0.59 0.5 0.47 0.55 0.45 0.34 0.23 0.17
0.5 0.28 0.17 0.1 0.07 0.2 0.11 0.05 0.03 0.5 0.28 0.17 0.1 0.07 0.2 0.11 0.05 0.03
1 0.14 0.07 0.03 0.02 0.09 0.04 0.02 0.01 1 0.14 0.07 0.03 0.02 0.09 0.04 0.02 0.01
m = 16 m = 20 m = 16 m = 20
0.1 0.42 0.32 0.2 0.14 0.42 0.31 0.2 0.14 0.1 0.42 0.32 0.2 0.14 0.42 0.31 0.2 0.14
0.5 0.18 0.11 0.05 0.03 0.18 0.11 0.05 0.03 0.5 0.18 0.11 0.05 0.03 0.18 0.11 0.05 0.03
1 0.09 0.04 0.01 0.01 0.08 0.04 0.01 0.01 1 0.09 0.04 0.01 0.01 0.08 0.04 0.01 0.01
38
5.2. Ujemanje vrednosti: Henyey-Greenstein SPF
• d = 1 cm • g = 0.8
Monte Carlo
Zrcalna odbojnost = 2.78 %
Odbojnost Prepustnost
µs 25 50 100 150 25 50 100 150
µa
0.1 0.48 0.59 0.69 0.73 0.19 0.10 0.04 0.02
0.5 0.25 0.36 0.47 0.53 0.05 0.01 2.8e-3 7.50e-4
1 0.16 0.25 0.36 0.42 0.01 2.9e-3 2.9e-4 5.0e-5
39
Poglavje 5. Primerjave z Matlab algoritmom in Monte Carlo
Matlab
m=8 m = 12 m = 20
µs 25 50 100 150 25 50 100 150 25 50 100 150
µa
0.1 0.5 0.62 0.71 0.76 0.48 0.6 0.69 0.74 0.48 0.59 0.69 0.73
0.5 0.26 0.37 0.49 0.55 0.25 0.36 0.47 0.53 0.25 0.36 0.47 0.53
1 0.16 0.26 0.37 0.44 0.16 0.25 0.36 0.43 0.16 0.25 0.36 0.42
Python
m=8 m = 12 m = 20
µs 25 50 100 150 25 50 100 150 25 50 100 150
µa
0.1 0.5 0.62 0.71 0.76 0.48 0.6 0.69 0.74 0.48 0.59 0.69 0.73
0.5 0.26 0.37 0.49 0.55 0.25 0.36 0.47 0.53 0.25 0.36 0.47 0.53
1 0.16 0.26 0.37 0.44 0.16 0.25 0.36 0.43 0.16 0.25 0.36 0.42
Matlab
m=8 m = 12 m = 20
µs 25 50 100 150 25 50 100 150 25 50 100 150
µa
0.1 0.21 0.11 0.04 0.02 0.20 0.10 0.04 0.02 0.19 0.10 0.04 0.02
0.5 0.05 0.02 3.1e-03 8.6e-04 0.05 0.01 2.8e-03 7.6e-04 0.05 0.01 2.7e-03 7.2e-04
1 0.02 3.2e-03 3.3e-04 5.8e-05 0.01 2.9e-03 2.9e-04 5.0e-05 0.01 2.8e-03 2.9e-04 4.8e-05
Python
m=8 m = 12 m = 20
µs 25 50 100 150 25 50 100 150 25 50 100 150
µa
0.1 0.21 0.11 0.04 0.02 0.20 0.10 0.04 0.02 0.19 0.10 0.04 0.02
0.5 0.05 0.02 3.1e-03 8.6e-04 0.05 0.01 2.8e-03 7.6e-04 0.05 0.01 2.7e-03 7.3e-04
1 0.02 3.2e-03 3.3e-04 5.8e-05 0.01 2.9e-03 3.0e-04 5.0e-05 0.01 2.9e-03 2.9e-04 4.9e-05
• a = 0.9 • nS = 1.4
• g = 0.8 • τ = 1.
• nE = 1
40
5.3. Optimalna vrednost m za različne vhodne parametre
5.3.1 Albedo a
µa fiksiramo na vrednost 10 cm −1 . Debelino plasti d izračunamo z vrednostjo µs ,
tako da τ fiksiramo na 1. Vhodne parametre za različne albede vnesemo v Monte
Carlo program in izračunamo odbojnosti in prepustnosti. Odstopanja od Monte
Carlo primerjamo pri različnih albedih in številu pretokov. Pri tem uvedemo rela-
tivno razliko v odbojnosti/prepustnosti kot δR = 100 RADR−R
MC
MC −TM C
in δT = 100 TADTM C
.
Pri tem RM C in TM C označujeta odbojnost in prepustnost v Monte Carlo simulaciji.
RAD in TAD označujeta odbojnost in prepustnost v Adding-Doubling algoritmu.
2.0
0.0 0.1 0.4 0.7
1.5 0.2 0.5 0.8
(%)
(%)
2.5 0.3 0.6 0.9
R
R
1.0
Relativna razlika v odbojnosti
(a) Vse vrednosti (b) Pogled od blizu. Rdeči črtkani črti naka-
zujeta relativno razliko 1%.
2.0
12 0.1
(%)
(%)
0.2 1.5
10 0.3
T
0.4 1.0
Relativna razlika v prepustnosti
0.5
8 0.6 0.5 0.1
0.7
0.0 0.2
6 0.8
0.3
0.9
0.5 0.4
4 0.5
1.0 0.6
2 0.7
1.5 0.8
0 0.9
2.0
4 6 8 10 12 14 16 18 20 4 6 8 10 12 14 16
tevilo pretokov (m) tevilo pretokov (m)
(a) Vse vrednosti (b) Pogled od blizu. Rdeči črtkani črti naka-
zujeta relativno razliko 1%.
41
Poglavje 5. Primerjave z Matlab algoritmom in Monte Carlo
(%)
(%)
R
R
5.0 1.0
0.22
7.5 0.46 0.5
1.0
10.0 2.15 0.0
4.64
12.5 10.0 0.5
21.54
15.0 46.42 1.0
100.0
1.5
4 6 8 10 12 14 16 18 20 4 6 8 10 12 14 16
tevilo pretokov (m) tevilo pretokov (m)
(a) Vse vrednosti (b) Pogled od blizu. Rdeči črtkani črti naka-
zujeta relativno razliko 1%.
0.22 2.0
400
(%)
(%)
0.46
1.0 1.5
T
T
2.15
Relativna razlika v prepustnosti
Relativna razlika v prepustnosti
(a) Vse vrednosti (b) Pogled od blizu. Rdeči črtkani črti naka-
zujeta relativno razliko 1%.
42
5.3. Optimalna vrednost m za različne vhodne parametre
5 1.5
0.55
0.6
(%)
(%)
4 1.0
0.65
R
R
0.7
3 0.5
Relativna razlika v odbojnosti
(a) Vse vrednosti (b) Pogled od blizu. Rdeči črtkani črti naka-
zujeta relativno razliko 1%.
1.50
12 0.55
(%)
(%)
0.6 1.25
10 0.65
T
0.7 1.00
Relativna razlika v prepustnosti
8 0.76
0.81 0.75 0.55
6 0.86
0.50 0.6
0.91
0.65
4 0.96
0.25 0.7
0.76
2 0.00 0.81
0.86
0 0.25 0.91
0.96
2 0.50
4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 4 6 8 10 12 14 16 18 20
tevilo pretokov (m) tevilo pretokov (m)
(a) Vse vrednosti (b) Pogled od blizu. Rdeči črtkani črti naka-
zujeta relativno razliko 1%.
43
Poglavje 5. Primerjave z Matlab algoritmom in Monte Carlo
5 1.0
(%)
Relativna razlika v odbojnosti R (%)
0.5
R
0
(a) Vse vrednosti (b) Pogled od blizu. Rdeči črtkani črti naka-
zujeta relativno razliko 1%.
1.35 1.35
10 2.0 1.4
T
1.4 1.45
Relativna razlika v prepustnosti
0 1.0
4 6 8 10 12 14 16 18 20 10 12 14 16
tevilo pretokov (m) tevilo pretokov (m)
(a) Vse vrednosti (b) Pogled od blizu. Rdeči črtkani črti naka-
zujeta relativno razliko 1%.
44
5.4. Primerjava hitrosti
Monte Carlo
Čas na vzorec(s)
µs
25 50 100 150
µa
1.5 1.5 1.7 3.1 7.3
0.5 0.8 1.5 2.6 3.4
1 0.8 1.3 2 2.6
45
Poglavje 5. Primerjave z Matlab algoritmom in Monte Carlo
S slike 5.9 lahko razberemo, da časovna zahtevnost za GPU doseže minimum okoli
N = 1000. Za razliko od računanja na GPU se čas na vzorec pri računanju na CPU
ne spreminja bistveno s številom vzorcev, kar je razvidno s slike 5.10. Računanje
na GPU nam za isti algoritem na večjem številu vzorcev prinese približno 10-kratno
pospešitev. Odločimo se testirati časovno zahtevnost za algoritme pri različnem
številu vzorcev: 100, 1000 in 3000 za pretoke 12 in 20. V tabele vnesemo čase na
vzorec za Matlab in Python algoritma.
Tabela 5.8: Vrednosti povprečnih časov na vzorec za Python algoritem za 100 klicev
funkcije pri m = 12. Vrednosti µa in µs so v (cm−1 ).
46
5.4. Primerjava hitrosti
Tabela 5.9: Vrednosti povprečnih časov na vzorec za Matlab algoritem za 100 klicev
funkcije pri m = 12. Vrednosti µa in µs so v (cm−1 ).
Tabela 5.11: Vrednosti povprečnih časov na vzorec za Matlab algoritem za 100 klicev
funkcije pri m = 20. Vrednosti µa in µs so v (cm−1 ).
47
Poglavje 5. Primerjave z Matlab algoritmom in Monte Carlo
Monte Carlo
Čas na vzorec(s)
µs
25 50 100 150
µa
1.5 1.5 1.7 3.1 7.3
0.5 0.8 1.5 2.6 3.4
1 0.8 1.3 2 2.6
48
5.4. Primerjava hitrosti
Tabela 5.14: Vrednosti povprečnih časov na vzorec za Matlab algoritem za 100 klicev
funkcije pri m = 16. Vrednosti µa in µs so v (cm−1 ).
49
Poglavje 5. Primerjave z Matlab algoritmom in Monte Carlo
50
Poglavje 6
V zadnjem delu naloge smo naš algoritem uporabili za oceno količine kisika v krvi.
Ideja je bila, da na grafe spektra odbojnosti prilagodimo modelsko funkcijo, ki jo
dobimo s pomočjo Adding-Doubling algoritma. Koža, razen v vrhnji plasti, vsebuje
krvne žile, po katerih se pretaka kri z določenim deležem oksigeniranega in deoksi-
geniranega hemoglobina. Spremembo deleža obeh vrst hemoglobina lahko zaradi
različnih absorpcijskih spektrov (glej sliko 2.2) zaznamo tudi na spektru odbojnosti.
51
Poglavje 6. Uporaba modela na meritvah
menzijo [26]. Spektralna ločljivost sistema je 0.5 nm, velikost slikovnih točk pa 0.24
mm. Integracijski čas naprave je 100 ms. Spektre odbojnosti za različne koncen-
tracije oksi- in deoksihemoglobina smo pridobili s slikanjem spodnje strani podlakti
v različnih fazah manšetnega preizkusa. Ta je potekal v treh fazah. Najprej smo
okoli nadlakti ovili manšeto, ki se uporablja za merjenje krvnega tlaka. V prvi fazi
manšeta še ni bila stisnjena, zato je bil pretok krvi normalen. V drugi fazi smo man-
šeto stisnili na 200 mmHg in počakali 2 minuti, da se je pretok krvi zaustavil, kar je
prispevalo k zmanjšanju oksigenacije krvi. V tretji fazi smo manšeto popustili in s
tem ponovno povečali pretok krvi v roko. Sliko v tretji fazi smo opravili 30 sekund
po spuščeni manšeti. Za pridobitev pravih vrednosti odbojnosti smo morali spektre
normalizirati s spektrom, pridobljenim z odbojem od spektralnega standarda s sko-
raj 100 % odbojnostjo (WS1, Labsphere Inc., North Sutton, NH, ZDA). Slike smo
normalizirali po enačbi
Slika 6.2: Vrednosti odbojnosti R za del podlakti pred manšetnim testom pri valovni
dolžini 500 nm. S številkami so označene lokacije točk, v katerih smo izbrali spektre
odbojnosti.
Sliko odbojnosti smo si pogledali pri valovni dolžini 500 nm, da smo lahko določili
točke x in y na ravnem delu podlakti, za katerega bi bilo smiselno uporabiti naš
algoritem. V vsaki točki slike imamo namreč podatek o spektru odbojnosti pri
valovnih dolžinah 400–1000 nm. Za prilagajanje smo uporabili spektre, izmerjene na
mestih, označenih na sliki 6.2. V vsakem izmed treh označenih območij smo si izbrali
10 točk. Ker je premer območja le nekaj točk, so poteki izbranih spektrov znotraj
območja praktično enaki. Vrednosti izbranih spektrov smo med seboj povprečili, da
smo spekter zgladili. Vsaki točki spektra smo določili ustrezno napako, ki smo jo
52
izračunali po enačbi za standardni odklon
⌜
⃓
⃓ 1 ∑︂N
σ= ⎷ (xi − x̄)2 , (6.2)
N i=1
Slika 6.3: Spektri odbojnosti na območju 400–1000 nm za vse faze manšetnega testa.
Na sliki 6.3 v območju 500–600 nm opazimo razliko v obliki in višini vrhov med
različnimi fazami testa. Spektra pred stiskom in po stisku sta si precej podobna.
Lokalna minimuma po stisku sta bolj izrazita zaradi večje količine krvi v tkivu. Ker
se absorpcija kože s količino krvi veča, lahko po stisku opazimo znižanje vrednosti
odbojnosti v območju 400–600 nm. Na spektru med stiskom v območju 500–600 mm
opazimo le en lokalni minimum, ki je posledica večje koncentracije deoksigenirane
krvi (glej absorpcijski spekter hemoglobina, slika 2.2).
Izmerjenemu spektru smo prilagajali enostaven optični model kože, ki predposta-
vlja eno ravno optično homogeno plast. Faktor anizotropije je v splošnem funkcija
valovne dolžine, za naše spektralno območje pa ga opišemo kar s konstanto [27]
g = 0.82. (6.3)
Lomni količnik tkiva opišemo z relacijo
n(λ) = 1.309 + 4.346 · 102 · λ−2 + 1.6065 · 109 · λ−4 − 1.2811 · 1014 · λ−6 , (6.4)
pri čemer je λ izražena v enotah nm [5]. Absorpcijski koeficient določimo kot linearno
kombinacijo prispevkov absorpcijskih koeficientov melanina µa,mel , oksigeniranega
µa, HbO2 in deoksigeniranega hemoglobina µa, Hb , obteženih z volumskimi deleži f , ki
jih kasneje iščemo. Zraven prištejemo še absorpcijo zaradi neprekrvavljenega tkiva,
ki je v približku konstanta in znaša µa, baza = 25 cm−1 [28].
µa (λ) = fmel µa,mel + fHb µa,Hb + fHbO2 µa,HbO2 + µa,baza (cm−1 ) (6.5)
Vrednosti µa, Hb in µa, HbO2 so pridobljene iz članka Friebel et al. [29]. Absorpcijski
koeficient melanina opišemo z
µa,mel (λ) = 6.6 · 1011 λ−3.33 (cm−1 ), (6.6)
53
Poglavje 6. Uporaba modela na meritvah
54
Tabela 6.2: Tabela izračunanih parametrov, njihovih asimptotskih standardnih na-
pak ter statističnih vrednosti.
Mesto: 1
Faza fHb [−] fHbO2 [−] S[%] a[cm−1 ] b[−] R2 χ2red
1. 0.009 ± 3e-4 0.019 ± 3e-4 68 ± 03 99.2 ± 0.1 0.011 ± 1.3e-3 0.9895 1.203
2. 0.0208 ± 5e-4 0.0033 ± 4e-4 14 ± 2 90.4 ± 0.64 0.175 ± 3.6e-3 0.9882 0.8792
3. 0.0046 ± 4e-4 0.0509 ± 3e-4 92 ± 2 105 ± 0.5 0.065 ± 1e-3 0.9927 1.655
Mesto: 2
Faza fHb [−] fHbO2 [−] S[%] a[cm−1 ] b[−] R2 χ2red
1. 0.004 ± 3e-4 0.018 ± 2e-4 82 ± 3 109 ± 0.4 0.13 ± 2.7e-3 0.9846 1.525
2. 0.017 ± 1.5e-4 0.0063 ± 1e-4 27 ± 1 107.5 ± 0.2 0.069 ± 0.001 0.9906 1.0922
3. 0.0034 ± 4e-4 0.0436 ± 7e-4 93 ± 2 107.8 ± 0.7 0.222 ± 6e-3 0.986 2.552
Mesto: 3
Faza fHb [−] fHbO2 [−] S[%] a[cm−1 ] b[−] R2 χ2red
1. 0.00352 ± 1.5e-5 0.0253 ± 1e-4 87 ± 1 108.0 ± 0.1 0.014 ± 9e-4 0.9881 1.4813
2. 0.0205 ± 2e-4 0.0071 ± 1e-4 26 ± 1 107± 0.1 0.122 ± 1e-3 0.9909 1.468
3. 0.0005 ± 1e-4 0.0798 ± 4e-4 99 ± 1 158 ± 0.2 0.287 ± 2e-4 0.989 3.447
55
Poglavje 6. Uporaba modela na meritvah
56
Poglavje 7
Zaključek
57
Poglavje 7. Zaključek
58
Literatura
59
Literatura
[20] How to construct an Adding/Doubling Radiative Transfer Model for thermal and
solar sources (2014), https://reef.atmos.colostate.edu/~odell/at721/
resources/RT_howto.pdf [ogled 4. 4. 2021].
60
Literatura
61