Курсовая работа: Интеллектуальная информационная система

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

for (inti = 0; i<images.Length; i++)

{

Text = string.Format("Загрузка {0} изображенияиз {1}", (i+1), images.Length);

//загрузкаоригинальногоизображения

imagesFromFolder[i] = newMyImage(newBitmap(images[i]));

//сохранениепервогопреобразования

imagesFromFolder[i].setFirstTransform(Transform.sobelTransform(newBitmap(images[i])));

//сохранениевторогопреобразования

imagesFromFolder[i].setSecondTransform(Transform.robertsTransform(newBitmap(images[i])));

//сохранениерезультата

imagesFromFolder[i].setResult(Transform.anotherWay(imagesFromFolder[i]));

//установка id

imagesFromFolder[i].setId(i);

if (imagesFromFolder[i].getDisp() > 1450)

{

badMas += imagesFromFolder[i].getMas();

}

else

{

goodMas += imagesFromFolder[i].getMas();

}

}

Text = "";

pictureBox1.Image = imagesFromFolder[0].getResult();

position = 0;

isLoad = true;

//d

label1.Text = string.Format("Диаметр: {0:0.####}", imagesFromFolder[0].getD());

//v

label2.Text = string.Format("Объем: {0:0.####}", imagesFromFolder[0].getV());

//mas

label3.Text = string.Format("Вес: {0:0.####}", imagesFromFolder[0].getMas());

//disp

label4.Text = string.Format("Дисперсия: {0:0000}", imagesFromFolder[0].getDisp());

//rotten

string rotten = imagesFromFolder[0].getDisp() > 1450 ? "Белый" :"Маслята";

label5.Text = string.Format(rotten.ToString());

///////////////////////////////////////////////////////

//ящики

badBox.Add(tdb.save_Box(2, badMas));

goodBox.Add(tdb.save_Box(1, goodMas));

//созданиеновойнакладной

idNa = tdb.save_Na(1, goodBox.Count);

//созданиеновогоакта

idAct = tdb.save_Act(2, badBox.Count);

//созданиезаписейЯщикиВнакладной

foreach (intidBoxingoodBox)

{

tdb.save_Box_in_Na(idNa, idBox);

}

foreach (intidBoxinbadBox)

{

tdb.save_Box_in_Act(idAct, idBox);

}

//передачанакладнойвформу

na = newNakladnaya(idNa, "Белыйгриб", "шт.", goodBox.Count, 150, 150 * goodMas * goodBox.Count, goodMas);

//передачаактавформу

act = newNakladnaya(idAct, "Маслята", "", badBox.Count, 40, 40 * badMas * badBox.Count, badMas);

this.images = imagesFromFolder;

}

//показать следующее изображение

privatevoidnext_Click(object sender, EventArgs e)

{

if (!isLoad)

return;

position++;

if (position >= images.Length)

position = 0;

pictureBox1.Image = images[position].getResult();

//d

label1.Text = string.Format("Диаметр: {0:0.####}", images[position].getD());

//v

label2.Text = string.Format("Объем: {0:0.####}", images[position].getV());

//mas

label3.Text = string.Format("Вес: {0:0.####}", images[position].getMas());

//disp

label4.Text = string.Format("Дисперсия: {0:0000}", images[position].getDisp());

//rotten

string rotten = images[position].getDisp() > 1450 ? "Белый" :"Маслята";

label5.Text = string.Format(rotten.ToString());

}

//показатьпредыдущееизображение

privatevoidprev_Click(object sender, EventArgs e)

{

if (!isLoad)

return;

if (position - 1 >= 0)

position--;

else

position = (byte) (images.Length - 1);

pictureBox1.Image = images[position].getResult();

//d

label1.Text = string.Format("Диаметр: {0:0.####}", images[position].getD());

//v

label2.Text = string.Format("Объем: {0:0.####}", images[position].getV());

//mas

label3.Text = string.Format("Вес: {0:0.####}", images[position].getMas());

//disp

label4.Text = string.Format("Дисперсия: {0:0000}", images[position].getDisp());

//rotten

string rotten = images[position].getDisp() > 1450 ? "Белый" :"Маслята";

label5.Text = string.Format(rotten.ToString());

}

