Мои программы
]ПРОГРАММА «2-Опознание»
]
ОГЛАВЛЕНИЕ
1. Исследование опознания
2. Исходные данные
3 Цель программы
4. Алгоритм
5.Вывод
6. Итоги
7. Скачать программу
]Приложение 1
Распечатка программы «2-Опознание»
1. Исследование опознания
Исследование опознания можно разделить на три этапа.
Этап 1.
Задаются объекты опознания.
Этап 2
Задаются условия опознания.
Этап 3
Задается алгоритм опознания.
2. Исходные данные.
Пример
Const
a=1000; //размер матрицы объектов
b=30;//число объектов
c=12;// номер объекта для вывода
d=2;//задание вероятности
x1=1;//координата1 окнаопознавания
y1=1;// координата 1 окнаопознавания
x2=150;//координата2опознавания
y2=150;// координата 2 окна опознавания
h=5;//суперцикл
3. Цель программы
Программа ««2-Опознание» развитие программы«1-Опознание».
По программе«1-Опознание» в процессе опознания определяется центры объектов в окне опознания.
По программе «2-Опознание»собирается статистика нахождения, хотя бы одного центра объекта
в окне опознания.
4. Алгоритм
4.1.Находятся центры объектов на исходной матрице.
w:array [1..3, 1..b] ofcardinal;//1, 2 координаты центров объектов
// объектов опознания, 3 – число элементов объекта опознания
4.2. Находятся элементы объектов.
Вероятность элемента объекта определяется расстоянием от центра объекта.
Чем больше расстояние, тем меньше вероятность появления элемента объекта.
Расстояние находится в прямоугольнойметрике.
s:array [1..a,1..a,1..b] ofcardinal;// матрицаразмещения элементов
//объектов на матрице
4.3. Вычисляются матрицы
u: array [1..b] of variant;//частное суммы элементов объекта в окне опознания
//к сумме элементов всех объектов
u1: array [1..b] of variant;// частное суммы элементов объекта в окне опознания
//к сумме элементовобъекта
4.4. Находится максимальный элемент множества u –z1, объект –z2.
Находится максимальный элемент множества u1 –z3, объект –z4.
4.5. Находится второй по величине максимальный элемент множества u –z5, объект –z6.
Находится второй по величине максимальный элемент множества u1 –z7, объект –z8.
4.6. Расчёты по 4.1 – 4.5 проводятся h раз – суперцикл.
Вычисляются:
Z9 – число нахождений, хотя бы одного центра объекта
в окне опознания за суперцикл.
n – частное от деления z9 на h.
Массив u2[1..h] – элемент u2 равен 1, при нахождения на шаге i суперцикла, хотя бы одного центра объекта в окне опознания, и -0 в противном случае.
6. Итоги
Как показали расчёты, центр объекта z1 часто, но не всегда, лежит в окне опознания.
Можно выявить соответствие размера окна опознания и z10.
7. Вывод
Выводятся все массивы введенные вышеи z1, z2, z3, z4, z5, z6, z7, z8, z9, z10.
Массив s[1..a,1..a,1..b] выводится при значениях s[1..a,1..a,z4] и s[1..a,1..a,z8].
Элемент матрицы s[1..a,1..a,z4] * s[1..a,1..a,z8]
7. Скачать программу
https://disk.yandex.ru/d/lwAc9bq2Lkohrg
Приложение 1
Распечатка программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label4: TLabel;
StringGrid1: TStringGrid;
StringGrid4: TStringGrid;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
a=1000; //размер матрицы объектов
b=30;//число объектов
c=12;// номер объекта для вывода
d=2;//задание вероятности
x1=1;//координата1 окнаопознания
y1=1;// координата 1 окнаопознания
x2=150;//координата2опознания
y2=150;// координата 2 окна
h=5;//суперцикл
var
Tick: Cardinal;
w:array [1..3, 1..b] ofcardinal;//1, 2 координаты центров объектов
// объектов опознания
//3 число элементов объекта
s:array [1..a,1..a,1..b] ofcardinal;// матрицаразмещения элементов
//объектов на матрице
p:array [1..b] ofcardinal;// сумма элементовдля каждого объекта
// в окне опознания
u: array [1..b] of variant;//частное суммы элементов объекта в окне опознания
//к сумме элементов всех объектов
u1: array [1..b] of variant;//частное сумме элементов объекта в окне опознания
u2: array [1..h] of cardinal;//1 центр объекта в окне опознания, 0 - вне окна
i,j,q ,z,r,i1,i2,i3,j1,tt,t,g ,k, v,y:integer;
n1, n2, n3,n4: integer;//
m1,m2,m3,m4,m5: integer;//
f, f1,f2,f3,f4,f5,z2,z4,z6,z8,z9 : integer;//
z1,z3,z5,z7 : real;
n: variant;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
for q:=1 to 5// нумерация по вертикалив табл №1 ,
doStringGrid1.Cells[0,q]:=IntToStr(q) ;
for q:=1 to b //нумерация по горизонтали в табл №1 ,
doStringGrid1.Cells[q,0]:=IntToStr(q);
for q:= 1 to a// нумерация по вертикалив табл №2 ,
do StringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to a //ну2мерация по горизонтали в табл №2 ,
doStringGrid2.Cells[q,0]:=IntToStr(q);
for q:= 1 to 10// нумерация по вертикалив табл №1 ,
doStringGrid3.Cells[0,q]:=IntToStr(q);
for q:=1 to 500//нумерация по горизонтали в табл №1 ,
doStringGrid3.Cells[q,0]:=IntToStr(q);
StringGrid1.Cells[0,0] := 'w[ ]';
StringGrid2.Cells[0,0] := 's[ ]';
StringGrid3.Cells[0,1] := 'p[ ]';
StringGrid3.Cells[0,2] := 'u[ ]';
StringGrid3.Cells[0,3] := 'u1[ ]';
StringGrid3.Cells[0,4] := 'u2[ ]';
////////////////// Генерация объектов
forf:=1 to h do//Суперрцикл
begin //f
for i:=1 to b do
begin
p :=0;
u :=0;
u1 := 0;
end;
for i:=1 to 3 do
for j:=1 to b do
w[i,j] :=0;
for i1:=1 to a do
for i2:=1 to a do
for i3:=1 to b do
s[i1,i2,i3] :=0;
z1:=0; z2:=0; z3:=0; z4:=0;
z5:=0; z6:=0; z7:=0; z8:=0;
for r:= 1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
n1:=0; n2:=0;
begin
n1:= random(a)+1;
n2:= random(a)+1;
w[1,r] := n1;
w[2,r] := n2;
end;
for i:=1 to a do
for j:=1 to a do
if ((random (((abs(n1-i)+abs(n2-j)))+1)*3) <=d )
then s[i,j,r] :=r;
end;
fort:=1 to b do
for i:=1 to a do
for j:=1 to a do
if s[i,j,t] >0then
w[3,t] :=w[3,t]+1;
//// Опознавание объъектов
for g:=1 to bdo
for i:=y1 to y2 do
for j:=x1 to x2 do
if s[i,j,g] >0thenbegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
p[g] :=p[g] +1;
z:=z+1;
end;
for i:=1 to b do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
u := 100*p /z;
u := 100*p /z;
u1 := 1000* p/w[3,i];
end;
//Опознание центров z2 и z4в окне опознанпия
for i:=1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
ifu > z1 then begin z1:= u; z2:=i;end;
ifu1 > z3 then begin z3:= u1; z4:=i;end;
end;
//Опознание центров z6 и z8в окне опознанпия
for i:=1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if i<>z2 then ifu > z5 then begin z5:= u; z6:=i;end;
if i<>z4 then ifu1 > z7 then begin z7:= u1; z8:=i;end;
end;
if ( ((w[1,z4]>=x1) and(w[1,z4]<=x2)) and
((w[2,z4]>=y1) and(w[2,z4]<=y2)) )
thenbegin z9 := z9+1; u2[f] :=1;end;
end;//f
N:= z9/h;
////Вывод
for i:=1 to bdobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid1.Cells[i,1]:= IntToStr(w[1,i]);
StringGrid1.Cells[i,2]:= IntToStr(w[2,i]);
StringGrid1.Cells[i,3]:= IntToStr(w[3,i]);
end;
for I:=1 to a do
for J:=1 to ado
StringGrid2.Cells[j,i]:= IntToStr(s[i,j,z4])+' * '+IntToStr(s[i,j,z8]);
for j:=1 to b do
StringGrid3.Cells[j,1]:= IntToStr(p[j]) ;
fori:=1 to b dobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid3.Cells[i,2]:=FormatFloat('0.00',u);
StringGrid3.Cells[i,3]:=FormatFloat('0.00',u1);
end;
fori3:=1 to h dobegin
StringGrid3.Cells[i3,4]:=IntToStr(u2[i3])
end;
Edit1.Text :=
'n1=' +''+ IntToStr(n1)+''+ 'n2=' +''+ IntToStr(n2)
+''+ 'z=' +''+ IntToStr(z)
+''+ 'z1=' +''+ FormatFloat('0.00',z1) +''+ 'z2=' +''+ IntToStr(z2)
+''+ 'z3=' +''+ FormatFloat('0.00',z3) +''+ 'z4=' +''+ IntToStr(z4)
+''+ 'z5=' +''+ FormatFloat('0.00',z5) +''+ 'z6=' +''+ IntToStr(z6)
+''+ 'z7=' +''+ FormatFloat('0.00',z7) +''+ 'z8=' +''+ IntToStr(z8);
Edit2.Text :=
'z9=' +''+ IntToStr(z9)
+''+ 'n=' +''+ FormatFloat('0.00',n)
+''+ 'n=' +''+'u2[h]=' +''+ IntToStr(u2[h])
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.