Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Код програми розпізнавання образів за допомогою максимінного алгоритму



 

#include <iostream>

#include <math.h>

 

using namespace std;

 

struct point

{

float x;

float y;

int z;

};

float vids (point a, point b)

{

float len=0;

len=sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2));

return len;

}

 

int main ()

{

int n=10;

float k=0.5;

cout<<"T= "<<k<<endl;

cout<<"n= "<<n<<endl;

n--;

point mas[n];

 

mas[0].x=1.0; mas[0].y=1.0;

mas[1].x=1.0; mas[1].y=2.0;

mas[2].x=4.0; mas[2].y=5.0;

mas[3].x=4.0; mas[3].y=6.0;

mas[4].x=12.0; mas[4].y=13.0;

mas[5].x=12.0; mas[5].y=14.0;

mas[6].x=7.0; mas[6].y=8.0;

mas[7].x=6.0; mas[7].y=8.0;

mas[8].x=7.0; mas[8].y=5.0;

mas[9].x=0.0; mas[9].y=1.0;

 

 

for (int i=0; i<=n; i++) {

mas[i].z=0; }

 

 

cout<<"Array :"<<endl;

cout<<"[N] [x:y] [c]"<<endl;

for(int w=0; w<=n; w++)

cout<<"["<<w<<"] ["<<mas[w].x<<":"<<mas[w].y<<"] ["<<mas[w].z<<"]"<<endl;

 

 

int nclaster=1;//liculnuk klasteriv

int masclaster[n];//Masuv n of claster - pos in mas

masclaster[nclaster-1]=0;//

mas[0].z=nclaster;// vuburaemo 0 element centrom 1 klastera

float len[n][n];//mas len from center of claster[1] to point[2]

float lca=0; //

float amin[n];// mas of min d

float l=0;

int p=0;

int flag=2;//flag of end

while (flag)

{

for (int i=0; i<=n; i++) //miraemo vidstan vid centra clastera do tochok

{

if(mas[i].z!=0)

{

for(int j=0; j<=n; j++)

{

len[nclaster-1][j]=0;

if(mas[j].z==0)

{

len[nclaster-1][j]=vids(mas[i],mas[j]);

 

}

}

{

for(int j=0; j<=n;j++)

{

amin[j]=len[0][j]; //vids vi 0 clastera do j tochku

}

 

for(int j=0; j<=n; j++)

{

for (int k=0; k<=nclaster-1; k++)

{

if(amin[j]>len[k][j])

{

amin[j]=len[k][j];

}

}

}

l=amin[0];

p=0;

for (int j=0;j<=n; j++)

{

if(amin[j]>l)

{

l=amin[j];

p=j;

}

}

if (l<k*lca)

{

flag=0;

break;

}

//dodavannya novogo clastera

if(mas[p].z==0)

{

nclaster++;

lca=lca+l;

lca=lca/nclaster;

mas[p].z=nclaster;// bind of new claster

masclaster[nclaster-1]=p;

}

}

}

}

flag=0;

}

//Print clasters

cout<<"Clasters:"<<endl;

cout<<"[N] [x:y] [p]"<<endl;

for(int i=0;i<=n;i++)

{

if (mas[i].z!=0)

cout<<"["<<mas[i].z<<"] ["<<mas[i].x<<":"<<mas[i].y<<"] ["<<i<<"]"<<endl;

}

return 0;

}

 

Результат виконання:

 

Розпізнавання образів за допомогою алгоритму К-внутрішніх групових середніх, де K=3.

#include <iostream>

#include <math.h>

using namespace std;

 

struct point

{

float x;

float y;

int claster;

};

 

struct pointc

{

float x;

float y;

int count;

};

 

float vids (point a, pointc b)

{

float len=0;

len=sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2));

return len;

}

 

int main ()

