Обработка изображений в системе Android

Автор: Бойнов М.А., Джанаев С.И.

Журнал: Теория и практика современной науки @modern-j

Рубрика: Математика, информатика и инженерия

Статья в выпуске: 5 (23), 2017 года.

Бесплатный доступ

Цель статьи - проанализировать и структурировать накопленную информацию о процессе обработки изображений в системе Android для подготовки к распознаванию, а также выявить самый быстрый алгоритм для преобразования цветного изображения в серой шкале.

Нейронная сеть, распознавание

Короткий адрес: https://sciup.org/140271450

IDR: 140271450

Текст научной статьи Обработка изображений в системе Android

Основная тема исследования - автоматическое распознавание кассовых чеков. В ходе исследования возникают ряд второстепенных задач одна из которых быстрая обработка изображений. Общий алгоритм можно увидеть на рисунке 1:

Рис.1 Схема получения текста

Сначала изображение конвертируется в оттенки серого, чтобы затем преобразовать его в черно-белое. После чего над черно-белым изображением проводятся морфологические операции, в процессе которых мы получаем контуры, а затем их объединяем в строки. Из изображения в градациях серого с использованием координат контуров получаем изображения отдельных символов, для нейронной сети. Для того чтобы этот процесс происходил как можно быстрее в этой рассматривается процесс преобразования цветного изображения в оттенки серого.

Преобразование цветного изображения в оттенки серого

В цветовых пространствах YUV и YIQ используемые в PAL и NTSC яркость Y' вычисляется следующим образом:

Y'=0.299R+0.587G+0.114B где R - яркость пикселя красного канала

G - яркость пикселя зеленого канала

B - яркость пикселя синего канала

Для учёта особенностей восприятия изображения человеческим глазом (чувствительность к зелёному и синему цвету) в модели HDTV используют другие коэффициенты:

Y'=0.2126R+0.7152G+0.0722B

Алгоритмы преобразования

Рассмотрим алгоритм преобразования цветного изображения в оттенки серого на языке Java в системе Android. Сначала нужно конвертировать файл в формате JPG или PNG в формат Bitmap, затем попиксельно обходить изображение.

Для обработки  изображений также  можно использовать открытую библиотеку OpenCV.

Для того чтобы применять функции OpenCV, необходимо конвертировать исходное изображение формата PNG,JPG в матрицу Mat. Для этого сначала нужно создать пустую матрицу нужного формата.

Mat tmp = new Mat(int rows, int cols, int type);

где int rows – число строк матрицы int cols   – число столбцов матрицы int type   – тип матрицы

Тип матрицы определяет ее глубину(канал) и используемые значения, то есть если изображение цветное, то глубина будет равна трем, а если в оттенках серого, то единице. Рассмотрим несколько типов матрицы. Тип CV_8UC1 хранит значения пикселей в диапазоне от 0 до 255 включительно и имеет 1 канал. Тип CV_8SC3 хранит значения пикселей в диапазоне от -128 до 128 включительно и имеет 3 канала.

После того как мы создали матрицу необходимо ее заполнить. В OpenCV эту роль выполняет функция:

bitmapToMat(Bitmap bmp, Mat dst);

где Bitmap bmp – изображение в формате bitmap Mat dst – матрица для заполнения

Функция перевода цветного изображения в градации серого выглядит следующим образом:

cvtColor(Mat src, Mat dst, int code);

где Mat src – исходная матрица

Mat dst – целевая матрица int code – код перевода (Для  цветного в градации серого  -

COLOR_RGB2GRAY)

Чтобы выявить время выполнения каждого алгоритма окружим их следующими строками:

long startTime = System.currentTimeMillis();

//ALGORYTHM long finishTime = System.currentTimeMillis();

В итоге если повторять преобразования 1000 раз для изображения разрешением 1024х768 получим следующие результаты которое сведены в таблицу 1:

Таблица 1. Результаты эксперимента.

Метод

Время выполнения(меньше-лучше), ms

Java Dalvik

34548

OpenCV

5020

Выводы

Для системы Android язык Java является удобным и быстрым средством разработки программного обеспечения, в тоже время для обеспечения производительности существуют отдельные реализации. Так в OpenCV используется Android NDK которое обеспечивает увеличение производительности устройства и сокращение времени выполнения процедур соответственно, что было показано на примере преобразования цветного изображения в оттенки серого.

Список литературы Обработка изображений в системе Android

  • Adam Gibson, Josh PattersonDeep Learning: DL4J and Beyond. 2017.
  • Gary Bradski, Adrian KaehlerLearning OpenCV. Computer Vision with theOpenCV Library. 2008.
  • Onur CinarPro Android C with the NDK - 1st ed. 2012.
  • Grayscale // Wiki URL: https://en.wikipedia.org/wiki/Grayscale
  • Documentation // OpenCV URL: http://docs.opencv.org/3.2.0
  • Sheran GunasekeraAndroid Architecture. 2012.
Статья научная