<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>Kalashnikov ISTU</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>The application of OpenCL to accelerate the lossless image compression algorithm based on cascading fragmentation and pixels sequence ordering</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>A. Khokhlachev</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>V. Smirnov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>A. Korobeynikov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Kalashnikov Izhevsk State Technical University</institution>
          ,
          <addr-line>Studencheskaya 7, 426069, Izhevsk</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2013</year>
      </pub-date>
      <volume>2</volume>
      <fpage>158</fpage>
      <lpage>160</lpage>
      <abstract>
        <p>The previous papers of the authors offer approach to building the ordered sequence of image pixels at lossless compression, which comprises methods of cascading fragmentation and the use of bypasses code book. For fragment sized 6*6 the code book contains 22144 various bypasses, the cost of coding to be estimated for every one of them. The search of optimal bypass is an exhaustive search type. The present paper describes ways of increasing the image lossless compression rate by using parallel computation based on OpenCL. Algorithm functions with great runtime were changed in order to transfer calculations to OpenCL using GPU/CPU. The acceleration degree for different algorithm functions gained in experiments amounted to 3..32.</p>
      </abstract>
      <kwd-group>
        <kwd>lossless image compression</kwd>
        <kwd>cascading fragmentation</kwd>
        <kwd>pixels sequence ordering</kwd>
        <kwd>optimal bypass</kwd>
        <kwd>code book</kwd>
        <kwd>computational acceleration</kwd>
        <kwd>parallel computing</kwd>
        <kwd>open computing language (OpenCL)</kwd>
        <kwd>graphics processing unit (GPU)</kwd>
        <kwd>central processing unit (CPU)</kwd>
        <kwd>Haar integral-valued wavelet transformation</kwd>
        <kwd>interchannel decorrelation</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
    </sec>
    <sec id="sec-2">
      <title>2. Basic algorithm</title>
      <p>
        The basic algorithm inherently consists in cascading fragmentation of image [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], the search of the fragment optimal bypass
(path) [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], and dynamic programming of pixels delta-code at fragment bypass [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. After encoding, the obtained data is further
compressed by Deflate algorithm using standard libraries . The compression ratio depends on the class of the image being
compressed, and on average equals 1.54 for the array of test images [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        The runtime of image compression program depends on the processed image size. Due to a number of algorithmic solutions
such as cascading fragmentation, and the use of bypasses codebook instead of calculating the possible bypasses for each image
fragment, the runtime was reduced. However, the image compression duration is still high enough [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]: 1) in group «2.1.*tiff»
101 seconds 2) in group «2.2.*tiff» - 404 seconds 3) in group «4.1.*tiff» - 24 seconds 4) in group «4.2.*tiff» - 141 seconds.
      </p>
      <p>In computational terms the most complex of the basic algorithm functions is to estimate the encoding cost for all possible
bypasses. Meanwhile, this algorithm function is suitable for parallelization, since the optimal bypass choice uses exhaustive
search of obtained cost estimates. For a fragment sized 6*6 the total bypasses number from the upper left corner is 22144.</p>
      <p>To use all multi-core CPU resources it is necessary to effectively implement paralleling of functions between all cores. The
basic program features parallel execution of optimal fragment bypass search cycle done with .Net Framework standard classes
(SSE instructions). It is possible to use a more powerful CPU, but even in this case, the speed increase will not be significant.</p>
      <p>
        In recent years the increasing number of programs with parallel data processing use GPU computing [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. This is dictated by a
growing gap in performance between CPU and GPU.
      </p>
      <p>Taking into account the above said, it was decided to move part of the compression algorithm functions to GPU. Obviously,
this will require some significant changes in the functions, but it will allow for significant decrease in the program runtime
without changing the basic algorithm.</p>
      <p>
        Currently there are several approaches to programs execution on GPU. OpenCL is an open standard [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], which can execute
programs on both CPU and GPU of different manufacturers. Therefore, in this research, to speed the algorithm, OpenCL was
chosen.
      </p>
      <p>
        At the moment there exist quite a big number of various compression algorithms in general and algorithms for images in
particular. Images compressed both as lossy and lossless are widely and effectively used. For example, lossless compression is
used in PNG files where the actual compression is implemented with Deflate algorithm [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ], which is a combination of LZ
and Huffman algorithms in its turn. There are no free turn-key programs available for lossless image compression making use
of OpenCL. WinZip is an example of the lossless compression program based on universal algorithm and using OpenCL, which
provides for performance increase of about 45% [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ].
      </p>
      <p>
        In addition to the basic algorithm, image preprocessing was implemented which was described in the authors’ previous
works: interchannel decorrelation of image color layers [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] and the transformation of pixels matrix based on integer-valued
      </p>
      <sec id="sec-2-1">
        <title>Haar wavelets [13]. These functions can be easily threaded for the implementation on OpenCL.</title>
        <sec id="sec-2-1-1">
          <title>Begin Preparation of fragments</title>
          <p>g
n
i
s
s
e
c
o
p
e
r
P</p>
        </sec>
        <sec id="sec-2-1-2">
          <title>Interchannel</title>
          <p>decorrelation of</p>
          <p>color layers
Transformation
based on
integervalued wavelet Haar
s
e
s
s
a
p
y
b
e
l
b
i
s
s
o
p
ll
a
r
o
f
t
s
o
c
g
n
i
d
o
c
n
e
f
o
n
o
i
t
a
l
u
c
l
a
C</p>
        </sec>
        <sec id="sec-2-1-3">
          <title>Possible ways to bypass of fragment</title>
        </sec>
        <sec id="sec-2-1-4">
          <title>Computing the delta-code of bypasses edges</title>
        </sec>
        <sec id="sec-2-1-5">
          <title>Calculation of</title>
          <p>encoding cost</p>
          <p>for bypass
Search the minimum
cost among the
possible bypasses
t
n
e
m
g
a
r
f
f
o
s
s
a
p
y
b
l
a
t
p
o
r
o
f
h
c
r
a
e
S
m
i</p>
        </sec>
        <sec id="sec-2-1-6">
          <title>Encoding of bypass edge with different predictors and encoders</title>
        </sec>
        <sec id="sec-2-1-7">
          <title>Choice of predictor and encoder based on dynamic programming</title>
          <p>End
s
s
a
p
y
b
f
o
g
n
i
d
o
c
n
E</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Methods of acceleration</title>
      <p>to OpenCL. Image compression algorithm is shown in Fig. 1.
3.1. Preparation of fragments</p>
      <p>
        The function receives separate color layers of an image. The function output is arrays of separate fragments of fixed size.
Pixel values of the fragment nodes beyond the image borders are virtual pixels and the values of these pixels are set as constant
(white pixels on Fig. 2). The top left pixels of each fragment on level 0 constitute the fragments on level 1 and so on, as long as
the fragments number on a level is more than one. Data structure passed to the OpenCL kernel represents the matrix of image
values, the output structure is the array of separate fragments [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
3.2. Preprocessing
3.2.1. Interchannel decorrelation of color layers
      </p>
      <p>
        This function is designed to calculate the interchannel decorrelation between the groups of color channels (layers) of the
original image and to find the best variant to group them [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>When function is started the arrays containing pixels values of all color channels of the fragment, and also the number of
channels have to be conveyed (Fig. 3). In addition, data on the possible grouping of channels is needed.</p>
      <p>
        Formula for calculating interchannel decorrelation for arbitrary channels number based on the mean and interchannel
differences is applied [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]:


(1)
Примечание [K1]: По рисунку:
preprocessing (не хватает буквы), Haar
integer-valued wavelet (порядок слов), to
bypass fragments (не нужен предлог of),
search of (предлог нужен))),
      </p>
      <p>The color channels can be independent from each other, therefore, the grouping variant with a minimum encoding costs
estimate has to be selected. It is necessary to implement the decorrelation formulas for all dependent channels groups. The
minimum channels number in the group is 2. If the image consists of 3 channels (24 bits per pixel), we get the following
grouping variants:
(   ) (  ) (  ) (  )  
 = argmin ∑
∑
∑</p>
      <p>Cost 
where decorrelation formulas are to be applied to groups of channels in parenthesis.</p>
      <p>The calculation of decorrelation is performed for all possible groups (g=1..G). The result is the index of g grouping:
where Pij – is the pixel value after the interchannel decorrelation for the grouping index g; i– channel index; j– pixel index;
n– number of channels; k– number of pixels number in the fragment.</p>
      <p>Cost is the a some estimation function of encoding costs estimate, for example, the length of the Fibonacci code which
encoding the value Pij value, or the estimated length of binary coding:
log</p>
      <sec id="sec-3-1">
        <title>The function result isoutputs an array of the size equal toof the original image. Image matrix should has to be divided into blocks of sized 2*2. Then calculated the values for a,h, v, d are to be found by the formula [13]:</title>
        <p>=x − Round</p>
        <p>a=c
h= − Round( ⁄2) + 
v= − Round( ⁄2) + 
d=c − 
+ 
be carried out as multiresolution at multiple scale, by repeating the transform on the blocks consisting of grouped values ai, each
time and reducing their size in 2 timesby half for in each coordinate every time, as long as it is possible to form 2*2 block from
ai values on a subsequent scale. Cascading transform will stop then the block ai with size 2*2 is absent.</p>
        <p>It should be noted that when with the fragment sized of 2m*2m it is possible to use preprocessing (interchannel decorrelation,
and Haar transform) after the function of dividing on the fragmentations. In this case, the Haar transformation is possible only
within the same fragment. With In this approach, the fragment encoding is completely independently of the other fragments and
therefore the decoding is possible for a single fragment.</p>
        <p>1
x
1
prerequisite for encoding and decoding., but not the edges of bypass (path).
3.3.1.2. Computing the delta-code of bypasses edges</p>
        <p>
          This function is designed to calculate the difference of values for all pairs of nodes that make up the edge on a given fragment
bypass [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]. In the course of the functionThe algorithm uses the previously prepared fragments.
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>The result is a list of arrays containing the delta-code of all edges for each fragment. It is necessaryFor each fragment you need to make compile an array of differences between the nodes values (delta-code) connecting the edge e is calculated according to thewhich is done with formula:</title>
        <p />
        <p>=  start( ) −  stop( )
wWhere xstart(e), xstop(e) areis the pixel values are connected by an edge e; start(e) and stop(e) are- nodes indeixes of edge e.
3.3.1.3. Calculation of encoding costs for bypass</p>
        <p>For each fragment, estimates the encoding costs for each of the possible bypasses are calculated. The function receives the
previously prepared fragments and details data onof all the fragment bypasses in afrom the codebook.
(5)
(6)
(7)
Примечание [K2]: Resolution не
уверена насколько здесь обосновано
применять его в значении масштаб???</p>
        <p>The result is the fragment-specific array containing estimated encoding costs for each bypass of the fragment (fFig. 5, tTable
1).</p>
        <p>Estimationg of the encoding costs of a bypass through all edges (with its all delta-codes) of bypass edges it is possible to
producecan be done in different ways. The cost of bypass fFor each fragment is needhas to findbe found the cost of the bypass:

= ∑
3.3.2. Search of the minimum among the possible bypasses
smallest estimate for each fragment is picked and saved.</p>
        <p>= argmin( )
where E is– the length of bypass (the number of edges); e - edge index; S -– the number of bypasses; s - bypass index; ∆e
delta-code of edge; zes – presence of thean edge e in bypass s; Cost – is the somean estimation function of encoding costs, it is
similar to the Cost in interchannel decorrelation function.</p>
        <p>It should be noted that the estimate of bypasses encoding costs based on the table 1 is effective from the point of view of
parallel computing. In tThis function there isrelies on parallel processing of all possible bypasses downloaded from the
codebook, for all fragments making up, forming the processed image.</p>
        <p>After the estimates of encoding costs of all paths is selectedare estimated, and the save path of each fragment bypass with the
(8)
(9)
x
x
x
1
e
4
e
3
8
e
e
1
6
7 e
11
x
x
2
e
5
e
4
9
x
8
e
e
2
7
e
12
x
x
3
e
6
e
x
9
5
10
x
x
x
1 z</p>
        <p>
          1
4
z
8
7 z
z
6
11
x
x
5
x
2 z
2
z
7
8 z
12
3
z
5
x
x
x
6
9
which employs using a more sophisticated method [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]: 1) using a set of predictors and encoders for to encode the bypass edge;
2) using dynamic programming for choice ofto choose predictors and encoders for edge in purpose to optimize (to minimize) of
the total bypass encoding costs of bypass.
        </p>
        <p>Image Processing, Geoinformation Technology and Information Security / A. Khokhlachev, V. Smirnov, A. Korobeynikov
1.1.1.3.4.1. Encoding of bypass edge with different predictors and encoders</p>
        <p>
          In the simplest most common case, the edge delta-code described above is used as the a predictor uses the edge delta-code
described above, and Fibonacci codes are used as encoders uses the Fibonacci codes [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. In this case, the applicationying of
dynamic programming to select the predictor and the encoder is not required. In a more complex cases the number of choices of
predictors and encoders variants may be more than one. For example, it is possible case with the predictors are possible not only
on the basis of not only the finite difference of the first degree, but higher degrees, and Rice codes with different bases can be
used as encoderswith the coders with use Rice codes with different bases. The use of a set of predictors and a set of encoders
increases the resulting image compression ratio, but this raises the problem of choosing the best predictor and encoder for the
current section of the bypass array.
1.1.2.3.4.2. Choice of predictor and encoder based on dynamic programming
        </p>
        <p>
          In this embodiment,This variation of compression algorithm to encode with which each bypass edge is encoded uses the most
optimal encoding parameters (predictor/encoder) based ondefined by dynamic programming [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. In start of the When function is
started, it is loaded the table of encoding cost for every encoder for values of every predictors for all pixels on edges of the
optimal bypass is downloaded and executed.
        </p>
        <p>
          In the result tThe function creates produces a data file containing information with on the size of the encoded using encoders
predictors values for edges and additional information – optimal switching of the predictors/encoders for edges of bypass
encoding [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ].
        </p>
        <p>Due to the complexity of the dynamic programming algorithm it was found possible to transfer toto run on OpenCL
managed to transfer only a small part, responsible for the coding directly to OpenCL. This part contains branching, and is
switching large sections of the algorithm takes place. These operations are an integral part of the algorithm, or changand
changinge the calculations flow in aim of parallel execution without the use of branches is not possible.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>2.4. Results and Discussion</title>
      <p>Screen formThe interface of the developed software is shown in Fig. 6. The program displays the following information: used
hardware processor deviceprocessing unit and software platform being used; the number of files to be processed; the current
processed file; the execution duration time of the compression program particular functions; the execution duration ofoverall
compression time; the compression ratio.</p>
      <p>
        To useHardware requirements for OpenCL acceleration requires the presence ofare GPU or CPU with support of OpenCL
1.2 [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. You must install tThe appropriate OpenCL support software which distributed with equipment is to be installed.
      </p>
      <p>
        To The compilatione of the developed image compression program requires the following software components [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]: 1)
DotNetZip library, for the final compression of results using thewith Deflate algorithm; 2)) to provide OpenCl bindings for C#,
use the Cloo library from OpenTk to link OpenCL to C#; 3) to compile and execute kernels on the GPU you must have the
required header files for OpenCL support in order to compile and execute kernels on the GPU. Ionic.Zip.dll library is used tTo
compress the encoding results used library Ionic.Zip.dll. In addition is usedOther requirements include a set of libraries to
support work OpenCL running, bindings these libraries to .Net Framework and the source codes of the OpenCL kernels
compiled in course of program execution.
      </p>
      <p>The basic program required about 250 MB of RAM. When algorithm wasTo adapted the algorithm for accelerating on
OpenCL was added usinglarge-volume arrays were addedof large volume and hence memory required demand increased to 900
MB.
Отформатировано:
многоуровневый + Уровень: 3 +
Стиль нумерации: 1, 2, 3, … + Начать
с: 1 + Выравнивание: слева +
Выровнять по: 0 см + Отступ: 0 см
Image Processing, Geoinformation Technology and Information Security / A. Khokhlachev, V. Smirnov, A. Korobeynikov</p>
      <p>Fig. 6. Screen formInterface of the developed software.</p>
      <p>Test batch sample of images designed is intended to assess acceleration of all core functions of modified program in
comparing withrelative to basic one. To estimate the dependence of the program speed runtime on the to images size, the batch
have the images of different sizes are sampled. To check usedFor test purposes 4 images from the standard set provided by the
Institute of signal processing and images processing were used: 4.1.06.tiff, 4.2.05.tiff, 4.2.06.tiff, 4.2.07.tiff. The color depth of
the images are is 24 bit. Image sizes are: 256*256, 512*512, 1024*1024, 2048*2048.</p>
      <p>At tTesting was performed using image compression was performed with bothas the the basic program on the CPU AMD
Phenom II X4 955 platform and a program using OpenCL. For testing OpenCL parallel processing was used different 4 different
devices were used: 1) GPU AMD Radeon HD6850; 2) GPU Nvidia GTX 960; 3) CPU AMD Phenom II X4 955; 4) CPU AMD
FX-4300. The time spent on the particular functions of the algorithm, and the total processing time for each image are given in
Table 2 and Fig. 7, where F1is - integer-valued Haar transform, F2 -– interchannel decorrelation of color layers, F3 - search of
the optimal bypass, F4 - encoding bypass using dynamic programming.</p>
      <p>When testing for eEach fragment hadwas fixed size: 6*6 pixels, and the number of bypasses: 22144 at testing.</p>
      <p>It should be noted, that when using thewith GPU Nvidia GTX 960 configuration,, according to Profiler, the load does not
exceed 60% while despite numerous sthe high number of processing devices and high work frequency. , according to Profiler
the load does not exceed 6 Compression The image of size 2048*2048 pixels size could not be compressed on the GPU AMD
Radeon HD6850 failed to produce due to the lack ofinsufficient graphics memory. In the future, to avoid this situationsuch
failures, the necessary modification of the program needs to be modified: to run the performed calculations flow should be
divided into several groups threads and processed sequentially.</p>
      <p>In the basic program were not implementedthe functions of the integer-valued Haar transform and the interchannel
decorrelation were not implemented, and therefore, testing of these functions was not carried out.</p>
      <p>Testing showed yielded approximately the same reduction in the compression total overall compression time when usingwith
both CPU and GPU application. The larger the size of the processed image, the greater the acceleration obtained as long as there
is memory available to for OpenCL.</p>
      <p>GPU showed the best resultsperformed better in the for searching of the optimal bypass task. CPU well with the function of
handles dynamic programming well, due to because of presences of a large number of branches in the function, despite the small
number of processorof processor cores.</p>
      <p>Time spent on cCalculatingons of interchannel decorrelation and integer-valued Haar transform is performed using OpenCL
for a short timeis insignificant compared to total compression time.
program /
device</p>
      <p>L
C
n
e
p
O
n
o
m
a
r
g
o
r
P</p>
      <p>AMD
Radeon
HD 6850
Nvidia
GeForce
GTX 960
AMD
FX-4300
AMD
Phenom II</p>
      <p>X4 955
Basic program /
AMD Phenom II
X4 955
size,
pixels</p>
    </sec>
    <sec id="sec-5">
      <title>3.5. Conclusion</title>
      <p>In the course of this work was modified the basic program forof lossless image compression without losseswas modified,
with the aim of increasing shortening its runtimethe speed. The pParallel processing based on OpenCL was used for program
acceleration. This solution significantly affected the processing speed, enabling making it possible to reduce computational time.
This modification will allow provide for more efficient use of the program in the future, will facilitate future further research
aimed at improving the compression ratio.</p>
      <p>The changing of optimal bypass search function allowed for to obtain the acceleration up to 32-fold acceleration on the large
images. This acceleration has been achieved because of executing OpenCL functions executed on OpenCL are almost linear,
and branching, even where they arewhen it is the case, is limited tohave only a few simple operations. Furthermore,For future
program modification theto acceleratione of this function is important for future program modification because it is makes
possible to use fragments of larger size that which was previously impossibleunattainable earlier due to too muchgreat execution
time. Among other thingsMoreover, fragments with the sized of 2k*2k will effectivelyallow applying the integer-valued Haar
transformation for the fragmentto them, and will allow to compressing every each fragment separately.</p>
      <p>Somewhat worse is the situation withAs regards dynamic programming, the prospects are not as bright during encoding
