Скачиваний:
91
Добавлен:
01.05.2014
Размер:
87.55 Кб
Скачать

. Нечеткое признаковое описание

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

Сначала выделяются локальные признаки контура изображения. Для этого осуществляется его деление на короткие отрезки определенной длины, и находятся углы между смежными отрезками Bi. Затем определяются разности DBi между данными углами и углом в 180 градусов. Если разность положительная, то Bi - выпуклый, если отрицательная, то Bi - вогнутый.

Деление контура на короткие отрезки производится следующим образом. Находится «центр тяжести» изображения, из него с угловым шагом D проводятся радиус-векторы до края изображения (рис. 5.2). Измеряется длина каждого радиус-вектора и по измеренным длинам определяются углы между смежными отрезками Bi в соответствии с определенной формулой (формула приводится ниже при описании алгоритма).

Центр Угол Bi

тяжести между смежными

изображения отрезками

Рис. 5.2

Далее смежные участки классифицируются по трем эталонным образцам: ЛИНИЯ, КРИВАЯ и УГОЛ. Эта процедура заключается в сопоставлении вычисленного значения разности углов с функцией принадлежности m(DBi) (рис.5.3).

ЛИНИЯ КРИВАЯ УГОЛ

m(DBi),

у.е.

1

0 6 18 30 DBi, градусы

Рис. 5.3

Получив локальные признаки контура (например, Табл. 5.1), делают заключение о макропризнаках всей формы.

Таблица 5.1

Участок

ЛИНИЯ

КРИВАЯ

УГОЛ

Выпуклость-1

Вогнутость -0

1

0.7

0.2

0

1

i

.....

....

....

....

n

0

0.5

0.5

0

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

Как следует из рис. 5.4, любой фрагмент фигуры можно представить с помощью двух треугольников.

B[i+1]

G[i]

R[i+1]

D R[i] A[i]

O B[i]

центр D G[i-1]

тяжести

фигуры

R[i-1] A[i-1]

B[i-1]

Рис. 5.4

D-Дискрет по углу.

Массив значений R[i]- Величины радиус-векторов.

Массив значений A[i]- Величины прилежащих углов.

Массив значений G[i]- Величины противолежащих углов.

Массив значений B[i]- Величины внешних углов фигуры.

Первоначально известны только величины D и значения радиус-векторов R[i]. Необходимо найти значения внешних углов фигуры B[i].

Значения В[i] можно определить из формулы B[i]=360-A[i]-G[i-1], следовательно, необходимо найти значения прилежащих и противолежащих углов. Однако, следует учесть, что в языке Pascal не существует функций ArcCos и ArcSin, а имеется только функция ArcTan. Поэтому наиболее приемлемым будет приводимый ниже вариант алгоритма.

Необходимое дополнение: Для оптимизации программы алгоритма необходимо расширить массив значений радиус-векторов. R[n+1]=R[1].

Нахождение значений углов A[i]

R[i+1] R[i+1]

H[i] H[i]

D A[i] D A[i]

O O

R[i] K[i] R[i] K[i]

Рис. 5.5 Рис. 5.6

Значение высоты H[i] находится по формуле:

Н[i]=R[i+1]*Sin(D).

На радиус-векторе R[i] образовался отрезок K[i],величина которого вычисляется следующим образом:

K[i]=R[i]-R[i+1]*Cos(D);

K[i] может быть как положительной (рис. 5.5), так и отрицательной (рис. 5.6) величиной.

Из формул прямоугольного треугольника можно найти тангенс угла A[i]:

Tg(Ap[i])= H[i]/K[i] = R[i+1]*Sin(D)/(R[i]-R[i+1]*Cos(D))

В том случае, если K[i] отрицательное, то и тангенс будет отрицательным. Это не страшно, так как можно применить тригонометрическое соотношение:

Tg(180-a)=-Tg(a);

Этот случай соответствует тупоугольному треугольнику (рис. 5.6).

Можно составить блок-схему данного фрагмента алгоритма.

Начало

Организуем цикл вычисления A[i]

i:=1;

K[i]:=R[i]-R[i+1]*Cos(D);

A[i]:=ArcTan(ABS(R[i+1]*Sin(D)/K[i]));

A[i]:=A[i]*180/Pi;

Нет

K[i]<0

Да

A[i]:=180-A[i];

Нет

INC(i) i>=N

Да

Конец

Нахождение значений углов G[i].

Из формулы треугольника G[i]=180-A[i]-D, легко включается в уже рассмотренный цикл.

Начало

Организуем цикл вычисления A[i] и G[i]

i:=1;

