Сделай Сам Свою Работу на 5

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





Класс Recognition имеет следующие методы:

- OpenPicture – выполняет загрузку изображения;

- FindArea – позволяет получить области для распознавания;

- Binarization – выполняет бинаризацию полученных областей;

- Bug – выполняет выделение контура;

- Centering – выполняет центрирование контуров.

Класс Perseptron имеет следующие методы:

- Preparation – подготовка таблиц А-элементов и λ;

- Studying – обучение персептрона;

- SaveChanges – запись настроенных λ в XML файл.

Класс Next neighbor имеет следующие методы:

- Distance – производит расчет евклидового расстояния.

Тестирование и руководство для пользователя

После запуска приложения пользователь увидит главное окно приложения на рисунке 4.1.

Рис 4.1 – Главное окно

 

Рис 4.2 – Открытие изображения чертежа с помощью кнопки Open

 

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

 

 

Рис 4.3 – Изображение загружено в главное окно

 

Далее необходимо выполнить последовательную обработку этого изображения, нажав следующие кнопки: Find Areas, Binarization, Bug, Centering.

 

Пользователь увидит в PictureBox полученные и обработанные контуры, которые осталось распознать. Это можно сделать двумя способами: с помощью персептрона, нажав кнопку Full Answer или с помощью метода ближайшего соседа, нажав Next neighbor. Также персептрон можно предварительно обучить на основании эталонов, нажав Perseptron.



Результат работы приведен на рисунке 4.4.

 

 

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

 

Результат работы программы можно сбросить, нажав Reset и загрузить изображение чертежа снова.

 

ЗАКЛЮЧЕНИЕ

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

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

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



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

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

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

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

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

 

ЛИТЕРАТУРА

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

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

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

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

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

 

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

 


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

 


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

     
   
 
 



 


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

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

Приложение 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();

}

}

 

Приложение 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) {…}

}

 

Приложение 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())];

}

}

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.