Skip to content
Snippets Groups Projects
Commit c60833a9 authored by Vojtěch Moravec's avatar Vojtěch Moravec
Browse files

Document update.

parent 5bb0e675
No related branches found
No related tags found
No related merge requests found
Showing
with 19725 additions and 36 deletions
...@@ -23,3 +23,5 @@ build/ ...@@ -23,3 +23,5 @@ build/
*.lzma *.lzma
czi-format/czi-parser/stream/bit_stream_demo.cpp czi-format/czi-parser/stream/bit_stream_demo.cpp
czi-format/czi-parser/stream/bs.o czi-format/czi-parser/stream/bs.o
document/histogram.tex
document/histogram.pdf
0,70.1
20,10
40,5.5
60,3.3
80,2.2
100,1.0
120,1.0
140,0.9
160,0.7
180,0.6
200,0.4
220,0.3
240,0.3
This diff is collapsed.
-195;0.026
-192;0.026
-183;0.026
-180;0.026
-178;0.026
-172;0.026
-171;0.026
-169;0.053
-168;0.026
-167;0.026
-166;0.026
-164;0.079
-163;0.026
-162;0.053
-161;0.079
-160;0.053
-159;0.079
-158;0.079
-157;0.026
-156;0.053
-155;0.105
-154;0.026
-152;0.132
-151;0.158
-150;0.211
-149;0.105
-148;0.079
-147;0.184
-146;0.132
-145;0.316
-144;0.289
-143;0.184
-142;0.132
-141;0.184
-140;0.342
-139;0.237
-138;0.316
-137;0.158
-136;0.263
-135;0.421
-134;0.368
-133;0.447
-132;0.211
-131;0.421
-130;0.553
-129;0.421
-128;0.711
-127;0.5
-126;0.605
-125;0.684
-124;0.553
-123;0.684
-122;0.974
-121;0.842
-120;1.079
-119;1.105
-118;0.842
-117;1.421
-116;1.158
-115;1.132
-114;1.421
-113;1.474
-112;1.526
-111;1.921
-110;2.079
-109;2.026
-108;1.5
-107;2.947
-106;3.158
-105;3.263
-104;3.368
-103;3.421
-102;3.447
-101;4.368
-100;4.737
-99;4.368
-98;5.368
-97;6.158
-96;5.553
-95;6.895
-94;7
-93;7.895
-92;8.263
-91;9.342
-90;9.842
-89;9.895
-88;11.684
-87;13.763
-86;14.816
-85;14.947
-84;18.026
-83;18.658
-82;19.842
-81;22.053
-80;24.711
-79;24.211
-78;27.079
-77;30.605
-76;31.526
-75;34.184
-74;36.395
-73;41.711
-72;44.211
-71;48.711
-70;52.237
-69;58.184
-68;62.368
-67;66.868
-66;72.868
-65;77.763
-64;87.105
-63;92.526
-62;100.526
-61;112.579
-60;114.895
-59;129.579
-58;140.658
-57;148.263
-56;161.842
-55;178.447
-54;192.342
-53;205.684
-52;230.474
-51;249.816
-50;267.053
-49;289.105
-48;314.316
-47;342.711
-46;379.237
-45;411.184
-44;442.684
-43;482.895
-42;518.737
-41;571.974
-40;619.263
-39;683.079
-38;739.763
-37;809.368
-36;895.737
-35;968.605
-34;1060.526
-33;1152.974
-32;1281.711
-31;1398.816
-30;1535.421
-29;1696.553
-28;1860.184
-27;2069.816
-26;2281.526
-25;2497.079
-24;2774.711
-23;3089.5
-22;3433.342
-21;3820.632
-20;4229.5
-19;4723.184
-18;5261.553
-17;5861.658
-16;6561.447
-15;7403.053
-14;8314.789
-13;9358.605
-12;10581.026
-11;12030.079
-10;13710.105
-9;15858.421
-8;18789.868
-7;23218.632
-6;30277.579
-5;41658.605
-4;59267.079
-3;83449.158
-2;111053.342
-1;134967.921
0;144986.921
1;134890.105
2;110970.132
3;83230.658
4;59153.921
5;41600.526
6;30217.658
7;23282.658
8;18875
9;15999.632
10;13846.711
11;12160.632
12;10728.632
13;9539.579
14;8493.868
15;7579.447
16;6774.974
17;6063.184
18;5432.684
19;4874.158
20;4391.368
21;3965.658
22;3572.605
23;3225.842
24;2900.684
25;2640.342
26;2385.105
27;2169.579
28;1958.5
29;1771.632
30;1596.658
31;1464.737
32;1318.211
33;1199.789
34;1087.368
35;991.553
36;901.868
37;814.789
38;743.263
39;677.895
40;612.526
41;556.737
42;508.316
43;457.763
44;415.158
45;377.053
46;341.158
47;315.579
48;286.526
49;260.789
50;236.526
51;212.158
52;189.658
53;173.895
54;155.184
55;141.974
56;130.447
57;120.289
58;106.789
59;100.026
60;87.974
61;79.237
62;71.421
63;64.895
64;56.605
65;52.289
66;47.789
67;41.316
68;39.921
69;34.105
70;32.737
71;29.579
72;25.342
73;22.579
74;21.368
75;18.684
76;18.105
77;15.263
78;13.974
79;13.105
80;11.579
81;10.737
82;9.763
83;8.421
84;8
85;7.605
86;6.711
87;6.421
88;5.789
89;4.921
90;4.658
91;4.053
92;3.868
93;3.632
94;2.842
95;2.737
96;2.632
97;2.684
98;2.421
99;2.263
100;1.763
101;1.947
102;2
103;1.763
104;1.553
105;1.211
106;1.421
107;0.921
108;1.053
109;1.026
110;0.921
111;0.737
112;1.026
113;0.632
114;0.737
115;0.605
116;0.579
117;0.447
118;0.737
119;0.368
120;0.368
121;0.316
122;0.316
123;0.421
124;0.263
125;0.289
126;0.289
127;0.211
128;0.289
129;0.184
130;0.158
131;0.289
132;0.158
133;0.211
134;0.184
135;0.079
136;0.158
137;0.026
138;0.184
139;0.184
140;0.053
141;0.158
142;0.079
143;0.053
144;0.132
145;0.105
146;0.132
147;0.132
148;0.053
149;0.079
150;0.053
151;0.079
152;0.026
153;0.026
154;0.026
157;0.026
158;0.053
159;0.026
160;0.026
161;0.026
163;0.026
167;0.026
168;0.079
169;0.026
170;0.026
175;0.026
176;0.026
179;0.026
183;0.026
186;0.026
187;0.026
188;0.026
189;0.026
193;0.026
198;0.026
201;0.026
220;0.026
This diff is collapsed.
This diff is collapsed.
...@@ -153,7 +153,7 @@ Level_6;PrevFrameDiff;ZOrderDiffToNormalOrder ...@@ -153,7 +153,7 @@ Level_6;PrevFrameDiff;ZOrderDiffToNormalOrder
16 Bit Z Stack -0.00949 16 Bit Z Stack -0.00949
----------------------------------------------- -----------------------------------------------
PrevFrameDiff_VBC;AverageBitsUsed PrevFrameDiff_VBC;AverageBitsUsed
Artemia 8.23684 Artemia 8.236840
Artemia Flash 12.36842 Artemia Flash 12.36842
LLC Emerald 12.25728 LLC Emerald 12.25728
16 Bit Z Stack 10.54386 16 Bit Z Stack 10.54386
......
SELECT width, height SELECT ROUND(AVG(bitsUsed),5) -- , MAX(bitsUsed), MIN(bitsUsed)
FROM DiffPrevFrameBenchmark FROM DiffPrevFrameBenchmark
WHERE filename = 'AxioZoom_Artemia_AT-1Ch-Z_sect.czi' limit 1 WHERE filename = '16Bit-ZStack.czi' and diffType = 'PrevFrameDiff_VBC';
/*
-- DIFFERENCE BENCHMARK -- DIFFERENCE BENCHMARK
SELECT * FROM SELECT * FROM
( (
...@@ -28,7 +29,7 @@ SELECT * FROM ...@@ -28,7 +29,7 @@ SELECT * FROM
WHERE filename = '16Bit-ZStack.czi' and diffType = 'PrevFrameDiff_VBC' and WHERE filename = '16Bit-ZStack.czi' and diffType = 'PrevFrameDiff_VBC' and
compression = 'BZIP2' AND level = 6 compression = 'BZIP2' AND level = 6
) b16; ) b16;
*/
/* /*
SELECT * FROM SELECT * FROM
......
No preview for this file type
...@@ -286,36 +286,14 @@ nejlepší metoda bzip2, která nabízí nejlepší kompresní poměry a narozd ...@@ -286,36 +286,14 @@ nejlepší metoda bzip2, která nabízí nejlepší kompresní poměry a narozd
\label{tab:compressionTable} \label{tab:compressionTable}
\end{figure} \end{figure}
\subsection{Komprese obrazů z mikroskopu, knihovna \bThreed}
Tato sekce vychází z \cite{Balazs164624}, taktéž grafy jsou přebrány z této práce.
\bThreed je Open Source knihovna, řešící problém komprese obrazů z mikroskopu. Je napsána v jazyce C++ a využívá CUDA architekturu.
Slibovaná rychlost komprese je více než 1 GB/s. Tato knihovna nabízí jak ztrátovou tak i bezztrátovou kompresi, kde ztrátová zohledňuje fakt,
že se jedná o obrazy z mikroskopu a uživatel si může zvolit maximální chybu, kterou bude tolerovat.
Autoři knihovny definuji tzv. WNL (\emph{within noise level}) mód ztrátové komprese, kde kvantizační krok je roven šumu v obraze.
V tomto módu je chyba, vzniklá ztrátovou kompresí, mnohem menší než šum nacházející se v obraze.
Kompresní poměry bezztrátové a WNL komprese můžeme vídět na Obrázku \ref{img:compressionComp}.
\image{0.65}{compressionComparsionBars.pdf}{img:compressionComp}{Porovnání kompresních poměrů různých vzorků}
Vliv ztrátové komprese na obraz byl testován na datasetu embrya octomilky obecné, metodou segmentačního překrývání. Byl testován komprimovaný obraz s originálním
obrazem, a hodnota 1 znamená, že se obrazy dokonale překrývají. V grafu na Obrázku \ref{img:segoverlap}, můžeme vidět, že překryv klesá až při velkých
kompresních poměrech. Překryv pro WNL mód je téměř dokonalý 0,996.
\image{0.65}{noise_overlap.pdf}{img:segoverlap}{Vliv ztrátové komprese na kvalitu obrazu}
Použitý bezztrátový algoritmus se skládá ze dvou částí. V první části se provede predikce hodnoty pixelu vzhledem k hodnotám jeho sousedních pixelů a v
druhé části jsou chyby predikce zakódovány pomocí RLE a Huffmana.
Bezztrátová komprese dosáhla kompresního poměru 2,7 kdežto ztrátová WNL komprese dosahuje kompresního poměru 5. Chyba lokalizace jediné molekuly v obrazu vstoupla pouze o 4\%. (Bylo testováno na datasetu získaném pomocí Single-Molecule Localization Microscopy, rozlišení 2-25 nm).
\newpage \newpage
\subsection{Mortonovo kódování} \subsection{Mortonovo kódování}
Mortonovo kódování, je způsob mapování multidimenzionálních dat na jednodimenzionální. Jedná se o přeuspořádání dat podle \emph{Z křivky}, která jimi Mortonovo kódování, je způsob mapování multidimenzionálních dat na jednodimenzionální. Jedná se o přeuspořádání dat podle \emph{Z křivky}, která jimi
prochází. \emph{Z křivka} spadá do skupiny tzv. prostor vyplňujících křívek, které obecně prochází každým bodem prostoru v $n$-dimenzionální hyperkrychli. prochází. \emph{Z křivka} spadá do skupiny tzv. prostor vyplňujících křívek, které obecně prochází každým bodem prostoru v $n$-dimenzionální hyperkrychli.
Na Obrázků \ref{fig:zCurve} můžeme vidět jak probíhá mapování 2D prostoru na 1D prostor, pro každý bod roviny je vypočtena $Z$ souřadnice, Na Obrázků \ref{fig:zCurve} můžeme vidět jak probíhá mapování 2D prostoru na 1D prostor, pro každý bod roviny je vypočtena $Z$ souřadnice,
pomocí které následně seřadíme jednotlivé body. $Z$ souřadnice je vypočtena prolnutím bitů $X$-ové a $Y$-ové souřadnice. pomocí které následně seřadíme jednotlivé body. $Z$ souřadnice je vypočtena prolnutím bitů $X$-ové a $Y$-ové souřadnice.
V našem případě pomocí $Z$ souřadnice přeuspořádáme data obrazů. V našem případě pomocí $Z$ souřadnice přeuspořádáme data obrazů. Podobný způsob přeuspořádání dat se používá pro ukládání textůr na
grafických kartách, kde toto indexování vede k optimalizaci přístupů do paměti.
\image{0.5}{ZCurve.pdf}{fig:zCurve}{Mortonovo kódování} \image{0.5}{ZCurve.pdf}{fig:zCurve}{Mortonovo kódování}
...@@ -324,23 +302,19 @@ Naměřené výsledky jsou znovu průměrem přes všechny snímky s úrovní ko ...@@ -324,23 +302,19 @@ Naměřené výsledky jsou znovu průměrem přes všechny snímky s úrovní ko
Mortonovo kódování se nejvíce vyplatilo pro metody GZIP a LZMA, kde pozorujeme nějvětší nárost v kompresním poměru. Naopak pro metodu bzip2 nemělo Mortonovo kódování se nejvíce vyplatilo pro metody GZIP a LZMA, kde pozorujeme nějvětší nárost v kompresním poměru. Naopak pro metodu bzip2 nemělo
přeuspořádání dat smysl, neboť naměřené kompresní poměry jsou o něco horší než původní. přeuspořádání dat smysl, neboť naměřené kompresní poměry jsou o něco horší než původní.
\begin{figure} \begin{figure}[h!]
\begin{tikzpicture} \begin{tikzpicture}
\begin{axis}[ \begin{axis}[
ybar, ybar,
%xlabel = {}, ylabel = {Rozdíl v kompresním poměru},
ylabel = {Procentuální změna kompresního poměru},
% axis line origin={0,100},
width=0.8\linewidth, width=0.8\linewidth,
symbolic x coords={{Artemia},{Artemia Flash}, {LLC Emerald}, {16 Bit Z Stack}}, symbolic x coords={{Artemia},{Artemia Flash}, {LLC Emerald}, {16 Bit Z Stack}},
legend pos = outer north east, legend pos = outer north east,
x tick label style={ x tick label style={
rotate=90, rotate=45,
anchor=east, anchor=east,
}, },
xtick=data, xtick=data,
% nodes near coords,
% every node near coord/.append style={rotate=90},
] ]
% gzip % gzip
\addplot coordinates { \addplot coordinates {
...@@ -370,7 +344,110 @@ přeuspořádání dat smysl, neboť naměřené kompresní poměry jsou o něco ...@@ -370,7 +344,110 @@ přeuspořádání dat smysl, neboť naměřené kompresní poměry jsou o něco
\label{fig:z_order_comp} \label{fig:z_order_comp}
\end{figure} \end{figure}
\subsection{Komprese rozdílu}
Jak již bylo dříve zmíněno, v jednom CZI souboru se nachází více snímků. Tyto snímky se většinou liší časem pořízení nebo "hloubkou řezu" tzv. Z indexem.
Z této informace můžeme usoudit, že nasledující snímek, nebude od předchozího zcela jiný, pokud oba náleží do stejného kanálu (Různé kanály v CZI souburu obsahují zcela rozdílné obrazy).
Označme si právě kódovaný snímek jako $I_i$, a snímek jemu předcházející jako $I_{i-1}$, rozdíl neboli $\Delta I$ je definována následovně:
\begin{equation*}
\Delta I = I_i - I_{i-1}
\end{equation*}
K získání snímku $I_i$ by nám tedy stačil pouze předcházející snímek a rozdíl $\Delta I$. Nejčastěji jsou obrazy z mikroskopu uloženy v 16 bitech na pixel.
$\Delta I$ může obsahovat i záporné hodnoty, a proto potřebujeme 32 bitů pro rozdíl jednoho pixelu. Toto by samo o sobě vedlo k dvojnásobné velikosti potřebné
pro uložení rozdílu. Avšak podíváme-li se frekvenci hodnot v Obrázku \ref{fig:diff_freq}, zjístíme, že by jsme mohli záporná čísla namapovat na kladná a použít
ještě méně než originálních 16 bitů.
\begin{figure}[h!]
\begin{tikzpicture}
\begin{axis}[
width=0.8\linewidth,
xlabel = {Hodnota rozdílu},
ylabel = {Frekvence hodnoty},
xmin=-500,
xmax=500,
x tick label style={rotate=45,anchor=east}
]
\addplot[const plot,fill=blue!30!white,draw=none] table [x, y, col sep=semicolon] {data/16bit_average_histo.histo};
\end{axis}
\end{tikzpicture}
\caption{Frekvece hodnot v rozdílu dvou snímků}
\label{fig:diff_freq}
\end{figure}
První typ mapování, který jsme vyzkoušeli je velmi jednodnuchý.
Všechny záporné hodnoty posuneme za maximální kladnou hodnotu a následně zjístíme počet bitů, potřebný k zakódování nejvyšší namapované hodnoty.
Aby mělo toto mapování smysl musí být počet bitů menší než 16, neboli:
\begin{equation*}
\text{MAX}(\Delta I) + \text{MIN}( \Delta I ) < (1\ll16)
\end{equation*}
\noindent samozřejmě, pokud by $\Delta I$ neobsahovala žádné záporné hodnoty $\text{MIN}( \Delta I )$ můžeme vypustit.
V grafu na Obrázku \ref{fig:bitsUsed} můžeme pozorovat průměrný počet bitů, potřebný k zakódování rozdílu mezi dvěmi snímky. Pro každý rozdíl
používáme minimální potřebný počet bitů, aby jsme se nejvíce zmenšili velikost dat. Samo o sobě touto metodou nezískáme lepší kompresní poměr, menší velikost,
snímky než pomocí kompresních metod, proto je rozdíl třeba zkomprimovat dříve zmíněnými algoritmy.
Zde ale narážíme na problém. Neboť používáme proměnná počet bitů, informace v jednom bytu může náležet dvoum hodnotám a kompresní algoritmy s tím neumí dobře poradit.
Celkově je kompresní poměr po použití kompresních algoritmů vzhledem k originální velikosti snímku horší, než kdyby jsme přímo zkomprimovali snímek.
Chce to tedy vyzkoušet jiný typ mapování.
%TODO TODO TODOTODOTODO
\begin{figure}[h!]
\begin{tikzpicture}
\begin{axis}[
width=0.8\linewidth,
height=0.55\linewidth,
xbar stacked,
enlargelimits=0.2,
xlabel={Počet bitů},
legend style={at={(0.5,-0.1)},anchor=north},
symbolic y coords={{Artemia},{Artemia Flash}, {LLC Emerald}, {16 Bit Z Stack}},
% nodes near coords,
]
\addplot coordinates {
(08.23684,{Artemia})
(12.36842,{Artemia Flash})
(12.25728,{LLC Emerald})
(10.54386,{16 Bit Z Stack})
};
\addplot coordinates {
(7.76316,{Artemia})
(3.63158,{Artemia Flash})
(3.74272,{LLC Emerald})
(5.45614,{16 Bit Z Stack})
};
\legend{{Vyžadováno},{Ušetřeno}}
\end{axis}
\end{tikzpicture}
\label{fig:bitsUsed}
\caption{Průměrný počet bitů pro mapování rozdílu}
\end{figure}
\newpage
\subsection{Komprese pomocí knihovny \bThreed}
Tato sekce vychází z \cite{Balazs164624}, taktéž grafy jsou přebrány z této práce.
\bThreed je Open Source knihovna, řešící problém komprese obrazů z mikroskopu. Je napsána v jazyce C++ a využívá CUDA architekturu.
Slibovaná rychlost komprese je více než 1 GB/s. Tato knihovna nabízí jak ztrátovou tak i bezztrátovou kompresi, kde ztrátová zohledňuje fakt,
že se jedná o obrazy z mikroskopu a uživatel si může zvolit maximální chybu, kterou bude tolerovat.
Autoři knihovny definuji tzv. WNL (\emph{within noise level}) mód ztrátové komprese, kde kvantizační krok je roven šumu v obraze.
V tomto módu je chyba, vzniklá ztrátovou kompresí, mnohem menší než šum nacházející se v obraze.
Kompresní poměry bezztrátové a WNL komprese můžeme vídět na Obrázku \ref{img:compressionComp}.
\image{0.65}{compressionComparsionBars.pdf}{img:compressionComp}{Porovnání kompresních poměrů různých vzorků}
Vliv ztrátové komprese na obraz byl testován na datasetu embrya octomilky obecné, metodou segmentačního překrývání. Byl testován komprimovaný obraz s originálním
obrazem, a hodnota 1 znamená, že se obrazy dokonale překrývají. V grafu na Obrázku \ref{img:segoverlap}, můžeme vidět, že překryv klesá až při velkých
kompresních poměrech. Překryv pro WNL mód je téměř dokonalý 0,996.
\image{0.65}{noise_overlap.pdf}{img:segoverlap}{Vliv ztrátové komprese na kvalitu obrazu}
Použitý bezztrátový algoritmus se skládá ze dvou částí. V první části se provede predikce hodnoty pixelu vzhledem k hodnotám jeho sousedních pixelů a v
druhé části jsou chyby predikce zakódovány pomocí RLE a Huffmana.
Bezztrátová komprese dosáhla kompresního poměru 2,7 kdežto ztrátová WNL komprese dosahuje kompresního poměru 5. Chyba lokalizace jediné molekuly v obrazu vstoupla pouze o 4\%. (Bylo testováno na datasetu získaném pomocí Single-Molecule Localization Microscopy, rozlišení 2-25 nm).
\bibliography{citations} \bibliography{citations}
\bibliographystyle{ieeetr} \bibliographystyle{ieeetr}
......

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.489
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HistoPreprocessor", "HistoPreprocessor\HistoPreprocessor.csproj", "{8940A196-3044-4ADD-A4E0-E527FDBCD7E2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8940A196-3044-4ADD-A4E0-E527FDBCD7E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8940A196-3044-4ADD-A4E0-E527FDBCD7E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8940A196-3044-4ADD-A4E0-E527FDBCD7E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8940A196-3044-4ADD-A4E0-E527FDBCD7E2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B725F659-F643-4997-9E38-7BF2A5DC55B7}
EndGlobalSection
EndGlobal
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment