<!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 />
    <article-meta>
      <title-group>
        <article-title>Разработка мобильного приложения для коррекции динамических искажений на изображениях</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>V.A. Fursov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>E.F. Fatkhutdinova</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Image Processing Systems Institute of RAS - branch of the FSRC "Crystallography and Photonics" RAS</institution>
          ,
          <addr-line>Samara</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Samara National Research University named after academician S.</institution>
          <addr-line>P. Korolev</addr-line>
        </aff>
      </contrib-group>
      <fpage>468</fpage>
      <lpage>479</lpage>
      <kwd-group>
        <kwd>Ключевые слова</kwd>
        <kwd>обработка изображений</kwd>
        <kwd>мобильное приложение</kwd>
        <kwd>КИХфильтр</kwd>
        <kwd>искажения</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>the framework of the proposed filter model, a mobile application has been created that
implements two tuning schemes: identification of the filter parameters from the
reference image and adjustment without a reference. Besides, it is possible to vary the
frequency response parameter characterizing the mid-range interval, which provides
additional possibilities for adjusting the quality of the recovery. An example of
processing test images is given.
1. Введение
Статистические данные последних лет показывают, что объем трафика
мобильных устройств в сети интернет быстро растет. Мобильное приложение —
это программа, работающая на планшетных ПК и смартфонах. Число владельцев
смартфонов по всему миру с каждым днём растет. Музыка, работа с
фотографиями, социальные сети – самые популярные типы приложений среди
владельцев смартфонов [1]. Одна из наиболее популярных функций мобильных
устройств – регистрация изображений. Массовое использование этой функции
связано с возможностью оперативной регистрации изображений в неожиданных
и уникальных ситуациях. При этом часто приходится сталкиваться с проблемами
размытия изображения вследствие расфокусировки и/или смаза (при быстром
перемещении регистрируемого объекта относительно камеры). Искажения типа
смаза и расфокусировки обычно называют динамическими. Задача коррекции
динамических искажений на изображениях, регистрируемых мобильными
устройствами, с помощью реализованных непосредственно в самом мобильном
устройстве алгоритмов цифровой обработки изображений является крайне
актуальной.</p>
      <p>Известными классическими подходами к построению фильтров для
обработки изображений являются инверсная и винеровская фильтрации. При
построении инверсного фильтра часто приходится сталкиваться с тем, что
обратный оператор не существует или соответствующая передаточная функция
имеет полюса, близкие к нулю [2]. При этом на восстановленном изображении
происходит подчеркивание шумов. В винеровском фильтре эта проблема
преодолевается за счет учета в передаточной функции фильтра частотных
характеристик шума [3]. Однако на практике эти характеристики часто
отсутствуют, при этом синтез оптимального винеровского фильтра становится
серьезной проблемой. К сожалению, другие известные методы построения
фильтров, в той или иной форме, также сталкиваются с указанными проблемами
[2], [3]. Поэтому часто фильтры для коррекции динамических искажений
строятся путем параметрической идентификации в классе фильтров с конечной
импульсной характеристикой (КИХ-фильтры). В работе [4] была рассмотрена
такая технология, основанная на использовании параметрической модели
частотного отклика в виде отрезков квадратичной и экспоненциальной функций.
В указанной работе были рассмотрены два варианта технологии: идентификация
параметров импульсного отклика по прецедентам и настройка фильтра по
косвенным признакам без эталонного изображения.</p>
      <p>В работе [5] модель частотного отклика из отрезков квадратичной и
экспоненциальной функций была обобщена, в частности, расширена область
средних частот за счет введения интервала постоянства частотного отклика. На
модельных примерах было показано, что эта модификация повышает качество
восстановления изображений по сравнению с предыдущей реализацией
квадратично-экспоненциального КИХ-фильтра. Однако реализация фильтра с
расширенной областью частотного отклика требует, хотя и незначительного,
увеличения вычислительных ресурсов. В настоящей работе приводятся
результаты работ по разработке мобильного приложения, реализующего оба
указанные выше варианта.</p>
      <p>
        Работа построена следующим образом. В разделе 1 приводится описание
методов и алгоритмов настройки фильтра, как по эталонному изображению, так
и при отсутствии эталона. В разделе 2 описываются используемые для
построения мобильного приложения библиотеки, псевдокод и интерфейс
пользователя. В разделе 3 приводятся примеры обработки тестовых изображений
в мобильном устройстве. Сведения, изложенные во введении и в первой части
раздела 2 могут представлять интерес для специалистов в области цифровой
обработки изображений. Что касается разработки мобильного приложения,
достаточно использовать материалы, приведенные в тексте, начиная с формулы
(
        <xref ref-type="bibr" rid="ref3">3</xref>
        ), приняв эту формулу на веру.
      </p>
      <p>2. Метод и алгоритмы
Строится КИХ-фильтр с радиально симметричным вещественным
частотным откликом [2, 3] с опорной областью D в виде  ×  - квадрата с
центром в точке k1 = 0, k2 = 0. В предположении, что центральный отсчет
импульсного отклика h(0,0) опорной области D находится в точке  1,  2, отсчеты
восстановленного изображения  ( 1,  2) [2] можно представить в виде:
 −1  −1
 ( 1,  2) = ∑ 2</p>
      <p>1=− 2−1 ∑ 22=− 2−1 ℎ[ ( 1,  2)] ( 1 −  1,  2 −  2),
где  ( 1,  2) =  12 +  22, а ℎ[ ( 1,  2)] – отсчеты одномерной импульсной
характеристики, определенные на множестве окружностей с радиусами  =
 ( 1,  2),  1,  2 ∈  .</p>
      <p>Используется функция одномерного частотного отклика для всех значений
0 ≤  &lt; ∞ в виде трех последовательных отрезков: параболы константы и
экспоненты:</p>
      <p>2, при 0 ≤  &lt;  1,
 ( ) =  =</p>
      <p>
        =   12, при  1 ≤  ≤  2,
 − , при  ≥  2,
(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )
(
        <xref ref-type="bibr" rid="ref2">2</xref>
        )
 −  1 sin  1 sin  1 +
 cos   1 −  sin   1
      </p>
      <p>2 +  2
Соответствующий этой спектральной характеристике импульсный отклик,
силу
свойства
радиальной
симметрии,
получаем
как
функцию
пространственного параметра r обратным преобразованием Фурье:

1
= Re
ω1
0
2 cos  1 −
 2 1
2s3in  121 +
ω2
ω1</p>
      <p>sin   1 − sin  1
αω2    +
     +  −cω   
 ( 2) =   12 =  −  2.
Фильтр,</p>
      <p>соответствующий
описанному
частотному</p>
      <p>отклику,
далее будем называть обобщенным
квадратично
фильтром
Exponential)
фильтром.</p>
      <p>экспоненциальным
(Generalized
или
График
кратко</p>
      <p>Square</p>
      <p>GSEуказанной
функции приведен на рис. 1.
Рис. 1. Типичный график спектра</p>
      <p>
        GSE-фильтра
(мы исключили  и  2, выполнив с учетом (
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) замену  =  −  2
 2 =   1).
импульсным откликом квадратично-экспоненциального фильтра, который мы
Легко убедиться, что при
      </p>
      <p>
        = 1 импульсный оклик (
        <xref ref-type="bibr" rid="ref3">3</xref>
        ) совпадает с
рассматривали в предыдущей работе [4]. В настоящей работе мы построим
мобильное приложение, в котором пользователь сможет сам задавать этот
параметр (или диапазон изменения этого параметра) с учетом субъективных
требований к качеству восстановления и доступных вычислительных ресурсов.
      </p>
      <p>
        Отсчеты двумерного импульсного отклика также как в [5] определяются
путем
дискретизации
непрерывной
функции
(
        <xref ref-type="bibr" rid="ref3">3</xref>
        ) для
всех
направлений,
соответствующих всем отсчетам опорной области. При этом для каждого отсчета
(точки  1,  2) опорной области в соотношении (
        <xref ref-type="bibr" rid="ref3">3</xref>
        ) аргумент  =  ( 1,  2) =
 1 +  22. Поскольку при r = 0 в (
        <xref ref-type="bibr" rid="ref3">3</xref>
        ) имеет место неопределенность, значение
2
центрального отсчета вычисляется как сумма всех отсчетов за исключением
центрального:
ℎ(0,0) = ∑ ℎ( 1,  2), ∀ 1,  2 ∈  ,  1,  2 ≠ 0.
(
        <xref ref-type="bibr" rid="ref4">4</xref>
        )
Затем осуществляется нормировка всех отсчетов в опорной области так,
чтобы
выполнялось
требование
сохранения
среднего
уровня
яркости
обработанного изображения:
1. Задание начальных оценок параметров  1,  ̂,  и критерия   ( 1,  ̂,  )
2. Вычисление отсчетов импульсного отклика для всех точек опорной
всех отсчетов, удовлетворяющая (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ).
      </p>
      <p>
        области  ( 1,  2) с использованием соотношений (
        <xref ref-type="bibr" rid="ref3">3</xref>
        ), (
        <xref ref-type="bibr" rid="ref4">4</xref>
        ) и нормировка
3. Обработка искаженного изображения и вычисление критерия качества
некоторому
правилу
формируется
новый
вариант
оценок
и
осуществляется
переход к
шагу
2. Если
все оценки из области
допустимых значений «просмотрены» – выход.
(
        <xref ref-type="bibr" rid="ref5">5</xref>
        )
(
        <xref ref-type="bibr" rid="ref6">6</xref>
        )
(
        <xref ref-type="bibr" rid="ref7">7</xref>
        )
∑ ℎ( 1,  2) = 1, ∀ 1,  2 ∈  .
Алгоритм
настройки
фильтра
строится
в
виде
следующей
последовательности шагов:
   (  ,  ̂ ,   ) &lt;
      </p>
      <p>(  −1,  ̂ −1,   −1),
 (  ,  ̂ ,   ) &gt;  (  −1,  ̂ −1,   −1),
   (  ,  ̂ ,   ) &gt;  
доп.
По описанной технологии можно осуществлять настройку параметров
фильтра как по эталонному изображению, так и без эталона. При настройке по
эталону
в
качестве</p>
      <p>критерия
изображения к эталону используется показатель:
  ( 1,  ̂,  )
близости
восстановленного
   = 10 log10 

2</p>
      <p>,
где MAX – максимальное значение, принимаемое пикселем изображения, а MSE
–
среднеквадратическая
ошибка
(СКО),
характеризующая
близость
восстановленного изображения к эталонному.</p>
      <p>
        В технологии настройки фильтра без эталона вычисляется СКО между
восстановленным и исходным искаженным изображениями. При этом в отличие
от настройки по эталону, улучшение качества восстановленного изображения
сопровождается уменьшением показателя PSNR (
        <xref ref-type="bibr" rid="ref6">6</xref>
        ). Поскольку при уменьшении
значения PSNR качество полученного изображения может быть как выше, так и
ниже,
используется
дополнительное
условие:
увеличение
дисперсии
обработанного изображения. Это требование обеспечивает увеличение среднего
контраста, которое обычно наблюдается при увеличении резкости изображения.
Кроме того, вводится ограничение на минимально допустимое значение PSNR,
поскольку
при его
      </p>
      <p>малых значениях возможны значительные искажения,
характеризующиеся высоким контрастом.</p>
      <p>
        Таким
образом, проверка
выполнения на k-ой
итерации
условия
проверке выполнения следующих условий:
  ( 1,  ̂,  ) &gt;   −1( 1,  ̂,  ) на шаге 4 описанной технологии сводится к
Здесь    (  ,  ̂ ,   ) значение показателя (
        <xref ref-type="bibr" rid="ref6">6</xref>
        ), вычисленное на k-ой
итерации для изображения, восстановленного фильтром с параметрами   ,  ̂ ,  
при сравнении с эталонным (при настройке по эталону) или исходным
искаженным (при настройке без эталона);  (  ,  ̂ ,   ) – дисперсия
восстановленного изображения, а    доп – минимально допустимое значение
показателя (
        <xref ref-type="bibr" rid="ref6">6</xref>
        ).
      </p>
      <p>3. Реализация мобильного приложения
Разработка любого мобильного приложения по обработке изображений
делится на 2 части: разработка фильтра и разработка основной части. Для первой
части – реализации алгоритма обработки изображений – использовалась
библиотека OpenCV, специальная версия для платформы Android. OpenCV – это
кроссплатформенная библиотека с открытым исходным кодом, является
свободной для использования в коммерческих и академических целях. OpenCV
содержит алгоритмы интерпретации изображений, устранения оптических
искажений, определения сходства, анализа перемещения объекта, определения
формы объекта и многое другое, написана на C/C++ и использует
параллельность и многоядерность для выполняемых задач.</p>
      <p>Для использования библиотеки OpenCV на платформе Android существует
также готовый набор Android NDK – инструментарий, позволяющий
реализовывать части приложения для Android на таких компилируемых языках
программирования, как C и C++ и содержит библиотеки для управления
активностями и доступа к различным физическим компонентам устройства.
Android NDK интегрирован с инструментами из набора компонентов для
разработки программного обеспечения (Android SDK), а также с
интегрированной средой разработки Android Studio.</p>
      <p>Таким образом, существуют 2 способа использования библиотеки OpenCV
на платформе Android:
1. OpenCV Java API + Android SDK: функциональность пишется на языке</p>
      <p>Java.
2. OpenCV native interface + Android NDK: функциональность пишется на
языке С++.
Мы будем использовать первый способ.
Основные используемые модули библиотеки:
• модуль Core – содержит основные операции, в том числе
арифметические;
• модуль Imgproc – отвечает за обработку изображений;
• модуль Utils – содержит вспомогательные методы, например,
конвертацию изображения формата Bitmap в формат Mat OpenCV и
назад, загрузка Mat из ресурса по идентификатору ресурса.</p>
      <p>Так как мы работаем с ограниченным объемом памяти, целесообразно
загружать в память изображение с меньшим разрешением. Версия с
уменьшенным
разрешением</p>
      <p>должна соответствовать размеру компонента
пользовательского
интерфейса, который
его
отображает.</p>
      <p>Изображение с
высоким разрешением занимает большое количество памяти и не обеспечивает
видимого
преимущества
при
отображении.</p>
      <p>Выбор
варианта
может
осуществляться пользователем с учетом характеристик конкретного мобильного
устройства. На рисунке 2 приведен
псевдокод программы, реализующий
описанный
в разделе 2 алгоритм,
написанный с учетом особенностей
программирования на мобильных устройствах.</p>
      <p>для w ∈ (w_in, w_end)/с ∈ (с_in, с_end)/α ∈ (α_in, α_end) с шагом step_w/step_c/step_
начало
α выполнить
начало функция1
для i ∈ (1, N) с шагом 1 выполнить
для j ∈ (1, N) с шагом 1 выполнить
 =
 − 2
 +1 2
+  −</p>
      <p>2 cos  1 − 2s3in  121 +
sin   1 −sin  1

+  cos   1 − sin   1</p>
      <p>2+ 2
конец
конец
конец
конец
начало функция2
для i ∈ (1, N) с шагом 1 выполнить
для j ∈ (1, N) с шагом 1 выполнить</p>
      <p>( ,  ) =  ( ,  ) +   −
конец
конец
конец
ввод: минимальное значение PSNR
новое значение PSNR = psnr(XR, X, 1)</p>
      <p>2+1 +  ,  −  2+1 +  ℎ( ,  )
если вычисленное значение PSNR &lt; предыдущего значения PSNR и
дисперсия
обработанного
изображения(XR)
&gt;
дисперсия
искаженного
изображения (X) то
запоминаем значение параметров w/с/α
запоминаем значение PSNR
конец
конец
вызываем функция1 и функция2 с новыми параметрами w, с, α
вывод: обработанное изображение.</p>
      <p>Рис. 2. Псевдокод программы
Для работы с растровыми изображениями используется тип Bitmap,
который позволяет сохранить отзывчивость пользовательского интерфейса и
уменьшить объем памяти. Далее для обработки изображений тип Bitmap
конвертируется в тип Mat. Mat – класс для хранения изображений, который
может интерпретироваться языком С++.</p>
      <p>С помощью класса BitmapFactory можно узнать разрешение и тип
графических данных до создания объекта Bitmap и до выделения памяти на этот
объект. При получении информации о разрешении и размере изображения может
быть принято решение о загрузке в память полноразмерной версии картинки или
ее уменьшенной версии. Перечислим некоторые факторы, которые нужно
учитывать.</p>
      <p>1. Расчетное потребление памяти при загрузке полной версии.
2. Количество памяти, которое возможно потратить на изображение,
учитывая общее потребление памяти приложением.
3. Разрешение компонента, который будет отображать загруженные
данные.
4. Размер и плотность точек экрана на текущем устройстве.</p>
      <p>Методы класса BitmapFactory не должны исполняться в главном потоке
пользовательского интерфейса, чтобы не снижать производительность системы.
Нельзя предугадать, сколько времени уйдет на загрузку данных и их обработку,
это зависит от различных факторов (скорость чтения с диска, размер
изображения, мощность процессора, и т.д). Если такая задача заблокирует
главный поток пользовательского интерфейса, то система отметит приложение
как зависшее, и пользователь может выйти из него или даже удалить.</p>
      <p>Если требуется совершать операции, занимающие некоторое время, их
обязательно нужно выполнять в отдельных потоках, называемых «фоновыми»
или «рабочими» потоками. Для реализации этой задачи используется
класс AsyncTask, который предлагает простой и удобный механизм для
перемещения трудоёмких операций в фоновый поток.</p>
      <p>Методы класса AsyncTask позволяют выполнять асинхронную работу в
пользовательском интерфейсе. Они могут выполнять операции загрузки
небольших изображений, файловые операции, операции с базой данных и т.д. в
рабочем потоке, а затем публикуют результаты в главном потоке
пользовательского интерфейса без необходимости самостоятельно обрабатывать
потоки и/или обработчики.</p>
      <p>На рисунке 3 представлен макет приложения, сконструированный с
помощью онлайн-инструмента для прототипирования приложений
marvelapp.com.
Рис. 3. Макет приложения
увидеть результат. Обработанное изображение сохраняется в специальную
папку приложения, доступную через встроенное приложение «галерея».</p>
      <p>Чтобы поменять параметры фильтра для достижения лучших результатов
при обработке, пользователь может перейти в раздел «настройки» главного меню
приложения.</p>
      <p>Чтобы получить информацию о приложении, пользователю нужно перейти
в раздел «о программе».</p>
      <p>Диаграмма основных классов приложения, реализующих описанную
функциональность, представлена на рис. 4.</p>
      <p>Рис. 4. Диаграмма классов
На рис. 5 представлена подробная схема работы приложения.</p>
      <p>Рис. 5. Схема работы приложения
4. Результаты экспериментов
На рис. 4 представлен результат работы фильтра с настроенными
параметрами  , с и a. На рис. 6(а) приведен пример искаженного полутонового
изображения с помощью моделирования фильтра Гаусса нижних частот со
степенью размытия: σ = 3. На рис. 6(б) приведено восстановленное изображение
с помощью фильтра, настроенного без эталонного изображения, при
размерности опорной области, равной 7×7. Результат, достигнутый при
восстановлении: PSNR = 25,13.</p>
      <p>Для количественной оценки достижимого качества восстановления мы
использовали тестовые изображения (неискаженное и искаженное). Подчеркнем,
что для настройки фильтра и восстановления исходное неискаженное
изображение не использовалось. Мы осуществляли «слепую» настройку.
Рис. 6. Изображения «Лена»: (а) – искаженное с размытием σ = 3,
(б) – обработанное
Данный алгоритм восстановления изображения без использования
эталонного также может применяться и для восстановления цветных
изображений. При этом обработка осуществляется по тем же алгоритмам для
каждого компонента.</p>
      <p>5. Заключение
Реализован метод коррекции динамических искажений, основанный на
«слепой» идентификации параметров восстанавливающего фильтра, не
требующей задания эталонного изображения. Разработана программа на
платформе Android, предназначенная для обработки изображений в мобильных
устройствах. Приведен пример обработки тестового изображения, полученного
путем моделирования фильтра Гаусса нижних частот. Результат, достигнутый
при восстановлении изображения со степенью размытия: σ = 3 по критерию
PSNR = 25,13. Полученные результаты могут заинтересовать пользователей
планшетов и смартфонов. Дальнейшие планы авторов – отработка
разработанного приложения с целью сделать его доступным широкому кругу
пользователей.</p>
      <p>Работа выполнена при поддержке Министерства образования и науки РФ
и Российского фонда фундаментальных исследований, проекты № 17-29-03112,
№ 16-07-00729-а.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Mail</surname>
          </string-name>
          .Ru Group.
          <source>Мобильный Интернет в России</source>
          . - URL: https://corp.mail.ru/media/files/40314-researchmobilemail.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Soifer</surname>
            <given-names>V.A.</given-names>
          </string-name>
          et al. Computer Image Processing,
          <string-name>
            <surname>Part</surname>
            <given-names>II</given-names>
          </string-name>
          :
          <article-title>Methods and algorithms</article-title>
          . - VDM Verlag,
          <year>2010</year>
          . - 584 p.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Прэтт</surname>
            <given-names>У</given-names>
          </string-name>
          .
          <article-title>Цифровая обработка изображений</article-title>
          .
          <source>Кн</source>
          .
          <volume>2</volume>
          . / Пер. с англ. М.:
          <string-name>
            <surname>Мир</surname>
          </string-name>
          , -
          <year>1982</year>
          . -
          <fpage>480</fpage>
          c.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <article-title>4 Фурсов В</article-title>
          .А.,
          <string-name>
            <surname>Якимов</surname>
            <given-names>П</given-names>
          </string-name>
          .Ю.
          <article-title>Интернет-технология коррекции динамических искажений на изображениях в мобильных устройствах // Научный сервис в сети Интернет: труды XIX Всероссийской научной конференции (18-23 сентября 2017 г</article-title>
          .,
          <source>г. Новороссийск)</source>
          .
          <article-title>- М.: ИПМ им</article-title>
          .
          <source>М.В.Келдыша</source>
          ,
          <year>2017</year>
          . -
          <fpage>С</fpage>
          .
          <fpage>436</fpage>
          -
          <lpage>445</lpage>
          . - doi:10.20948/abrau-2017-09 .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Фурсов</surname>
          </string-name>
          , В.А.
          <article-title>Построение квадратично-экспоненциальных КИХ-фильтров с расширенной средней областью частотного отклика / В</article-title>
          .А. Фурсов // Компьютерная оптика.
          <source>- 2018</source>
          . -
          <fpage>Т</fpage>
          .
          <volume>42</volume>
          , №
          <fpage>2</fpage>
          . -
          <lpage>С</lpage>
          .
          <fpage>297</fpage>
          -
          <lpage>305</lpage>
          . - doi: 10.18287/
          <fpage>2412</fpage>
          - 6179-2018-42-2-
          <fpage>297</fpage>
          -305
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>Класс</given-names>
            <surname>AsyncTask</surname>
          </string-name>
          . - URL: http://developer.alexanderklimov.ru/android/theory/asynctask.php
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>7. Android developers. - URL: https://developer.android.com/index.html</mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Парамонов</surname>
            <given-names>И</given-names>
          </string-name>
          .В.
          <article-title>Разработка мобильных приложений для платформы Android: учебное пособие</article-title>
          . - Ярославль: ЯрГУ,
          <year>2013</year>
          . -
          <fpage>88</fpage>
          с.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Харди</surname>
            <given-names>Б.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Филлипс</surname>
            <given-names>Б.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Стюарт</surname>
            <given-names>К.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Марсикано</surname>
            <given-names>К</given-names>
          </string-name>
          . Android.
          <article-title>Программирование для профессионалов. 2-е изд</article-title>
          . - СПб.: Питер,
          <year>2016</year>
          . -
          <fpage>640</fpage>
          с.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Howse J. Android</surname>
          </string-name>
          <article-title>Application Programming with OpenCV</article-title>
          . - Packt Publishing Ltd,
          <year>2013</year>
          . - P.
          <fpage>1</fpage>
          -
          <lpage>131</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>