МIНIСТЕРСТВО ОСВIТИ І НАУКИ УКРАЇНИ
Національний унiверситет "Львiвська полiтехнiка"
Кафедра САПР
ЗВІТ
до лабораторної роботи № 7
на тему:
ДОСЛІДЖЕННЯ АЛГОРИТМІВ РОЗПІЗНАВАННЯ ОБРАЗІВ.АЛГОРИТМ МАКСИМIННОЇ ВIДСТАНI
Виконав:
Гр. КН-214
Перевірив:
Денисюк П. Ю.
Львiв 2007
1. Мета роботи
Вивчити принципи роботи максимінного алгоритму розпізнавання образів.
2. Короткі теоретичні відомості
Максимінний алгоритм розпізнавання образів
Алгоритм використовує евклiдову вiдстань. Алгоритм, у принципi, аналогiчний схемi евристичного алгоритму порогової величини, за виключенням тiєї обставини, що, в першу чергу, вин виявляє найвiддаленiшi кластори. Один з об'єктiв (X1) довiльним чином назначається центром першого кластера. Потiм вiдшукується образ, розмiщений вiд образа X1 найдалi, який призначається центром кластера Z2. На третьому кроцi алгоритму здiйснюється обчислення вiдстаней мiж всiма iншими образами вибiрки i центрами кластерiв Z1 i Z2. В кожнiй парi цих вибірок вибирається мiнiмальне. Пiсля цього видiляється максимальне з цих мiнiмальних вiдстаней. Якщо останнє складає значну частину вiдстанi мiж кластерами Z1 i Z2 (половина цiєї вiдстанi), вiдповiдний образ призначається центром кластера Z3. Iнакше - виконання алгоритму припиняється.
В загальному випадку описана процедура повторюється до тих пiр, поки на якомусь кроцi не буде отримане максимальне значення вiдстанi, для якої умова, що викликає видiлення кластера, не виконується.
(
1. Z1=X1
2. Обчислити Di1
3. Вибрати Ki(1)=max{Di1} ( i(1 ; L1=Ki(1)
(
4. Z2=Xi
5. Обчислити Di1, Di2 ( i(1,2
6. Обчислити Ai=min{Di1,Di2} ( i(1,2
7. Обчислити Ki(2)=max{Ai} ( i(1,2 ; L2=Ki(2)
(
8. Якщо L2>0.5L1, тодi Z3=Xi. Iнакше - STOP.
9. Визначити середню арифметичну величину попереднiх максимальних
вiдстаней:
Lc.a.=(L1+L2)/2
10. Обчислити Di1, Di2, Di3 ( i(1,2,3
11. Обчислити Ai=min{Di1, Di2, Di3}
12. Обчислити Ki(3)=max{Ai} ; L3=Ki(3)
(
13. Якщо Li>0.5La.c., тодi Z4=Xi. Iнакше - STOP.
14. Обчислити Lc.a.=(L1+L2+L3)/3
3. Текст програми
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#define n 10
struct point
{
int x,y;
};
float get_distance(int,int);
void maxmin(int);
void show(void);
void initialization(void);
point points[n];
float len[n];
void main (void)
{
clrscr();
printf("\n Enter points\n");
for (int i=0;i<n;i++)
{
scanf(" %d",&points[i].x);
scanf(" %d",&points[i].y);
};
initialization();
maxmin(0);
show();
getch();
}
float get_distance(int i, int j)
{
return sqrt((points[i].x-points[j].x)*(points[i].x-points[j].x)+(points[i].y-points[j].y)*(points[i].y-points[j].y));
}
void maxmin(int i)
{
for (int j=0;j<n;j++)
if (get_distance(i,j)<len[j])
len[j]=get_distance(i,j);
int index;
float lmax=0;
for (j=0;j<n;j++)
if(lmax<len[j])
{lmax=len[j]; index=j;};
static float lmiddle=lmax;
static int counter=-1;
if (counter>0) lmiddle/=counter;
if(lmax<0.5*(lmiddle)) return;
else
{ if((counter>0) || (!counter)) lmiddle+=lmax; counter++; maxmin(index);};
}
void show(void)
{
printf("\n Centers of clusters");
for (int i=0;i<n;i++)
if (!len[i])
printf("\n ( %d : %d ) ",points[i].x,points[i].y,len[i]);
}
void initialization(void)
{
for (int i=0;i<n;i++)
len[i]=80;
}
4. Висновок
Виконавши лабораторну роботу, я вивчив принципи роботи максимінного алгоритму розпізнавання образів.