Разработка приложения для загрузки изображения нот с последующим их распознаванием и проигрыванием

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

СОДЕРЖАНИЕ

  • ВВЕДЕНИЕ
  • 1. ОПИСАНИЕ ПРОБЛЕМНОЙ ОБЛАСТИ
    • 1.1 Фильтрация шумов полутонового изображения
    • 1.1.1 Усредняющий фильтр
    • 1.1.2 Медианный фильтр
    • 1.2 Алгоритмы бинаризации изображения
    • 1.2.1 Алгоритм бинаризации пороговым методом
    • 1.2.2 Алгоритм бинаризации методом мод
  • 2. ПОСТАНОВКА ЗАДАЧИ
    • 3. ОПИСАНИЕ ИСПОЛЬЗУЕМЫХ АЛГОРИТМОВ И ПОДХОДОВ
    • 3.1 Алгоритм поворота изображения
    • 3.2 Формирование информативных признаков для распознавания

3.3 Распознавание изображения. Метод ближайших соседей

  • 4 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
    • 4. 1 Схема программного обеспечения
    • 4.2 Описание классов, функций, методов
    • 4. 3 Тестовый пример и руководство пользователя
  • ЗАКЛЮЧЕНИЕ
  • ЛИТЕРАТУРА

ПРИЛОЖЕНИЕ А

ПРИЛОЖЕНИЕ Б

ВВЕДЕНИЕ

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

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

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

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

В качестве языка программирования для разработки данного программного обеспечения был выбран язык C#, т.к. он позволяет реализовывать проекты высокой степени сложности и имеет мощные средства для работы с графической информацией.

нота изображение распознавание программа

1. ОПИСАНИЕ ПРОБЛЕМНОЙ ОБЛАСТИ

Номта (лат. nфta -- «знак», «метка») в музыке -- это графическое обозначение звука музыкального произведения, один из основных символов современной музыкальной нотации. Вариации в изображении ноты, а также сочетания с другими символами позволяют задать такие характеристики обозначаемого нотой звука, как высоту, длительность и порядок исполнения по отношению к другим звукам.

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

Партитумра (итал. partitura, букв. -- разделение, распределение) в музыке -- нотная запись многоголосного музыкального произведения, предназначенного для исполнения ансамблем, хором или оркестром, в которой одна над другой даны в определённом порядке все партии (голоса).

Рисунок 1.1 — Пример партитуры с нотными знаками

Диапазон применимых в музыке звуков разбит на 9 октав, каждая из которых имеет своё название. Октава, лежащая посередине диапазона используемых в музыке звуков, называется «Первая октава», следующая вверх -- «Вторая. Музыкальная октава делится на семь нот. Каждая нота имеет свою частоту звучания. В таблице 1.1 представленны ноты и их частоты звучания. В данном проекте частоты необходимы для последующего воспроизведения нот.

Таблица 1.1 — Таблица нот и их частот

Октава

Нота

Частота (Гц)

Изображение

Первая октава

До

261. 6

Ре

294. 7

Ми

329. 6

Фа

349. 2

Соль

392. 0

Ля

440. 0

Си

493. 9

Вторая октава

До

523. 3

Ре

587. 3

Ми

659. 3

Фа

698. 5

Соль

784. 0

Ля

880. 0

Си

987. 8

В данном курсовом проекте будут распознаваться ноты первых двух октав.

Рисунок 1.2 — Ноты первых двух октав

1.1 Фильтрация шумов полутонового изображения

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

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

1.1.1 Усредняющий фильтр

Работа усредняющего фильтра заключается в замене яркости в данном пикселе на среднюю яркость, вычисленную в его 8-окрестности, включая и сам пиксель:

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

Рисунок 1.1.1.1 — Пример работы усредняющего фильтра

1.1.2 Медианный фильтр

Еще одним методом улучшения качества изображения является медианная фильтрация. Яркость а9 заменяется медианой пикселей, попадающих в окно матрицы (маски).

Медианой дискретной последовательности n элементов при нечетном n называется элемент, для которого существует (n-1)/2 элементов меньших или равных ему по величине и (n-1)/2 элементов больших или равных ему по величине.

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

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

