Как определить координаты пикселя на картинке на андроид

Обновлено: 07.07.2024

Занимаясь разработкой приложений под ОС Android возникают интересные идеи, которые хочется попробовать, либо есть какой-то набор теоретических знаний и их хочется применить на практике, из совокупности этих факторов и возникла идея описываемого проекта.

Существует много статей о распознавании текста, о компьютерном зрении и об отдельных алгоритмах распознавания. В этой же публикации демонстрируется попытка реализации задачи, связанной с нахождением ключевого слова на изображении текста, что может позволить, например, найти необходимое место для чтения какого-либо текста в DjVu без распознавания самого текста.

Пример реализации представлен в виде Android приложения, а исходным изображением является скриншот текста, с введенным ключевым словом, для решения задачи применяются различные алгоритмы обработки и распознавания изображений.

Задача

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

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

  • Ознакомление с некоторыми методами обработки изображений и распознавания образов;
  • Ознакомление с возможностями и сложностью реализации этих методов для Android.

Получение изображения

Для получения исследуемого изображения создаем Activity, в которой будет всего три элемента:

1. EditText — для ввода ключевого слова;
2. TextView — для отображения текста, в котором необходимо найти это слово;
3. Кнопка создания скриншота и перехода на другой экран.

! Весь код носит исключительно демонстративный характер и не является правильной инструкцией к действию.

Layout с кнопкой, который включает ссылку на вышеприведенный layout

Примерно так это будет выглядеть:


Для поиска, например, введем слово «dreams»:


Таким образом мы получаем одиночное ключевое слово, после которого ниже следует текст. Стоит обратить внимание на то, что ключевое слово и сам текст имеют разный размер шрифта (для усложнения задачи, скажем так).

Нажимаем на кнопку и получаем скриншот области с ключевым словом и текстом.

Метод для получения скриншота, вызываемый по нажатию на кнопку

Полученный скриншот открывается в новой Activity, где в NavigationDrawer собраны функции последовательных действий. В реальном приложении некоторые из операций могут быть объединены в одну для исключения лишних проходов по изображению.

Предварительная обработка полученного изображения

Для начала нужно выполнить перевод полученного цветного изображения в полутоновое.

Перевод изображения из цветного в полутоновое

Для перевода используется схема RGB to YUV.

В нашем случае необходима лишь интенсивность (яркость), а получить её можно по форумуле:

Y = 0.299*R + 0.587*G + 0.114*B, где R,G,B красный, зеленый и синий каналы соответственно.

Для работы с цветами, как ни странно, полезен класс Color и, в частности, его статические методы red, green и blue, в которых реализованы операции с побитовыми сдвигами для выделения нужного цветового канала из интового значения цвета пикселя.

Пример кода, для перевода цветного пикселя в яркость:


Выполнять сегментацию на полутоновом изображении не на много легче, чем на цветном, поэтому следующим шагом необходимо полутоновое изображение перевести в бинарное (значения яркостей пикселей имеют лишь два значения 0 и 1).

Бинаризация полутонового изображения

В данной задаче для бинаризации достаточно элементарного порогового метода, с порогом по умолчанию 128.

В дальнейшем для корректировки результатов порог можно подобрать экспериментальным путем (в приложении реализована возможность задания порога пользователем).

Для получения бинарного значения яркости выполняется проверка полученной ранее полутоновой яркости:


Где threshold — порог, Color.WHITE и Color.BLACK — константы для удобства, чтобы не путаться с 0 и 1.

После проделанного перевода в полутоновое и дальнейшей бинаризации получаем следующий результат:


Так как эти два способа обработки изображения очень близки, они объединены в один метод.

Пример метода, осуществляющего перевод в полутоновое и бинаризацию изображения

Сегментация

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

Сегментация строк

Для определения строк текста необходимо найти части гистограммы с количеством черных пикселей больше нуля, которые находятся между частями гистограммы с нулевым количеством пикселей. Для этого составляется гистограмма количества черных пикселей в каждой однопиксельной строке изображения, после чего она обрабатывается для получения координат строк по вертикали (по сути номера строк в гистограмме). Зная эту координату и общие размеры изображения, можно выделить область, содержащую строку со словами.

«Inline» гистограмма для наглядности (слева) выглядит, например, так:


Для удобства отображения гистограмма нормализуется.

Пример нормализации гистограммы в onDraw кастомной View

Когда известно расположение строк на изображении, можно переходить к поиску слов.

Сегментация слов

Для того, чтобы понять, где слова а где просто соседние символы, необходимо определиться, какие расстояния между символами считать расстояниями между словами, а какие расстояниями между символами внутри одного слова. Здесь на помощь приходит метод мод, а точнее его адаптированный вариант, потому что чаще всего этот метод встречается в бинаризации, но его суть можно применить и в данной ситуации.

