Обработка изображений в системе Android
Автор: Бойнов М.А., Джанаев С.И.
Журнал: Теория и практика современной науки @modern-j
Рубрика: Математика, информатика и инженерия
Статья в выпуске: 5 (23), 2017 года.
Бесплатный доступ
Цель статьи - проанализировать и структурировать накопленную информацию о процессе обработки изображений в системе Android для подготовки к распознаванию, а также выявить самый быстрый алгоритм для преобразования цветного изображения в серой шкале.
Нейронная сеть, распознавание
Короткий адрес: https://sciup.org/140271450
IDR: 140271450
Comparison of the performance of methods on the example of image processing in the Android system
The purpose of the article is to analyze and structure the accumulated information on the process of image processing in the Android system to prepare for recognition, and to identify the fastest algorithm for converting a color image on a gray scale.
Текст научной статьи Обработка изображений в системе 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.