Можно ли использовать персептрон для обнаружения рукописных цифр?
Вопрос
Допустим, у меня есть небольшое растровое изображение, содержащее одну цифру (0..9), написанную от руки.
Можно ли обнаружить цифру с помощью (двухслойного) перцептрона?
Существуют ли другие возможности обнаружения однозначных цифр из растровых изображений, помимо использования нейронных сетей?
Решение
Ввод каждого пикселя растрового изображения непосредственно в нейронную сеть потребует длительного обучения и не подойдет для масштабирования или вращения изображения.
Чтобы помочь нейронной сети выполнить хорошую классификацию, вам необходимо выполнить некоторые шаги предварительной обработки.
- Нормализуйте изображение:
- Отрегулируйте контрастность и яркость так, чтобы гистограмма изображения соответствовала эталонному изображению.
- Размытие изображения, чтобы убрать шум.
- Преобразуйте его в черно-белое, используя некоторый порог.
- Найдите ограничивающую рамку фигуры и масштабируйте ее до заранее заданного размера.
- Рассчитайте различные признаки изображения, по которым можно отличить одну цифру от другой:
- А число Эйлера изображения — сообщает вам, сколько «дырок» имеется в фигуре (например,две дырочки для цифры 8).
- Количество белых пикселей (площадь цифры)
- А основные компоненты набора координат белых пикселей — говорит вам, насколько «вытянутой» является форма.
- ...другие функции, о которых вы можете подумать, обычно имеют одинаковые значения для аналогичных цифр.
Главные компоненты также можно использовать для нормализации вращения фигуры, чтобы самая длинная ось была вертикальной.
Характеристики — это то, что вы передаете в нейронную сеть для классификации, а не пиксели.
Другие советы
Вот ссылка на огромную базу рукописных цифр.На главной странице также есть относительные данные о производительности для многих различных методов, включая двухслойные нейронные сети.Это должно дать вам хорошее начало:База данных цифр MNIST и производительность
Вы также можете проверить Работа Джеффа Хинтона над ограниченными машинами Больцмана который, по его словам, работает довольно хорошо, и на его сайте есть хорошая пояснительная лекция (очень смотрибельная).
Вот Пример программы Matlab который использует обученную нейронную сеть для обнаружения отдельных цифр (размер изображения фиксирован 28*28).