//печатьнакладной

privatevoid button3_Click(object sender, EventArgs e)

{

if (!isLoad)

return;

Form2form2 = newForm2(na);

form2.Show();

}

//печатьакта

privatevoid button1_Click(object sender, EventArgs e)

{

if (!isLoad)

return;

Form3form3 = newForm3(act);

form3.Show();

}

privatevoid button4_Click(object sender, EventArgs e)

{

TestDBdbt = newTestDB();

//dbt.go2();

}

privatevoid label2_Click(object sender, EventArgs e)

{

}

}

}

using System;

usingSystem.Collections.Generic;

usingSystem.Drawing;

usingSystem.Drawing.Imaging;

usingSystem.Linq;

usingSystem.Runtime.InteropServices;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceKurceWork

{

classTransform

{

publicstaticBitmapsobelTransform(Bitmapsrc)

{

Bitmapbitmap = (Bitmap) src.Clone();

Color Pixel;

int R = 0;

int G = 0;

int B = 0;

//Создание массива массивов яркостей пикселей изображения по размеру высоты битовой матрицы

float[][] result = newfloat[bitmap.Height][];

//Сохранение яркости изображения в массиве

for (int y = 0; y <bitmap.Height; y++) //Для каждой строки

{

result[y] = newfloat[bitmap.Width];//Создание массивов по ширине битовой матрицы

for (int x = 0; x <bitmap.Width; x++) //Для каждого пикселя строки

{

Pixel = bitmap.GetPixel(x, y); //Определяем атрибут пикселя из битовой матрицы

result[y][x] = Pixel.GetBrightness();//Записываем яркость точки в массив

}

}

//Собель

int[,] gx = newint[,] {

{ -1, 0, 1 },

{ -2, 0, 2 },

{ -1, 0, 1 }

};

int[,] gy = newint[,] {

{ 1, 2, 1 },

{ 0, 0, 0 },

{ -1, -2, -1 }

};

floatnew_x = 0, new_y = 0;

floatrc;

for (int y = 1; y <bitmap.Height - 1; y++)

for (int x = 1; x <bitmap.Width - 1; x++)

{

new_x = 0;

new_y = 0;

rc = 0;

for (intwi = -1; wi< 2; wi++)

{

for (inthw = -1; hw< 2; hw++)

{

rc = result[y + wi][x + hw];

new_x += gx[hw + 1, wi + 1] * rc;

new_y += gy[hw + 1, wi + 1] * rc;

}

}

//1. Способ (он без порога, ограничение (255) только из-за того,

//что Color принимает на вход параметры от 0 до 255)

new_x *= 25;

new_y *= 25;

if (new_x * new_x + new_y * new_y> 255)

{

R = 255;

G = 255;

B = 255;

}

else

{

R = (int)((float)new_x * new_x + new_y * new_y);

G = (int)((float)new_x * new_x + new_y * new_y);

B = (int)((float)new_x * new_x + new_y * new_y);

}

Pixel = Color.FromArgb(0, R, G, B);

bitmap.SetPixel(x, y, Pixel);

}

//bitmap.Save("sobel.bmp"); //Сохраняем изображение в файле

return bitmap;

}

publicstaticBitmaprobertsTransform(Bitmapsrc)

{

Bitmapbitmap = (Bitmap)src.Clone();

Color Pixel;

int R = 0;

int G = 0;

intB = 0;

//Создание массива массивов яркостей пикселей изображения по размеру высоты битовой матрицы

float[][] result = newfloat[bitmap.Height][];

//Сохранение яркости изображения в массиве

for (int y = 0; y <bitmap.Height; y++) //Для каждой строки

{

result[y] = newfloat[bitmap.Width];//Создание массивов по ширине битовой матрицы

for (int x = 0; x <bitmap.Width; x++) //Для каждого пикселя строки

{

Pixel = bitmap.GetPixel(x, y); //Определяем атрибут пикселя из битовой матрицы

result[y][x] = Pixel.GetBrightness();//Записываем яркость точки в массив

}

}

//ЛБШ

floatroberts = 0;

float a = 0, b = 0;

for (int y = 1; y <bitmap.Height - 1; y++)

for (int x = 1; x <bitmap.Width - 1; x++)

{

a = 255 * (result[y][x] - result[y + 1][x + 1]);

b = 255 * (result[y][x + 1] - result[y + 1][x]);

roberts = (float)Math.Sqrt(a * a + b * b);

if (roberts> 255)

{

R = 255;

G = 255;

B = 255;

}

else

{

R = (int)(roberts);

G = (int)(roberts);

B = (int)(roberts);

}

Pixel = Color.FromArgb(0, R, G, B);

bitmap.SetPixel(x, y, Pixel);

}

//Сохраняем преобразованное изображение в файле

//bitmap.Save("roberts.bmp"); //Сохраняем изображение в файле

return bitmap;

}

publicstaticint[,] getDispers(Bitmapsrc)

{

Bitmapbitmap = (Bitmap)src.Clone();

float[][] result = newfloat[bitmap.Height][];//Созданиемассивамассивов result

Color Pixel;

for (int y = 0; y <bitmap.Height; y++) //Длякаждойстроки

{

result[y] = newfloat[bitmap.Width];//Создание массивов по ширине битовой матрицы

//Сохранение яркости точки в массиве

for (int x = 0; x <bitmap.Width; x++) //Для каждого пикселя строки

{

Pixel = bitmap.GetPixel(x, y); //Определяем атрибут пикселя из битовой матрицы

result[y][x] = Pixel.GetBrightness();//Записываем яркость точки в массив

}

}

int s = 5 / 2; //Ширина и высота полуокна

intleft = 0; //Левая граница окна

intfloor = 0; //Нижняя граница окна

intright = 0; //Правая граница окна

intceil = 0; //Верхняя граница окна

int k = 0;

int[,] M = newint[bitmap.Height - 10, bitmap.Width - 10];

int[,] D = newint[bitmap.Height - 10, bitmap.Width - 10];

for (int y = 5; y < bitmap.Height-10; y++)

for (int x = 5; x < bitmap.Width-10; x++)

{

k = 0;

//Вычисление границ окна особой точки

left = x - s; if (left < 5) left = 5;

right = x + s; if (right >= bitmap.Width-5) right = bitmap.Width - 5;

ceil = y - s; if (ceil < 5) ceil = 5;

floor = y + s; if (floor >= bitmap.Height-5) floor = bitmap.Height - 5;

//вычислениеМат. Ожидания

for (intyy = ceil; yy<= floor; yy++)

for (int xx = left; xx <= right; xx++)

{

//Console.WriteLine("M = {0}; res = {1};", M[i], result[y][x]);

M[y,x] = M[y,x] + (int)((float)255 * result[yy][xx]);

k++;

}

M[y,x] = (int)((float)M[y,x] / (float)k);

//ВычислениеДисперсии

for (intyy = ceil; yy<= floor; yy++)

for (int xx = left; xx <= right; xx++)

{

D[y,x] = D[y,x] + ((int)((float)255 * result[yy][xx]) * (int)((float)255 * result[yy][xx])) - (M[y,x] * M[y,x]);

}

D[y,x] = (int)((float)D[y,x] / (float)(k - 1));

}

return D;

}

publicstaticint[,] getMat(Bitmapsrc)

{

Bitmapbitmap = (Bitmap)src.Clone();

float[][] result = newfloat[bitmap.Height][];//Созданиемассивамассивов result

Color Pixel;

for (int y = 0; y <bitmap.Height; y++) //Длякаждойстроки

{

result[y] = newfloat[bitmap.Width];//Создание массивов по ширине битовой матрицы

//Сохранение яркости точки в массиве

for (int x = 0; x <bitmap.Width; x++) //Для каждого пикселя строки

{

Pixel = bitmap.GetPixel(x, y); //Определяем атрибут пикселя из битовой матрицы

result[y][x] = Pixel.GetBrightness();//Записываем яркость точки в массив

}

}

int s = 5 / 2; //Ширина и высота полуокна

intleft = 0; //Левая граница окна

intfloor = 0; //Нижняя граница окна

intright = 0; //Правая граница окна

intceil = 0; //Верхняя граница окна

int k = 0;

int[,] M = newint[bitmap.Height - 10, bitmap.Width-10];

for (int y = 5; y <bitmap.Height - 10; y++)

for (int x = 5; x <bitmap.Width - 10; x++)

{

//Вычисление границ окна особой точки

left = x - s; if (left< 5) left = 5;

right = x + s; if (right >= bitmap.Width - 5) right = bitmap.Width - 6;

ceil = y - s; if (ceil < 5) ceil = 5;

floor = y + s; if (floor >= bitmap.Height - 5) floor = bitmap.Height - 6;

k = 0;

//вычислениеМат. Ожидания

for (intyy = ceil; yy<= floor; yy++)

for (int xx = left; xx <= right; xx++)

{

//Console.WriteLine("x = {0}; y = {1}; xx = {2}; yy = {3}", x, y, xx, yy);

M[y,x] = M[y,x] + (int)((float)255 * result[yy][xx]);

k++;

}

M[y,x] = (int)((float)M[y,x] / (float)k);

}

return M;

}

publicstaticint[,] getModa(Bitmapsrc)

{

Bitmapbitmap = (Bitmap)src.Clone();

float[][] result = newfloat[bitmap.Height][];//Созданиемассивамассивов result

Color Pixel;

for (int y = 0; y <bitmap.Height; y++) //Длякаждойстроки

{

result[y] = newfloat[bitmap.Width];//Создание массивов по ширине битовой матрицы

//Сохранение яркости точки в массиве

for (int x = 0; x <bitmap.Width; x++) //Для каждого пикселя строки

{

Pixel = bitmap.GetPixel(x, y); //Определяем атрибут пикселя из битовой матрицы

result[y][x] = Pixel.GetBrightness();//Записываем яркость точки в массив

}

}

int s = 5 / 2; //Ширина и высота полуокна

intleft = 0; //Левая граница окна

intfloor = 0; //Нижняя граница окна

intright = 0; //Правая граница окна

intceil = 0; //Верхняя граница окна

//int k = 0;

//int[,] M = new int[bitmap.Height - 10, bitmap.Width - 10];

int[,] Moda = newint[bitmap.Height - 10, bitmap.Width - 10];

for (int y = 5; y <bitmap.Height - 10; y++)

for (int x = 5; x <bitmap.Width - 10; x++)

{

//Вычисление границ окна особой точки

left = x - s; if (left< 5) left = 5;

right = x + s; if (right >= bitmap.Width - 5) right = bitmap.Width - 5;

ceil = y - s; if (ceil < 5) ceil = 5;

floor = y + s; if (floor >= bitmap.Height - 5) floor = bitmap.Height - 5;

//мода

intkk = 0;

Dictionary<float, int>mapModa = newDictionary<float, int>();

for (intyy = ceil; yy<= floor; yy++)

for (int xx = left; xx <= right; xx++)

{

//мода

intfreq = 0;

if (mapModa.ContainsKey((float)255 * result[yy][xx]))

{

freq = mapModa[(float)255 * result[yy][xx]];

mapModa[(float)255 * result[yy][xx]] = freq + 1;

}

else

{

mapModa.Add((float)255 * result[yy][xx], 1);

}

kk++;

}

//Мода

intmo = 0;

foreach (KeyValuePair<float, int>modainmapModa)

{

if (moda.Value>mo)

{

Moda[y,x] = (int)moda.Key;

mo = moda.Value;

}

}

}

returnModa;

}

publicstaticBitmap calculate(MyImage image)

{

//загрузкаизображений

Bitmapsrc = image.getSrc();

BitmapfirstT = image.getFirstTransform();

BitmapsecondT = image.getSecondTransform();

//загружканужныхпреобразований

float[,] x1 = normalization( getMat(firstT) );

float[,] x2 = normalization(getDispers(firstT));

float[,] x3 = normalization(getModa(firstT));

float[,] polynom = newfloat[src.Height, src.Width];

float a00 = -0.01f;

float a01 = 1.7f;

float a02 = -0.3f;

float a03 = 0.25f;

/*

float a00 = -0.01f;

float a01 = 1.7f;

float a02 = -0.3f;

float a03 = 0.25f;

*/

for (int y = 5; y < src.Height-10; y++)

for (int x = 5; x < src.Width-10; x++)

{

polynom[y,x] = a00 + a01 * x1[y,x] + a02 * x2[y,x] + a03 * x3[y,x];

polynom[y,x] = polynom[y,x] > 0.2f? 1f:0f;

}

Color pixel;

Bitmap res = (Bitmap) src.Clone();

for (int y = 0; y <src.Height; y++)

for (int x = 0; x <src.Width; x++)

{

if (polynom[y, x] == 1f)

{

pixel = Color.Black;

}

else

pixel = src.GetPixel(x, y);

res.SetPixel(x, y, pixel);

}

res.Save("counter.bmp");

return res;

}

publicstaticBitmapanotherWay(MyImage image)

{

//загрузкаизображений

Bitmapsrc = image.getSrc();

BitmapfirstT = image.getFirstTransform();

BitmapsecondT = image.getSecondTransform();

//загружканужныхпреобразований

float[,] x1 = normalization(getMat(firstT));

float[,] x2 = normalization(getDispers(firstT));

float[,] x3 = normalization(getModa(firstT));

//db

TestDBtdb = newTestDB();

//запись в бдПризнаков_Изображения

/*for(int y = 0; y < src.Height-10; y++)

for (int x = 0; x < src.Width-10; x++)

{

tdb.save_PriznakiIzobr(image.getId(), x, y, 0, x1[y,x]);

}*/

//загрузитькоэфыполиномаизбд

List<float> poly = tdb.get_Poly();

float[,] polynom = newfloat[src.Height, src.Width];

float a00 = poly[0];

float a01 = poly[1];

float a02 = poly[2];

float a03 = poly[3];

float a04 = poly[4];

float a05 = poly[5];

float a06 = poly[6];

float a07 = poly[7];

float a08 = poly[8];

float a09 = poly[9];

for (int y = 5; y <src.Height - 10; y++)

for (int x = 5; x <src.Width - 10; x++)

{

//polynom[y, x] = a00 + a01 * x1[y, x] + a02 * x2[y, x] + a03 * x3[y, x];

polynom[y, x] = a00 + a01 * x1[y, x] + a02 * x2[y, x] + a03 * x3[y, x] + a04 * x1[y, x] * x1[y, x] + a05 * x1[y, x] * x2[y, x] + a06 * x1[y, x] * x3[y, x] + a07 * x2[y, x] * x2[y, x] + a08 * x2[y, x] * x3[y, x] + a09 * x3[y, x] * x3[y, x];

polynom[y, x] = polynom[y, x] > 0.5f ? 1f : 0f;

//db

tdb.save_VybVhD(image.getId(), x, y, polynom[y,x]);

//tdb.save_PrResh(0, 1, 2, polynom[y, x]);

}

//left + rigth side

Color pixel;

Bitmap res = (Bitmap)src.Clone();

Bitmapdest = (Bitmap)src.Clone();

int lx = 500, rx = 0;

#regionmark_border

for (int y = 0; y <src.Height; y++)

{

//left

for (int x = 0; x <src.Width; x++)

{

if (polynom[y, x] == 1f)

{

pixel = Color.Black;

res.SetPixel(x, y, pixel);

if (x < lx) lx = x;

break;

}

else

{

pixel = Color.Blue;

dest.SetPixel(x, y, pixel);

}

}

//right

for (int x = src.Width-1; x > 0 ; x--)

{

if (polynom[y, x] == 1f)

{

pixel = Color.Black;

res.SetPixel(x, y, pixel);

if (x >rx) rx = x;

break;

}

else

{

pixel = Color.Blue;

dest.SetPixel(x, y, pixel);

Источник: https://otherreferats.allbest.ru/download/1093237/