Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка.docx
Скачиваний:
22
Добавлен:
26.03.2016
Размер:
1.82 Mб
Скачать

15 Заключение

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

Было разработано приложение под OS Windows с помощью среды разработки Visual Studio 2015 на объектно-ориентированном языке программирования C#. Проанализировав полученные результаты, можно сделать вывод о том, что данная программа позволяет распознавать такие обозначения сборочного чертежа как вид и габаритные размеры на изображении чертежа.

Тестирование приложения позволило сделать следующие выводы:

1. Метод бинаризации с заданием порога подходит для перевода полутонового изображения в бинарное.

2. Персептрон работает неплохо, так как результат его работы зависит от качества бинаризации.

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

Результат распознавания зависит от качества сканирования чертежа. Улучшить результат распознавания можно путем комбинирования порога бинаризации.

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

16 Литература

- Конспект лекций по дисциплине «Методы распознавания образов». Ковалёва И.Л., 2015 г.

- Методические указания к лабораторным работам «ПЕРСЕПТРОННЫЕ НЕЙРОСЕТИ» Ковалёва И.Л., 2009 г.

- Горелик А.Л. Методы распознавания: учеб. пособие для вузов / А.Л.Горелик, В.А.Скрипкин. – 3-е изд., перераб. и доп. – М.: Высш.шк., 1989 – 234 с.

- Гренандер У. Лекции по теории образов: в 3-х т./ У. Гренандер; под ред. Ю.И. Журавлева. – М.: Мир, 1979-1983 – 1267 с.

- Реализация метода «Жук» - http://wiki.technicalvision.ru/

17

Приложение 1. Схема IDEF трех уровней и UML диаграмма классов.

Загрузка изображения чертежа

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

Бинаризация пороговым методом

Оконтуривание (метод «Жук»)

Персептрон или метод ближайшего соседа

Центрирование контуров

Сканированное изображение чертежа

Распознавание обозначения вида и габаритных размеров на изображении сборочного чертежа

Результат распознавания

Набор эталонных изображений

Windows приложение

Рис. 1 – Схема IDEF (первый уровень)

Диалоговое окно

Сегментация

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

Бинаризация

Бинаризация пороговым методом

Сканированное изображение чертежа

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

Загрузка изображения (*.bmp)

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

Бинарное изображение

Кнопка Open

Кнопка Find Areas

Кнопка Binarization

Оконтуривание

Кнопка Bug

Массив

контуров

Кнопка Centering

Оконтуривание (метод «Жук»)

Метод центрирования

Распознавание контуров

Персептрон или метод ближайшего соседа

Массив центрированных контуров

Центрирование контуров

Ответ

Кнопка Full answer или Next neighbor

Рис. 2 – Схема IDEF (второй уровень)

18

Загруженное изображение (*.bmp)

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

Сегментация

Подсчет количества перепадов внизу, справа и вверху от краев чертежа

Две координаты по вертикали и одна по горизонтали

Выделение областей интереса

Области для дальнейшей обработки

Кнопка Find Areas

Нахождения координат крайних точек символов слева, справа, вверху и внизу

Обрезка

Кнопка Centering

Вставка контура в картинку 50х50

Центрирование

Массив центрированных контуров

Массив контуров

Обрезанные контуры

Рис. 3 – Схема IDEF (третий уровень)

Рисунок 4 — UML диаграмма классов

19

Приложение 2. Исходный код класса Recognition

public class Recognition

{

private Bitmap Picture { get; set; }

private PictureBox PicBox { get; set; }

private Bitmap[] Areas = new Bitmap[3];

private int top;

private int right;

private int bottom;

public Bitmap Symbol;

public List<Bitmap> Bottom = new List<Bitmap>();

public List<Bitmap> Right = new List<Bitmap>();

public Recognition(PictureBox pic)

{

this.PicBox = pic;

}

public void OpenPicture()

{

using (OpenFileDialog openDialog = new OpenFileDialog())

{

openDialog.Filter = "All files (*.bmp)|*.bmp;";

openDialog.Multiselect = false;

if (openDialog.ShowDialog() == DialogResult.OK)

{

Picture = new Bitmap(openDialog.FileName);

PicBox.Image = Picture;

}

GC.Collect();

}

GC.WaitForPendingFinalizers();

}

public void FindArea() {…}

public void Binarization() {…}

public void Bug2() {…}

public Bitmap Bug3(int ii, int jj, Bitmap bmp, ref int delt) {…}

public void Centering() {…}

private Bitmap Center(Bitmap bmp) {…}

public void SavePicture()

{

using (SaveFileDialog saveDialog = new SaveFileDialog())

{

saveDialog.Filter = "All files (*.bmp)|*.bmp;";

if (saveDialog.ShowDialog() == DialogResult.OK)

{

PicBox.Image.Save(saveDialog.FileName);

}

GC.Collect();

}

GC.WaitForPendingFinalizers();

}

}

20

Приложение 3. Исходный код класса Perseptron

public class Perseptron

{

public List<Bitmap> StandardN = new List<Bitmap>();

public List<Bitmap> StandardS = new List<Bitmap>();

public int[,] TableSN = new int[2512, 120];

public int[,] TableSS = new int[2512, 120];

public string[] cla = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };

public string[] clA = { "А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "К" };

XMLINFO changesN = new XMLINFO();

XMLINFO changesS = new XMLINFO();

public XMLINFO CreateXML() {…}

public XMLINFO UseXML(string xml)

{

XMLINFO x = new XMLINFO();

var reader = new System.Xml.Serialization.XmlSerializer(typeof(XMLINFO));

var file = new System.IO.StreamReader(xml);

x = (XMLINFO)reader.Deserialize(file);

file.Close();

if (xml == "N.xml")

{

changesN.massivA = x.massivA;

changesN.massivL = x.massivL;

}

else

{

changesS.massivA = x.massivA;

changesS.massivL = x.massivL;

}

return x;

}

public void SaveChanges()

{

var writer = new System.Xml.Serialization.XmlSerializer(typeof(XMLINFO));

var wfile1 = System.IO.File.Create("N.xml");

var wfile2 = System.IO.File.Create("S.xml");

writer.Serialize(wfile1, changesN);

writer.Serialize(wfile2, changesS);

wfile1.Close();

wfile2.Close();

}

public void Preparation(XMLINFO x) {…}

public void LoadStanart() {…}

public string YesNo(Bitmap bmp, string[] e, ref int[,] Table) {…}

public void Studying() {…}

public void StudyingN(string s, string[] e, ref int[][] l, ref int[,] Table) {…}

}

21

Приложение 4. Исходный код класса Next neighbor

public class Next_neighbor

{

private double[] distance;

public string Distance(List<Bitmap> bmp, Bitmap bp, string[] ans)

{

distance = new double[bmp.Count];

for (byte k = 0; k < bmp.Count; k++)

{

double r = 0;

for (byte i = 0; i < bmp[k].Height; i++)

for (byte j = 0; j < bmp[k].Width; j++)

r += Math.Pow(bmp[k].GetPixel(i, j).R - bp.GetPixel(i, j).R, 2);

distance[k] = Math.Pow(r, 0.5);

}

return ans[Array.IndexOf(distance, distance.Min())];

}

}

22

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]