Рисунок 1.1.2.1 — Пример работы медианного фильтра

1.2 Алгоритмы бинаризации изображения

Каждый пиксель изображения состоит из 3-х цветов, у каждого цвета есть интенсивность от 0 до 255. Для того чтобы максимально точно распознать ноты, необходимо преобразовать изображение в чёрно-белое, т. е. провести его бинаризацию. Бинаризация — преобразование изображения к бинарному виду. Бинарное изображение гораздо легче поддаётся распознаванию.

Существуют различные подходы к бинаризации, которые условно можно разделить на 2 группы: пороговые и адаптивные. Пороговые методы бинаризации работают со всем изображением, находя какую-то характеристику (порог), позволяющую разделить все изображение на чёрное и белое. Адаптивные методы работают с участками изображений и используются при неоднородном освещении объектов.

1.2.1 Алгоритм бинаризации пороговым методом

В данном проекте реализовано 2 метода бинаризации: пороговая и бинаризация методом мод. Если пользователь преобразует изображении в чёрно-белое вручную, используется пороговая бинаризация.

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

(3. 1)

где P (i, j) — цвет пикселя на исходном изображении,

P1(i, j) — цвет пикселя на новом изображении,

t — пороговое значение.

1.2.2 Алгоритм бинаризации методом мод

Если пользователь преобразует изображении в чёрно-белое автоматически, используется бинаризация методом мод.

В методе мод используется гистограмма яркостей пикселей на изображении. Метод мод можно использовать для изображений с хорошо отличимым объектом и фоном. В таких изображениях будет 2 хорошо различимых пика.

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

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

Рисунок 1.2.2.1 Гистограмма с двумя пиками.

2. ПОСТАНОВКА ЗАДАЧИ

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

Входными данными для проекта является изображение с нотами в формате *. bmp. Для корректного распознавания необходимо загружать изображение с нотами первых двух октав с длительностью нот от целой до четвертной; на изображении не должны располагаться посторонние объекты. В программе все операции по подготовке изображения к распознаванию необходимо выполнять последовательно.

В программе необходимо предусмотреть следующие этапы:

— загрузка изображения;

— бинаризация изображения;

— поворот изображения;

— распознавание изображения;

— проигрывание распознанных нот.

Требования к реализации проекта:

— Операционная система — Windows 7;

— Среда разработки приложения — Microsoft Visual Studio 2010;

— Язык программирования — C#.

3. ОПИСАНИЕ ИСПОЛЬЗУЕМЫХ АЛГОРИТМОВ И ПОДХОДОВ

Работа с изображением в данном проекте производится на основе библиотеки Drawing. dll, в которой описаны основные классы (Bitmap, Image, Graphics, Point) для реализации приложения. Для воспроизведения звуков используется библиотека Kernel32. dll.

3.1 Алгоритм поворота изображения

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

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

Рисунок 3.1.1 — Нахождение линий

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

Рисунок 3.1.2 — Необходимый угол для поворота

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

3.2 Формирование информативных признаков для распознавания

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

Нота определяется в зависимости от того, между какими линиями она находится. Если она находится ниже, чем 5-я линия, то это нота «до» первой октавы, если ниже 5-й, но касается её, — это нота «ре», на 5-й линии — «ми», между 5-й и 4-й — «фа», на 4-й — «соль», между 4-й и 3-й — «ля», на 3-й — «си», между 3-й и 2-й — нота «до» второй октавы, на 2-й — нота «ре», между 2-й и 1-й — «ми» и т. д.

Рисунок 3.2.1 — Распознаваемые ноты

Далее необходимо определить длительность звучания ноты. Так, если нота не закрашена и у неё нет штиля, то она является целой. Если нота не закрашена, но у неё есть штиль, то она является половинной.

Рисунок 3.2.2 — Элементы изображения ноты: 1 — флажок, 2 — штиль, 3 — головка

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

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

3.3 Распознавание с обучением. Метод эталонов

Распознавание незакрашенных нот в данном проекте осуществляется при помощи метода эталонов. Суть этого метода состоит в следующем.

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

где — значение i-го признака у эталона,

k- количество объектов данного образа в обучающей выборке.

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

Для нахождения минимального расстояния используется Евклидово расстояние.

По определению Евклидова расстояния квадрат расстояния между двумя точками x и y в пространстве D равен

x, y)=

4. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

4.1 Схема программного обеспечения

Приложение представляет собой проект с именем ПОИ_курс. sln. На рисунке 4.1.1 представлен список файлов проекта.

Описание файлов, входящих в проект, представлено ниже:

· MainForm. cs — модуль, в котором содержатся методы для открытия и распознавания изображения;

· PlayNote. cs — модуль, содержащий методы для проигрывания распознанных нот.

На рисунках 4.1.2 — 4.1.3 изображена IDEF0-диаграмма приложения, спроектированная в среде BPwin.

Рисунок 4.1.1 — Структура проекта

Рисунок 4.1.2 — контекстная диаграмма процесса «Распознавание музыкальных нот»

Рисунок 4.1.3 — декомпозиция контекстной диаграммы

Рисунок 4.1.4 — декомпозиция процесса «Распознавание изображения»

4.2 Описание классов, функций, методов

В ходе работы были реализованы следующие классы и методы:

— class MainFrom — класс, содержащий методы для подготовки изображения к распознаванию и обрабатывающий работу формы и нажатие кнопок

— class PlayNote — класс, содержащий метод, для воспроизведения нот.

В классе MainFrom разработаны следующие методы:

· public double getAngle — метод, находящий угол, на который необходимо повернуть изображение;

· public Bitmap RotateImage — метод, возвращающий повёрнутое изображение;

· public Bitmap MakeGray — метод, выполняющий бинаризацию изображения;

· private void auto_rotare_Click — метод, обрабатывающий кнопку, по которой происходит автоматический поворот изображения;

· public btn_Go_Click — метод, обрабатывающий кнопку «Преобразовать»

· public btn_OpenFile_Click — метод, позволяющий открыть изображение

· public findNote — метод, определяющий ноту по её расположению между линиями нотного стана

· public Identification_Note — метод распознавания скрипичного ключа, нотного стана и нот

· public btRotate_Click — метод, позволяющий пользователю самостоятельно повернуть изображение

· public button4_Click — метод, позволяющий пользователю самостоятельно сделать бинаризацию изображения

· public btAutoBin_Click — метод, выполняющий автоматическую бинаризацию

· public btRotateLeft_Click — метод для поворота изображения на 90 градусов влево

· public btRotateRight_Click — метод для поворота изображения на 90 градусов вправо

· private void btn_play_Click — метод, запускающий воспроизведение найденных нот.

В классе PlayNote разработан следующий метод:

· public void Play_Note (string note, int time) — метод для воспроизведения ноты.

4.3 Тестовый пример и руководство пользователя

При запуске программы окно имеет вид, представленный на рисунке 4.3.1.

Рисунок 4.3.1 — Главное окно приложения после запуска

Для начала необходимо произвести обучение системы тем нотам, которые она сможет в дальнейшем распознавать. Для этого необходимо загрузить растровое изображение для обучения. На этом изображении находятся ноты первых двух октав по 3 экземпляра каждой ноты. Такое изображение необходимо для распознавания методом эталонов. Загрузить картинку можно при помощи кнопки «Обзор». Далее в появившемся диалоговом окне (рисунок 4.3. 2) необходимо выбрать нужный файл формата *. bmp.

Рисунок 4.3.2 — Диалоговое окно загрузки растрового изображения

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

Рисунок 4.3.3 — Главное окно после загрузки обучающего изображения

Теперь изображение нужно преобразовать в чёрно-белое. Для этого необходимо перейти на вкладку «Преобразование» и нажать кнопку «Автобинаризация».

Далее для обучения программы необходимо нажать на кнопку «Обучение (Эталоны)». После этого в правом верхнем углу программы будет выведена таблица всех 52 классов нот.

Рисунок 4.3.4 — Таблица классов для обучающего изображения

Эта таблица содержит следующую информацию по столбцам:

№ - номер ноты на изображении;

