
- •Содержание
- •Введение
- •1 Описание проблемной области
- •1.1 Бинаризация изображения
- •2 Постановка задачи
- •3 Описание используемых алгоритмов и подходов
- •3.2 Алгоритм поворота изображения
- •3.5 Формирование информативных признаков для распознавания
- •4 Программная реализация
- •4.1 Схема программного обеспечения
- •4.2 Описание разработанных классов, функций, методов
- •4.3 Тестовый пример и руководство пользователя
3.5 Формирование информативных признаков для распознавания
Признаком для распознавания нот быть являться ее местоположение относительно линий нотного стана. Если она находится на 3тьей линии, то можно сказать что это нота «си», если между третье и четвертой – «ля», на четвертой – «соль», между четвертой и пятой – «фа», на пятой – «ми», ниже пятой, но касаясь её – нота «ре», ниже пятой – нота «до». Это видно на рисунке 3.5.1.
Рисунок 3.5.1 – Положение нот на нотном стане
Чтобы распознать ноты, необходимо сначала выделить линейки нот, а после пройтись по каждой распознавая ноты, относительно пяти линий. Необходимо сохранять эталоны не только найдя первые 5 линий, а постоянно сохранять если не находятся ноты, для последующего определения нот. Это необходимо из-за того что линейка нот может быть немного сдвинута к концу, что приведёт к ошибочному распознаванию ноты.
Рисунок 3.5.2 – Результат распознавания
3.6 Алгоритм отделения нот от нотного стана
Для того чтобы отделить ноты от нотного ного стана, сформирован цикл в котором проверяется цвет каждого пикселя изображения и если он не черный, то ему присваивается белый цвет. Результат отделения представлен на рисунке 3.6.1
Рисунок 3.6.1 – Результат отделения нот
3.7 Алгоритм вырезания ноты
После того, как ноты были отделены от нотного стана, необходимо вырезать по одной ноты для дальнейшего масштабирования и отправления на персептрон.
Первым этапом алгоритма, является нахождение первой черной верхней точки. Значения координат этой точки передаются «жуку» и «жук» начинает свой ход. При этом запоминаются координаты верхней, нижней, левой и правой точки ноты. После вычесляется ширина и высота ноты и эти значения передаются функции C# bmp_Src.Clone(new Rectangle(h, g, a, b), PixelFormat.Format1bppIndexed). Результат вырезания представлен на рисунке 3.7.1
Рисунок 3.7.1 – Результат вырезании ноты
3.8. Определение длины ноты с помощью нейросети Персептрон
Основными длительностями нот являются целая (белая нота без штиля) и её половинные деления: половина (белая со штилем), четверть (чёрная со штилем), восьмая (чёрная со штилем и одним флагом), шестнадцатая (чёрная со штилем и двумя флагами), тридцать вторая (чёрная со штилем и тремя флагами) и т. д. Классификация нот по длине звучания представлена на рисунке 3.8.1
Рисунок 3.8.1 - Классифкация нот по длине звучания
Так как будет определяться четыре основных длины звучания ноты, то для распознавания используется нейросеть Персептрон с двумя R – элементами и первый алгоритм обучения, то есть без учета ответа Персептрона.
После загрузки изображения, рандомно задается матрица подключений, значение каждый элемент может принимать 0, 1 или -1 (3.8.2)
Рисунок 3.8.2 – Матрица подключений
Далее формируются рецепторы Xj, выходные значения Yj, матрица Lj.
Выходные значения Yj рассчитываются исходя из формулы:
Выходные сигналы суммируются в сумматоре и поступают на вход реагирующего элемента. Обучение персептрона осуществляется за счет настройки L – коэффициентов.
На рисунке 3.8.2 представлен результат работы нейросети Персептрон.
Рисунок 3.8.2 – Результат определения длины ноты с помощью Персептрона