Skip to content
Snippets Groups Projects
document.tex 8.19 KiB
\documentclass[a4paper,12pt]{article}

\usepackage[czech]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{hyperref}
\usepackage{enumitem}
\usepackage{mathrsfs}
\usepackage{enumitem}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{dirtytalk}
%\usepackage{titlesec}
%\newcommand{\sectionbreak}{\clearpage}
%\setlist{nosep}

\newcommand{\image}[4]{\begin{figure}[h!] \centering \includegraphics[width=#1\linewidth]{figures/#2} \label{#3} \caption{#4} \end{figure}}
\newcommand{\bThreed}{B$^3$D}

\author{Moravec Vojtěch}
\title{Semestrální projekt}
\date{2018/2019}

\begin{document}
% \maketitle
% \newpage

\section{ZISRAW (CZI) formát}

Vše co bude v této sekci uvedeno vychýzí z oficiální specifikace formátu CZI. \cite{czi_spec}.

Formát CZI je určen pro uložení obrazků, samotné schéma uložení dat ale vychází z formátu ZISRAW, který je určen pro různé typy souborů. 
Hlavním cílem formátu ZISRAW je umožnit streamování dat a metadat v binární podobě (metadata jsou buď binární nebo v XML). \textit{CZI formát je aktuálně jedinou implementací ZISRAW.}

\subsection{CZI segmenty}

CZI soubor se skládá z řetězce segmentů, každý segment je identifikován hlavičkou s identifikátorem (SID). Hlavička segmentu se skládá ze 3 polí:
\begin{itemize}
    \item \textbf{ID} - 16 B, unikátní ANSI kód s prefixem \say{ZISRAW}
    \item \textbf{AllocatedSize} - 8 B, velikost rezervována pro data segmentu (velikost je vždy násobkem 32 B)
    \item \textbf{UsedSize} - 8 B, počet bytů, kolik už je využitu daty segmentu (jestliže 0, pak celý segment je využit)
\end{itemize}

Za hlavičkou se nachází data daného segmentu. Tyto data se skládájí ze dvou částí, kde první část určuje velikost druhé části a to jaké data se v ni nacházejí. Hlavními typy dat jsou:
\begin{itemize}
    \item \textbf{Pixely} (\textit{ImageSubBlock}) - pixely obrázků a s nim přímo spjata metadata. RAW nekompresované obrázky mohou být vícedimenzionální 
    \item \textbf{Metadata} - každý segment obsahuje jedny metadata. Ty obsahují XML řetězec, odpovídající danému schématu, a binární sekcí s dalšími daty ve formátu ZIP
    \item \textbf{Přílohy} (\textit{Attachment}) - různé typy příloh
\end{itemize}

\subsection{ZISRAW kontejner}
Pořadí bytů je little-endian. Data jsou uložena v segmentech s definovanými schématy, každý segment obsahuje binární data nebo XML řetězec. 
Je povoleno uložení do jednoho nebo více souborů, ale vždy existuje jeden hlavní, \emph{master} soubor. Každý ZISRAW soubor obsahuje tyto typy segmentů:
\begin{itemize}
    \item \textbf{FileHeader}
    \item \textbf{Metadata} - nevyžadováno
    \item \textbf{SubBlockDirectory} - adresář všech SubBlock. Je vyžadován pokud existuje nějaký SubBlock
    \item \textbf{SubBlock} - každý SubBlock ve svém segmentu, může obsahovat XML metadata a binární data
    \item \textbf{AttachmentDirectory} - adresář všech Attachment, je vyžadován pokud existuje nějaký Attachment
    \item \textbf{Attachment} - každý Attachment ve svém segmentu. Příloha je identifikována svým názvem
\end{itemize}

SubBlockDirectory a AttachmentDirectory obsahují informace potřebné pro přečtení pouze potřebného segmentu, dovolují přeskočit načítání segmentů, 
které nejsou potřeba.

% \subsection{Schémata segmentů}
% V této sekci uvedeme základní informace o schématech segmentů. Jak již bylo zmíněno, každý segment začíná hlavičkou se 3 poli, Id, AllocatedSize a UsedSize. 
% Pole Id nabýva hodnoty z této enumerace SID:
% \begin{itemize}
%     \item \textbf{ZISRAWFILE} - hlavička souboru, nachází se na začátku souboru
%     \item \textbf{ZISRAWDIRECTORY} - adresář segmentů
%     \item \textbf{ZISRAWSUBBLOCK} - obsahuje data obrázků
%     \item \textbf{ZISRAWMETADATA} - obsahuje metadata
%     \item \textbf{ZISRAWATTACH} - přílohy
%     \item \textbf{ZISRAWATTDIR} - adresář příloh
%     \item \textbf{DELETED} - smazaný segment, měl by být ignorován
% \end{itemize}

\subsection{Obrazové data}
Data obrázků se nacházejí v \textbf{SubBlock} segmentech, tento segment obsahuje všechny informace o tom jak jsou data uložena a jak je interpretovat. 

V CZI formátu jsou brány v potaz různé dimenze obrázku v \\multi-dimenzionálním hyperprostoru. Jsou jimi napříklád:
pozice ve směru X, pozice ve směru Y, čas zachycení, úhel zachycení, osvětlení při zachycení atd. Pixely mohou být uloženy v těchto typech:

\begin{figure}[h!]
    \centering
    \begin{tabular}{| l | c | l |}
        \hline
        Typ                 & Byte/Pixel    & Poznámka \\\hline
        Gray8               &     1         &  8 bit unsigned            \\\hline
        Gray16              &     2         &  16 bit unsigned   \\\hline
        Gray32Float         &     4         &  32 bit IEEE float   \\\hline
        Bgr24               &     3         &  3 $\times$ 8 bit unsigned   \\\hline
        Bgr48               &     6         &  3 $\times$ 16 bit unsigned   \\\hline
        Bgr96Float          &     12        &  3 $\times$ IEEE float   \\\hline
        Bgra32              &     4         &  4 $\times$ 8 bit unsigned   \\\hline
        Gray64ComplexFloat  &     8         &  2 $\times$ IEEE float (komplexní a reálná část)   \\\hline
        Bgr192ComplexFloat  &     24        &  8 $\times$ IEEE float (komplexní a reálná část)   \\\hline
        Gray32              &     4         &  32 bit signed \textit{planovaný} \\\hline
        Gray64              &     8         &  64 bit float \textit{planovaný} \\\hline
    \end{tabular}
\end{figure}

Data pixelů v CZI souboru mohou být jak nekomprimovaná tak komprimovaná. 
Nekomprimovaná data jsou streamem pixelů podle jejich typu. Specifikace povoluje komprimaci dat pixelů pomocí LZW, 
JPEG a Jpeg-Xr.
LZW je bezztrátová komprese, aktuálně se nepoužívá ve \say{widefield} mikroskopii. JPEG komprese je ztrátová a 
může být použita pouze pro 2D obrazy. 
Jpeg-XR podporuje jak ztrátovou tak i bezztrátovou kompresi. Vychází z JPEG a nabízí menší velikost pro stejnou kvalitu obrazu, ale stejně jako JPEG, je omezen na 2D obrazy.

\section{Kompresní knihovna \bThreed}
\bThreed je Open Source knihovna, řešící problém komprese obrazů z mikroskopu. Je napsána v jazyce C++ a využívá CUDA  architektury. 
Slibovaná rychlost komprese je více než 1 GB/s \cite{Balazs164624}. Tato knihovna nabízí jak ztrátovou tak i bezztrátovou kompres, 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. Definuji takzvaný 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 ebrya octomilky obecné, metodou segmentačního překrývání. Testovalo se vzhledem k originálnímu
obrazu, a hodnota 1 znamená, že se obrazy dokonale překrývají. Na Obrázku \ref{img:segoverlap}, můžeme, že překryv klesá až při velkých komrpesních poměrech. 
Překryv pro WNL 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 sousedů 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 a pokud je použita WNL komprese
dostáváme se až na kompresní poměr 5, a 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}
% \bibliographystyle{ieeetr}

\end{document}