K[i]:=R[i]-R[i+1]*Cos(D);

A[i]:=ArcTan(ABS(R[i+1]*Sin(D)/K[i]));

A[i]:=A[i]*180/Pi;

Нет

K[i]<0

Да

A[i]:=180-A[i];

G[i]:=180-A[i]-D

Нет

INC(i) i>=N

Да

Конец

Необходимое дополнение: Для оптимизации программы алгоритма необходимо расширить массив значений углов G[i] G[0]=G[n];

Можно определить величины B[i]

Начало

i:=1

B[i]:=360-A[i]-G[i-1]

Нет

INC(i) i>=N

Да

Конец

Определяем: Выпуклый или вогнутый участок контура

B[i]>180 -участок контура выпуклый Pr_v[i]=1;

B[i]<180 -участок контура вогнутый Pr_v[i]=0;

Начало

i:=1

B[i]:=360-A[i]-G[i-1]

Да Нет

B[i]>=180

Pr_v[i]:=1 Pr_v[i]:=0;

Нет

INC(i) i>=N

Да

Конец

Находим разности углов B[i]-180.(По модулю)

Delta_B[i]=ABS(B[i]-180);

Необходимое дополнение Расширить массив B[i] B[N+1]:=B[1];

Начало

i:=1

Delta_B[i]:=ABS(B[i]-180);

Нет Да

INC(i) i>=N Конец

Классификация участков по трем эталонным образцам. Процедура заключается в сопоставлении вычисленной разности углов с функцией принадлежности.

Функция ЛИНИИ

У.е.

1

0

0 6 18 Разность углов, градусы

if Delta_B[i]<=6 Then FL[i]:=1;

if (Delta_B[i]>6)and(Delta_B[i]<18) then FL[i]:=1.5-Delta_B[i]/12;

if Delta_B[i]>=18 Then FL[i]:=0;

Функция УГЛА

У.е.

1

0

0 18 30 Разность углов, градусы

if Delta_B[i]<=18 Then FU[i]:=0;

if (Delta_B[i]>18)and(Delta_B[i]<30) then FU[i]:=Delta_B[i]/12-1.5;

if Delta_B[i]>=30 Then FU[i]:=1;

Функция КРИВОЙ

У.е.

1

0

0 6 18 30 Разность углов, градусы

if (Delta_B[i]<=6)or(Delta_B[i]>=30) Then FK[i]:=0;

if (Delta_B[i]>6)and(Delta_B[i]<=18) then FK[i]:=Delta_B[i]/12-0.5;

if (Delta_B[i]>18)and(Delta_B[i]<30) then FK[i]:=2.5-Delta_B[i]/12;

Все приведенные выше условия можно свести к следующим:

For i:=1 to N do begin

if (Delta_B[i]<=6) Then begin FL[i]:=1;FU[i]:=0;FK[i]:=0; end;

if (Delta_B[i]>6)and(Delta_B[i]<=18) then begin FL[i]:=1.5-Delta_B[i]/12;

FU[i]:=0;

FK[i]:=Delta_B[i]/12-0.5;end;

if (Delta_B[i]>18)and(Delta_B[i]<=30) then begin FL[i]:=0;

FU[i]:=Delta_b[i]/12-1,5;

FK[i]:=2.5-Delta_B[i]/12;end;

if (Delta_B[i]>30) Then begin FL[i]:=0;FU[i]:=1;FK[i]:=0;end;

end;

Далее строится таблица следующего содержания

Участок

Функция Линии

Функция Кривой

Функция Угла

Выпукл/Вогнут

1

FL[1]

FK[1]

FU[1]

Pr_v[1]

i

FL[i]

FK[i]

FU[i]

Pr_v[i]

N

FL[n]

FK[n]

FU[n]

Pr_v[n]

Сумма

значений SFL

Сумма

Значений SFK

Сумма

значений SFU

Сумма

значений SPr_v

и находятся характеристики:

Доля линий: D_L=100%*SFL/(SFL+SFK)

Доля кривых: D_K=100-D_L;

Количество выпуклых углов и доля выпуклости определяется следующим образом:

U1:=0; Z1:=0;

For i:=1 to N do if Pr_v[i]=1 tnen begin U1:=U1+FU[i]; INC(Z1); end;

Z1:=Z1/N*100%

Аналогично - вогнутые углы и доля вогнутости:

U0:=0; Z0:=0;

For i:=1 to N do if Pr_v[i]=0 tnen begin U0:=U0+FU[i]; INC(Z0); end;

Z0:=Z0/N*100%

Соседние файлы в папке LECTURE12