fragment bypass. Speed Performance managed to increase was gained mostly by due to ordinary conventional parallel execution
of some operations, shutdown ofcancel of operations which need onlyused solely for debugging purposes, and the use of the
packet data read operations. The part that runs on OpenCL gives the increase in performance is of only about 30% compared
with to ordinary parallel computing. On the other hand, even this result is relatively good enough, given the factprovided that
OpenCL function has rathera wide large enough branching. It should be nNoted that the bypass encoding can be performed in
various ways, for example,e.g. with Huffman algorithm or arithmetic coding.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Smirnov</surname>
            <given-names>VS</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Korobeynikov</surname>
            <given-names>AV</given-names>
          </string-name>
          .
          <article-title>Cascade Image Splitting into Fragments at Lossless Compression on Basis of Image Bypass Optimization</article-title>
          .
          <source>Bulletin of Kalashnikov ISTU</source>
          <year>2012</year>
          ;
          <volume>2</volume>
          :
          <fpage>143</fpage>
          -
          <lpage>144</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Korobeynikov</surname>
            <given-names>AV</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Smirnov</surname>
            <given-names>VS</given-names>
          </string-name>
          .
          <article-title>Optimal Bypass Definition with Code Book Application at Images Lossless Compression</article-title>
          .
          <source>Bulletin of Kalashnikov ISTU</source>
          <year>2012</year>
          ;
          <volume>3</volume>
          :
          <fpage>114</fpage>
          -
          <lpage>115</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Smirnov</surname>
            <given-names>VS</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Korobeynikov</surname>
            <given-names>AV</given-names>
          </string-name>
          .
          <article-title>Ordering the numeric sequence of image pixels at lossless compression</article-title>
          . I International Forum “Instrumentation Engineering, Electronics and Telecommunications (November,
          <fpage>25</fpage>
          -
          <lpage>27</lpage>
          ,
          <year>2015</year>
          , Izhevsk, Russian Federation),
          <year>2015</year>
          ;
          <fpage>175</fpage>
          -
          <lpage>180</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <article-title>[4] Sample images from the site of University of Southern California</article-title>
          . URL: http://sipi.usc.edu/database/database.php?volume=
          <source>misc (2017-01-10).</source>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Smirnov</surname>
            <given-names>VS</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Korobeynikov</surname>
            <given-names>AV</given-names>
          </string-name>
          .
          <article-title>The results of testing lossless compression algorithm based on cascade fragmentation method and ordering pixels sequence</article-title>
          . II International Forum “Instrumentation Engineering, Electronics and Telecommunications (November,
          <fpage>23</fpage>
          -
          <lpage>25</lpage>
          ,
          <year>2016</year>
          , Izhevsk, Russian Federation),
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Korobeynikov</surname>
            <given-names>AV.</given-names>
          </string-name>
          <article-title>The Use of Dynamic Programming and Fibonacci Codes for InterchannelDecorrelation. The Three-Channel Signals Lossless Compression</article-title>
          .
          <source>Bulletin of KIGIT</source>
          <year>2010</year>
          ;
          <volume>1</volume>
          :
          <fpage>72</fpage>
          -
          <lpage>81</lpage>
          . URL: http://elibrary.ru/item.asp?id=
          <volume>18348092</volume>
          (
          <issue>2017</issue>
          -01-10).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Denny</given-names>
            <surname>Atkin</surname>
          </string-name>
          . Computer Shopper:
          <article-title>The Right GPU for You</article-title>
          . URL: http://www.computershopper.
          <article-title>com/feature/the-right-gpu-for-you (</article-title>
          <year>2017</year>
          -01-10).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <article-title>[8] Official webpage of the standart OpenCL</article-title>
          . URL: https://www.khronos.org/opencl/ (2017-01-10).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>Portable</given-names>
            <surname>Network Graphics (PNG) Specification (Second Edition</surname>
          </string-name>
          <article-title>)</article-title>
          . URL: https://www.w3.org/TR/PNG/ (
          <year>2017</year>
          -01-10).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>PNG</given-names>
            <surname>Home</surname>
          </string-name>
          <article-title>Site</article-title>
          . URL: http://www.libpng.org/pub/png/ (2017-01-10).
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <article-title>WinZip official webpage</article-title>
          . URL: http://www.winzip.com/win/ru/index.htm (
          <issue>2017</issue>
          -01-10).
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Franchenko</surname>
            <given-names>RS</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Korobeynikov</surname>
            <given-names>AV</given-names>
          </string-name>
          .
          <article-title>InterchannelDecorrelation for Any Number of Channels at Lossless Compression of Multichannel Signals</article-title>
          .
          <source>Bulletin of Kalashnikov ISTU</source>
          <year>2010</year>
          ;
          <volume>1</volume>
          :
          <fpage>87</fpage>
          -
          <lpage>88</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>