{

int n=10;

int k=3;

k--;

cout<<"K= "<<k+1<<endl;

n--;

point mas[n];

for (int i=0; i<=n; i++)

{

mas[i].claster=-1;

mas[i].x=mas[i].y=0;

}

 

mas[0].x=1.0; mas[0].y=1.0;

mas[1].x=1.0; mas[1].y=2.0;

mas[2].x=4.0; mas[2].y=5.0;

mas[3].x=4.0; mas[3].y=6.0;

mas[4].x=12.0; mas[4].y=13.0;

mas[5].x=12.0; mas[5].y=14.0;

mas[6].x=7.0; mas[6].y=8.0;

mas[7].x=6.0; mas[7].y=8.0;

mas[8].x=7.0; mas[8].y=5.0;

mas[9].x=0.0; mas[9].y=1.0;

 

//Print array

cout<<"Array : "<<endl;

cout<<"[N] [x:y]\n"<<endl;

for(int i=0; i<=n; i++)

{

cout<<"["<<i<<"] ["<<mas[i].x<<":"<<mas[i].y<<"]"<<endl;

}

 

pointc masdold[k];

pointc masdnew[k];

for (int i=0; i<=k; i++)

{

masdold[i].x=mas[i].x;

masdold[i].y=mas[i].y;

masdold[i].count=0;

}

for (int i=0; i<=k; i++)

{

masdnew[i].x=-100;

masdnew[i].y=-100;

masdnew[i].count=0;

}

float maslen[n][k];

for (int i=0; i<=n; i++)

{

for (int j=0; j<=k; j++)

{

maslen[i][j]=0;

}

}

int flag=1;

while(flag!=0)

{

for (int i=0; i<=n; i++)

{

for (int j=0; j<=k; j++) //vidstan do sectoriv

{

maslen[i][j]=0;

maslen[i][j]=vids(mas[i],masdold[j]);

}

}

 

//Search min distanse

int minp=-1;

int minlen=1000;

 

for (int i=0; i<=n; i++)

{

minlen=1000;

minp=-1;

for (int j=0; j<=k; j++)

{

if (maslen[i][j]<minlen)

{

minlen=maslen[i][j];

minp=j;

}

}

mas[i].claster=minp;

masdold[minp].count++;

}

for (int i=0; i<=k; i++)

{

masdnew[i].x=-100; //

masdnew[i].y=-100; //

masdnew[i].count=0;

}

 

float serx=0;

float sery=0;

//cout<<"Find new centers of claster"<<endl;

for (int i=0; i<=k; i++)

{

serx=sery=0;

for (int j=0; j<=n; j++)

{

if (mas[j].claster==i)

{

serx+=mas[j].x;

sery+=mas[j].y;

}

}

serx/=masdold[i].count;

sery/=masdold[i].count;

masdnew[i].x=serx;

masdnew[i].y=sery;

serx=sery=0;

}

for (int i=0; i<=k; i++)

{

if ((masdold[i].x==masdnew[i].x) || (masdold[i].x==masdnew[i].x))

{

flag=0;

}

}

if (flag!=0)

{

for (int i=0; i<=k; i++)

{

masdold[i].x=masdnew[i].x;

masdold[i].y=masdnew[i].y;

masdold[i].count=0;

}

}

}

 

cout<<"Rezultat: "<<endl;

cout<<"[N] [x:y] [n]"<<endl;

for (int i=0; i<=n; i++)

{

cout<<"["<<i<<"] ["<<mas[i].x<<":"<<mas[i].y<<"] ["<<mas[i].claster<<"]"<<endl;

}

 

cout<<"Masdold = "<<endl;

cout<<"[N] [x:y] [np]"<<endl;

for (int i=0; i<=k; i++)

{

cout<<"["<<i<<"] ["<<masdold[i].x<<":"<<masdold[i].y<<"] ["<<masdold[i].count<<"]"<<endl;

}

return 0;

}

 

Результат виконання:

Висновок

Під час виконання розрахункової роботи, я ознайомилась із методами розпізнавання образів, такими як : 1) алгоритм порогової величини;

2) максимінного алгоритму;

3) алгоритм К-внутрішніх групових середніх.

Зокрема навчилась застосовувати їх на практиці при складанні програм.

 

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.