Обработка изображений в системе 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.