Для начала как и для строк, аналогичным образом строим гистограмму внутри строки (по сути была вертикальная, теперь горизонтальная), она необходима, чтобы понять, где символы, а где белые промежутки.

Пример получения такой гистограммы ниже и аналогичен предыдущему.

Обрабатывая эту гистограмму можно получить новую гистограмму — промежутков между черными пикселями, т.е., первая градация её будет количеством «пробелов» шириной 1 пиксель, вторая градация количество «пробелов» шириной 2 пикселя и так далее.

Получится примерно что-то такое:


Исходя из логики метода мод мы находим два ярко выраженных пика (на изображении выше они очевидны), и всё что находится около одного пика — расстояния между символами внутри слова, около второго — расстояния между словами.

Имея такую информацию о «пробелах» и гистограмму строки можно выделить участки изображения, где находятся слова, а также посчитать сколько символов содержится в этих словах.

Полный код данного процесса смотри в исходниках.

Для визуальной оценки работы вышеизложенной совокупности алгоритмов слова в тексте окрашиваются в чередующееся цвета, а слова претенденты (напомню, те, у которых количество символов совпадает с количеством символом в ключевом слове) остаются черного цвета:


И так, на данном этапе есть кусочки изображений (точнее координаты этих кусочков), которые содержат ключевое слово и слова претенденты на основании количества символов, можно попробовать найти среди претендентов ключевое слово.

Распознавание

Обращаю внимание, что здесь под распознаванием подразумевается распознавание ключевого слова среди претендентов, при этом о распознавании из каких именно символов они состоят речи не идет.

Для распознавания подбирается набор информативных признаков: это может быть количество концевых точек, узловых точек, а также количество пикселей с 3, 4 и 5 черными пикселями-соседями, и другие. Опытным путем установлено, что большое количество признаков теряет смысл, так как они «перекрывают» друг друга.

На данном этапе остановимся на количестве концевых точек, с учетом их расположения (в верхней и нижней части изображения — для каждой части признаки считаются отдельно).

Для каждого слова выполняется подсчет количества признаков, после чего происходит поиск по методу ближайших соседей на основании евклидова расстояния.

Пример формирования структуры с подсчитанными признаками

Обо всех характерных числах типа A4, A8 и т.д. можно найти информацию дополнительно.

Код непосредственно распознавания на основе евклидова расстояния

Учитывая повторяемость слов и погрешности, в результате можно получить 2-3 ближайших соседа, среди которых будет найдено ключевое слово (на рисунке выделены красным).


Также на рисунке видно, что среди красных слов есть искомое слово «dreams».

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

Заключение

Поставленных целей удалось достичь, были опробованы некоторые методы обработки и распознавания изображений, при этом их реализация под Android не накладывает никаких дополнительных сложностей, просто нужно учитывать расход памяти и не хранить одновременно несколько больших Bitmap.

Надеюсь, информация окажется полезной для начинающих свой путь в решении задач по работе с изображениями под Android.

Описание всех используемых алгоритмов, подсчет характерных чисел и т.п. можно с легкостью найти в открытом доступе как на habrahabr, так и в многочисленных учебниках и онлайн ресурсах.


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

1- Что такое ImageView?

ImageView это view, который используется для отображения изображений, формат файлов изображения могут быть файлы из приложений, устройств или из URL.


2- Отображение изображения из ресурса изображений

Мы начнем с простого примера, ImageView отображает изображение в папке "drawable" у project.

