\@writefile{lof}{\contentsline{figure}{\numberline{1}{\ignorespaces The other 4 pixels are used to find the value of the 5th.\relax}}{1}{figure.caption.1}\protected@file@percent }
\@writefile{lof}{\contentsline{figure}{\numberline{1}{\ignorespaces The other 4 pixels are used to find the value of the 5th.\relax}}{1}{figure.caption.1}\protected@file@percent }
\@writefile{toc}{\contentsline{subsection}{\numberline{2.3}A Method to Save Some of the Interpolated Errors}{2}{subsection.2.3}\protected@file@percent }
\@writefile{toc}{\contentsline{subsection}{\numberline{2.3}A Method to Save Some of the Interpolated Errors}{2}{subsection.2.3}\protected@file@percent }
% The method described in this paper is a simple method that has intended use with thermal images.
This algorithm operates by scanning through each pixel in a raster pattern, using already scanned pixels to decompress the next pixel's value.
This algorithm operates by scanning through each pixel in a raster pattern, using already scanned pixels to decompress the next pixel's value.
By saving the encoded error between the predicted pixel value and the actual value, we were able to losslessly get the compressed images to be less than 41\% of their original size.
By saving the error between the predicted pixel value and the actual value, we were able to losslessly compress thermal images to be less than 41\% of their original size.
This resulted in files that are approximately 34\% smaller than their equivalent PNGs, and 35\% smaller than the LZW compression method with TIFF.
The resulting files were approximately 34\% smaller than their equivalent PNGs, and 35\% smaller than LZW compression with TIFF files.
\end{abstract}
\end{abstract}
\section{Introduction}
\section{Introduction}
\subsection{Technical Overview}
The idea is based off of how images are scanned in originally.
The idea is based off of how images are scanned in originally.
Like a cathode-ray tube in a television, the algorithm goes line by line, reading/writing each pixel individually in a raster pattern.
Like a cathode-ray tube in a television, the algorithm goes line by line, reading/writing each pixel individually in a raster pattern.
Each pixel, as long as it is not on the top or side boundaries, will have 4 neighbors that have already been read into the machine.
Each pixel, as long as it is not on the top or side boundaries, will have 4 neighbors that have already been read into the machine.
Those points can be interpolated and used to predict the next pixel's value.
Those points can be analyzed and interpolated to find the next pixel's value.
The goal is to encode the error between that value and the original value, save that, and use that to compress and decompress the image.
The goal is to encode the error between that value and the original value, save that, and use that to compress and decompress the image.
Even though a possibly larger integer may need to be stored, it's more likely that the guess will be correct, or off by a small margin, making the distribution less uniform and better for compression.
Even though a possibly larger integer may need to be stored, it's more likely that the guess will be correct, or off by a small margin, making the distribution and better for compression.
\caption{\label{fig:pixels}The other 4 pixels are used to find the value of the 5th.}
\caption{\label{fig:pixels}The other 4 pixels are used to find the value of the 5th.}
\end{figure}
\end{figure}
\subsection{Background}
The images that were used in the development of this paper are all thermal images, with values ranging from 19,197 to 25,935.
Total possible values can range from 0 to 32,768.
Everything detailed here can still apply to standard grayscale or RGB images, but for testing, only 16 bit thermal images were used.
Most images had ranges of at most 4,096 between the smallest and the largest pixel values.
The camera being used has 16 forward facing thermal sensors creating 16 similar thermal images every frame.
\section{Related Work}
\section{Related Work}
\subsection{PNG}
\subsection{PNG}
PNG is a compression lossless algorithm that operates using a single pass like ours \cite{PNGoverview}.
PNG is a lossless compression algorithm that also operates using a single pass system\cite{PNGoverview}.
The image is separated into several blocks of arbitrary size, which are then compressed using a combination of LZ77 and Huffman encoding \cite{PNGdetails}.
The image is separated into several blocks of arbitrary size, which are then compressed using a combination of LZ77 and Huffman encoding \cite{PNGdetails}.
LZ77 operates by finding patterns in the data and creating pointers to the original instance of that pattern.
LZ77 operates by finding patterns in the data and creating pointers to the original instance of that pattern.
For example, if there are two identical blocks of just the color blue, the second one only has to make reference to the first.
For example, if there are two identical blocks of just the color blue, the second one only has to make reference to the first.
Instead of saving two full blocks, the second one just contains the location of the first, telling the decoder to use that block.
Instead of saving two full blocks, the second one just contains the location of the first, telling the decoder to use that block.
Huffman encoding is then used to save these numbers, optimizing how the location data is stored.
Huffman encoding is then used to save these numbers, optimizing how the location data is stored.
If one pattern is more frequent, the algorithm should optimize over this, producing an even smaller file\cite{PNGdetails}.
If one pattern is more frequent, the algorithm should optimize over this, producing an even smaller file\cite{PNGdetails}.
The Huffman encoding portion is what separates LZ77 from ``deflate'', the algorithm summarized here, and the same one used in PNG.
The Huffman encoding portion is what separates LZ77 from ``deflate'', the algorithm summarized here, and the one used in PNG.
Our algorithm has a similar use of Huffman encoding, but a completely different algorithm than LZ77.
Our algorithm has a similar use of Huffman encoding, but a completely different algorithm than LZ77.
LZ77 seeks patterns between blocks while ours has no block structure and no explicit pattern functionality.
LZ77 seeks patterns between blocks while ours has no block structure and no explicit pattern functionality.
...
@@ -155,15 +163,6 @@ This could potentially have an advantage by using more points in the process, bu
...
@@ -155,15 +163,6 @@ This could potentially have an advantage by using more points in the process, bu
It also has a binning system based off of the mean square prediction error, but which bin it goes into can shift over the classification process adding to the complexity of the algorithm.
It also has a binning system based off of the mean square prediction error, but which bin it goes into can shift over the classification process adding to the complexity of the algorithm.
The use of more points could be implemented into ours too, although it would not help the temporal complexity.
The use of more points could be implemented into ours too, although it would not help the temporal complexity.
\section{Background}
The images that were used in the backing of this paper are all thermal images, with the values from the sensors ranging from 19197 to 25935.
Total possible values can range from 0 to 32768.
Most images had ranges of at most 4,096 between the smallest and the largest pixel values.
The original purpose was for the development of an algorithm that works in raster format that can be used to load the images individually.
This algorithm has support for 16 bit images, as well as 8 bits with some slight modification.
For other uses of this algorithm, such as being used on multiple channel color images, only slight modifications would be necessary.
The camera being used has 16 forward facing thermal sensors creating 16 similar thermal images every frame.
\section{The Approach}
\section{The Approach}
To begin, the border values are encoded into the system.
To begin, the border values are encoded into the system.
There are not many values here and the algorithm needs a place to start.
There are not many values here and the algorithm needs a place to start.