Позиция — позиция ноты относительно строк нотного стана;

Тон — тон класса нот (каждый класс состоит из 3 нот);

Классы — названия классов, к которым относятся ноты.

На этом этап обучения системы завершён. Чтобы пользователь при работе со своим изображением случайно не нажал на кнопку обучения, она становится неактивной.

Для загрузки пользовательского изображения, которое необходимо будет распознать, нужно снова перейти на вкладку «Исходный файл», нажать на кнопку «Обзор» и в появившемся диалоге выбрать необходимое изображение. После этого картинка загрузится в программу.

Рисунок 4.3.3 — Главное окно после загрузки обучающего изображения

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

Рисунок 4.3.5 — Угол, на который программа повернула исходное изображение

Рисунок 4.3.5 — Главное окно после поворота изображения

Также в программе пользователю предоставлена возможность самому выбрать значение угла поворота изображения. Для этого необходимо ввести желаемое значение угла в поле «Угол» и нажать кнопку «ОК».

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

После поворота изображения необходимо преобразовать его в чёрно-белое, чтобы убрать появившиеся помехи. Для этого необходимо нажать кнопку «Автобинаризация». Результат показан на рисунке 4.3.6.

Рисунок 4.3.6 — Главное окно программы с результатами бинаризации изображения

Если пользователя не устроит результат автобинаризации, он может провести её вручную. Для этого необходимо ввести порог бинаризации в поле «Порог» и нажать кнопку «ОК».

После совершённых действий можно приступать к распознаванию изображения. Для этого необходимо нажать на кнопку «Преобразовать по признакам!». После этого программа заполнит вторую таблицу классов.

Рисунок 4.3.7 — Таблица классов нот для распознаваемого изображения

В этой таблице содержится следующая информация по столбцам:

№ - номер ноты на нотном стане распознаваемого изображения;

Позиция — позиция ноты относительно строк нотного стана;

Тон — тон класса ноты;

R — позиция данной ноты в таблице классов;

Классы — название класса, к которому относится нота.

Чтобы узнать расстояние от одной ноты до всех классов необходимо выделить в таблице классов строку, в которой она записана, и нажать на кнопку «Расстояние».

Рисунок 4.3.8 — Расстояния от распознаваемой ноты до каждого класса

Далее нужно перейти на вкладку «Результат», где будут отображены результаты распознавания изображения.

Рисунок 4.3.9 — Главное окно программы с результатами распознавания изображения

Под каждой распознанной нотой выводится номер класса, к которому она принадлежит.

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

ЗАКЛЮЧЕНИЕ

В ходе выполнения данного курсового проекта было разработано приложение, которое распознаёт ноты, находящиеся на загруженном изображении, и воспроизводит их.

Тестирование приложения при различных условиях показало довольно стабильную работу и высокую отказоустойчивость.

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

Среди недостатков приложения можно отметить то, что оно распознаёт только целые, половинные и четвертные ноты первых двух октав и распознавание не всегда бывает на 100% точным, т.к. правильность распознавания во многом зависит от качества и корректности входного изображения.

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

· распознавание и воспроизведение остальных нот;

· распознавание и воспроизведение длительности звучания ноты;

· распознавание и воспроизведение нот со знаками альтерации;

· распознавание и воспроизведение нот, записанных на разных нотных станах и объединённых акколадой.

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

Приложение может использоваться теми пользователями, которые начинают обучаться на каком-либо музыкальном инструменте и хотят прослушать ту или иную мелодию перед тем, как разучить её.

ЛИТЕРАТУРА

1. Вельтмандер П. В. Учебное пособие «Основные алгоритмы компьютерной графики». Издательство: Спектор-Новосибирск, 2000.

2. Дэвис Форсайт, Жан Понс, Учебное пособие «Компьютерное зрение, современный подход». Издательство: Вильямс, 2004.

3. Ковалева И. Л., «Алгоритмы обработки изображений», БНТУ, 2007.

4. Эндрю Троелсен, «С# и платформа. NET». Издательство: Питер Пресс, 2008.

ПоказатьСвернуть
Заполнить форму текущей работой