Создать project c названием AndroidImageView.

  • File > New > New Project > Empty Activity
    • Name: AndroidImageView
    • Package name: org.o7planning.androidimageview
    • Language: Java


    triceratops_1.jpg triceratops_2.jpg

    Скопировать изображения и вставить в папку drawable в project.





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

    3- Отображение изображения из URL

    Вы так же можете отобрахить изображение из URL на ImageView. Правило это вам нужно скачать избражения из URL затем отобразить на ImageView:

    Получение данных из URL связанно с программированиеи сети в Android, вы можете найти пример отображения изображения взятого из URL на ImageView в статье инструкции по программированию сети Android по данной ссылке:

    4- Отображение файла изображения

    Вы так же можете отобразить файл изображения с устройства на ImageView, например файл находится в памяти. Для начала, вам нужно авторизировать чтение и запись данных на устройстве:

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


    Как посмотреть координаты GPS

    Координаты GPS хранятся в виде «метаданных», встроенных в сами файлы фотографий. Все, что вам нужно сделать, это просмотреть свойства файла и найти их.

    На самом деле метаданные имеют очень многие файлы: документы Microsoft Office, файлы PDF, музыкальные файлы, видео файлы и многие многие другие.

    В Windows все, что вам нужно сделать, это щёлкнуть правой кнопкой мыши файл изображения, выбрать «Свойства», а затем перейти на вкладку «Детали» в окне свойств. Найдите координаты широты и долготы под GPS.


    В macOS щелкните файл изображения правой кнопкой мыши (или нажмите «Control»+ щелкните его) и выберите «Получить информацию». Вы увидите координаты широты и долготы в разделе «Подробнее».


    Конечно, вы можете увидеть эту информацию в приложении «EXIF viewer», но в большинстве операционных систем эта функция встроена.

    GPS-координаты не встраиваются в каждую фотографию. Человек, сделавший фотографию, возможно, отключил эту функцию на своём телефоне или вручную удалил детали EXIF. Многие службы обмена изображениями в Интернете, но не все из них, автоматически убирают сведения о геолокации из соображений конфиденциальности. Если вы не видите этих подробностей, они были удалены (или никогда не включены в) из файла изображения.

    Как по координатам найти место на карте

    Это стандартные GPS-координаты, поэтому вам просто нужно сопоставить их с местоположением на карте, чтобы определить, где на самом деле была сделана фотография. Многие картографические сервисы предлагают эту функцию — например, вы можете подключить координаты прямо в Google Maps. Google предлагает инструкции для правильного форматирования координат для Google Maps.

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

    Быстро узнать место на карте, где была сделана фотография

    Даже зная GPS координаты, невозможно сказать, в каком именно географическом месте была сделана фотография. В статье «Как в Windows получить GPS координаты фотографии для вставки в Google Maps» показано, как можно получить координаты в том виде, каком его понимают Карты Google, чтобы можно было посмотреть на расположение, где была снята фотография.

    Хотя инструкция весьма простая, видно, всё равно нужно сделать несколько шагов.

    Сервис «Геолокация фотографий по GPS меткам в метаданных» мгновенно покажет место на карте, где была сделана фотография (конечно же, если в ней есть GPS метки).

    Вам будет показано место на карте и в текстовом виде все найденные метаданные.


    Как запретить встраивание координат GPS в ваши фотографии

    Если вы хотите полностью отключить добавление данных GPS, вы можете зайти в приложение «Камера» своего телефона и отключить в настройках сохранение местоположения.


    Имейте в виду, однако, что GPS-координаты тоже могут быть очень полезными. Например, с таким сервисом, как Google Photos, Yahoo! Flickr, или Apple iCloud Photo Library, вы можете упорядочивать свои фотографии и просматривать их в соответствии с тем, где они были сняты, что позволяет с лёгкостью просматривать фотографии, сделанные в определённый отпуск или на любимой достопримечательности. Вы всегда можете самостоятельно удалить информацию о местоположении, если хотите поделиться фотографией, поэтому многие службы автоматически удаляют данные геолокации, когда вы делитесь фотографией с кем-то ещё.

    Метаданные EXIF, хранящиеся вместе с фотографиями, также включают некоторые другие детали. Например, вы можете точно определить, какую модель камеры (или смартфона) использовал человек, чтобы сделать фотографию. Вы также можете проверить настройки экспозиции и другие детали. Большинство этих деталей не считаются такими же чувствительными, как данные о местоположении GPS, хотя профессиональные фотографы могут захотеть сохранить свои секреты и настройки.

    Андрей Юмашев

    Имею слабость - увлечён планированием и точностью. Поэтому, когда я в первый раз приехал в Радославль, ориентация по столбикам (которые уже есть не везде, а номера на них давно утрачены) не дала удовлетворения любопытству - равно как и последующий визит с примерной обмеркой по рулетке - все измерения пошли крахом, когда я увидел белый столб там, где его, судя по обмерке, быть не должно было.

    В связи с чем, немного поисследовав интернет, я нашёл способ, как корректно определить границы участков с привязкой к местности, имея только лишь доступ в интернет и автомобильный навигатор (или мобильный телефон с полноценным GPS-модулем).

    Как известно, Росреестр имеет публичную кадастровую карту - достаточно удобную для пользования. Ниже я приведу пошаговую инструкцию действий - как с этим работать и как получить на выходе кадастровый обмер, не прибегая к вызову геодезистов.

    Хочу только лишь обратить внимание, что я не стал бы делать замеры по координатам, используя телефон - ввиду того, что обычно в телефонах применяется обрезанный GPS-датчик (A-GPS), который использует для повышения точности сотовые вышки - и в итоге точные координаты таковыми являться не будут - но будет иметь место "минутное" отклонение в произвольную сторону - в реальности это погрешность несколько метров.

    Вот таким нехитрым образом вы получаете координаты четырех углов участка и экономите на вызове геодезистов (которые проделывают всю ту же самую процедуру).

    После всех проведенных манипуляций я получил с помощью Paint вот такую картинку для верхнего участка под номером 116 (по карте Радославля. Его разделяет дорога и в реальности у него 2 записи на 1 участок). Я кликал не прямо в углы, а делал небольшой отступ в пару пикселей - чтобы точно не ошибиться в установке столбика и не залезть к соседям на этапе выверения границ. Размеры сторон я брал из файла lines_RS.

    Соответственно, после всех этих действий крайне просто провести какие-либо мероприятия по планированию освоения - теперь участок представляет собой не бескрайнее поле, а имеет вполне конкретные границы - в моем случае с помощью нескольких столбов и пары мотков пеньковой верёвки.

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


    Как посмотреть координаты GPS

    Координаты GPS хранятся в виде «метаданных», встроенных в сами файлы фотографий. Все, что вам нужно сделать, это просмотреть свойства файла и найти их.

    На самом деле метаданные имеют очень многие файлы: документы Microsoft Office, файлы PDF, музыкальные файлы, видео файлы и многие многие другие.

    В Windows все, что вам нужно сделать, это щёлкнуть правой кнопкой мыши файл изображения, выбрать «Свойства», а затем перейти на вкладку «Детали» в окне свойств. Найдите координаты широты и долготы под GPS.


    В macOS щелкните файл изображения правой кнопкой мыши (или нажмите «Control»+ щелкните его) и выберите «Получить информацию». Вы увидите координаты широты и долготы в разделе «Подробнее».


    Конечно, вы можете увидеть эту информацию в приложении «EXIF viewer», но в большинстве операционных систем эта функция встроена.

    GPS-координаты не встраиваются в каждую фотографию. Человек, сделавший фотографию, возможно, отключил эту функцию на своём телефоне или вручную удалил детали EXIF. Многие службы обмена изображениями в Интернете, но не все из них, автоматически убирают сведения о геолокации из соображений конфиденциальности. Если вы не видите этих подробностей, они были удалены (или никогда не включены в) из файла изображения.

    Как по координатам найти место на карте

    Это стандартные GPS-координаты, поэтому вам просто нужно сопоставить их с местоположением на карте, чтобы определить, где на самом деле была сделана фотография. Многие картографические сервисы предлагают эту функцию — например, вы можете подключить координаты прямо в Google Maps. Google предлагает инструкции для правильного форматирования координат для Google Maps.

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

    Быстро узнать место на карте, где была сделана фотография

    Даже зная GPS координаты, невозможно сказать, в каком именно географическом месте была сделана фотография. В статье «Как в Windows получить GPS координаты фотографии для вставки в Google Maps» показано, как можно получить координаты в том виде, каком его понимают Карты Google, чтобы можно было посмотреть на расположение, где была снята фотография.

    Хотя инструкция весьма простая, видно, всё равно нужно сделать несколько шагов.

    Сервис «Геолокация фотографий по GPS меткам в метаданных» мгновенно покажет место на карте, где была сделана фотография (конечно же, если в ней есть GPS метки).

    Вам будет показано место на карте и в текстовом виде все найденные метаданные.


    Как запретить встраивание координат GPS в ваши фотографии

    Если вы хотите полностью отключить добавление данных GPS, вы можете зайти в приложение «Камера» своего телефона и отключить в настройках сохранение местоположения.


    Имейте в виду, однако, что GPS-координаты тоже могут быть очень полезными. Например, с таким сервисом, как Google Photos, Yahoo! Flickr, или Apple iCloud Photo Library, вы можете упорядочивать свои фотографии и просматривать их в соответствии с тем, где они были сняты, что позволяет с лёгкостью просматривать фотографии, сделанные в определённый отпуск или на любимой достопримечательности. Вы всегда можете самостоятельно удалить информацию о местоположении, если хотите поделиться фотографией, поэтому многие службы автоматически удаляют данные геолокации, когда вы делитесь фотографией с кем-то ещё.

    Метаданные EXIF, хранящиеся вместе с фотографиями, также включают некоторые другие детали. Например, вы можете точно определить, какую модель камеры (или смартфона) использовал человек, чтобы сделать фотографию. Вы также можете проверить настройки экспозиции и другие детали. Большинство этих деталей не считаются такими же чувствительными, как данные о местоположении GPS, хотя профессиональные фотографы могут захотеть сохранить свои секреты и настройки.

    Читайте также: