Найти в Дзене
Александр Шуравин.

Искусственный интеллект для чайников. Урок 2. Компьютерное зрение. Разбор простого примера

Изображение взято из открытых источников
Изображение взято из открытых источников

Предыдущий урок: Искусственный интеллект для чайников. Урок 1. Нейросети.

На прошлом уроке я рассказал вам, что такое искусственный интеллект и нейронные сети. Но ИИ – это не только нейронные сети. Существует еще очень много разных методов и подходов. Один из них – это компьютерное зрение. Как вы, наверное, догадались, эта технология применятся для того, чтобы найти на изображении определенные объекты, как то осмыслить его. Задача, на самом деле не тривиальная. Но и не такая уж сложная, как кажется на первый взгляд. Чтобы это доказать, разберем простую задачу: «На чёрном фоне есть несколько белый фигур, прямоугольники и треугольники:

-2

Нужно их распознать. Задача действительно простая, так как тут у нас идеальный случай: нет шумов, картинка абсолютно контрастная, нет искажений фигур. В реальном мире так не бывает, но мы пока только учимся. Более сложны задачи можно разбить на части и свети к простым, решив их по отдельности, примерно, как эту.

И так, как будем решать? Очевидно, нам надо каким-то волшебным образом сосчитать углы. У треугольника их три, у прямоугольника – четыре. Таким образом, мы их различим. Но вся проблема в том, что картинка у нас растровая. Поэтому, сначала нам надо перевести ее в какой-нибудь вид, более удобный для того, чтобы сосчитать у фигур углы.

Хорошую идею предлагает в [1] Гонсалес. Суть этой идеи состоит в том, что у фигуры есть центр масс. А каждая точка фигуры задана в полярных координатах относительно этого центра масс. Напомню, что полярные координаты, в отличи от декартовых – это расстояние от центра и угол поворота радиуса-вектора. Лучше всего это иллюстрирует следующая картинка:

-3

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

Данное изображение у нас бинарное. Оно имеет только два цвета – черный и белый. Если мы возьмем произвольную точку, то мы точно можем знать, относиться ли она к фигуре или к фону. Если эта точка относится к фигуре, мы можем проверить, сколько ее соседей так же имеют белый цвет. Если 8 – то эта точка внутри фигуры, если меньше – то эта точка принадлежит контуру. Зная декартовы координаты точки контура и зная координаты центра масс фигуры, мы можем перевести эти координаты в полярные. Вопрос только в том, как определить центр масс фигуры.

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

-4
-5

где A– количество пикселей, принадлежащих фигуре; I(x,y) – признак принадлежности точки к фигуре, 1 – если принадлежит, 0 – если не принадлежит; m – ширина изображения, n – высота изображения.

Возможно, кто-то спросит: а где тут искусственный интеллект? Мы решаем какие-то геометрические задачи! На это я отвечу: «ИИ – это не только всякие там нейросети, эвристики, генетические алгоритмы, автоматизация логических рассуждение и прочее тому подобное. Это еще и довольно жесткий матан». Скажу больше, основная часть методов искусственного интеллекта – это и есть жесткий матан. Но не пугайтесь, мы будем разбирать этот «жесткий матан» на простых и доступных примерах. В конец концов, те же нейросети работают с некими признаками, которые еще необходимо как-то получить. Если мы попробуем передать нейросети картинку как есть целиком, то ничего хорошего из этого не выйдет. Поэтому ее еще необходимо будет преобразовать в какой-то другой вид, более удобный для анализа нейросетью. И, решает вот эту геометрическую задачу, мы как раз изучаем, как можно подготовить данные для нейросети или других эвристик.

Но, вернемся, непосредственно, к задаче. Мы знаем, как решить ее, если нам будет известно, какая точка какой фигуре принадлежит. В этом случае мы сможет посчитать ее центр масс, а значит, сможем, в последствии, перевести точки контура фигуры в полярные координаты. Зная координаты всех точек фигуры, мы можем без труда определить и координаты ее точек контура – достаточно посчитать количество соседей у точки. Если меньше 8 – значит, это точка контура.

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

Итак, подытожим. Мы можем решить задачу по распознаванию фигур в идеальном случае, проделав следующие шаги:

1. Найти все белые точки и их принадлежность к отдельной фигуре.

2. Найти контру и цент масс каждой фигуры.

3. Посчитать контур в полярных координатах.

4. На развёртке (графике) контура фигура посчитать «всплески» (углы). Как мы знаем, у треугольника их три, у прямоугольника – четыре. Задача решена.

Литература

1. Р Гонсалес, Р. Вудс. Цифровая обработка изображений. Перевод с английского под редакцией П. А. Чочина, Техносфера, Москва, 2005, 1071 с.