Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchyot_chistovik.doc
Скачиваний:
10
Добавлен:
27.03.2015
Размер:
2.06 Mб
Скачать

Литература

    1. Физический энциклопедический словарь / Гл. ред. А.М. Прохоров.- М.: Изд-во. "Советская энциклопедия", 1983.

    2. Бакиров Т.С., Генералов В.М., Топорков В.С. Измерение вязкоупругих характеристик клетки с помощью неоднородного переменного электрического поля. // Биотехнология. - 1998. – N5. – С.88-96.

    3. Гасс Г.В., Марголис Л.Б., Черномордик Л.В. Локальные деформации мембран эритроцитов в переменном электрическом поле // Биологические мембраны.- 1990.- Т.7, N.6.- C.547-659.

    4. Генералов В.М., Бакиров Т.С., Дурыманов А.Г., Медведев А.А., Порываев В.Д., Топорков В.С., Тюников Г.И., Сергеев А.Н., Петрищенко В. И., Шишкина Л.Н., Фефелов О.В. Исследование вирус-клеточного взаимодействия методом диэлектрофореза. Доклады академии наук. 2002. Т.383. № 2. С. 256-259.

    5. Кручинина MB., Курилович С.А., Паруликова М.В., Бакиров Т.С., Генералов В.М., Пак А.В., Звольский И.Л. Электрические и вязкоупругие свойства эритроцитов пациентов с диффузной патологией печени. Доклады академии наук 2005 т.401 N 5 С. 701-704.

    6. Кручинина М.В., Курилович С.А., Громов А.А., Бакиров Т.С., Генералов В.М., Пак А.В. Электрические и вязкоупругие свойства клеток крови у больных с алкогольным поражением сердца и ишемической болезнью сердца. Материалы 1-й Междисциплинарного научный конгресса "Человек и алкоголь-2007". – С.-Петербург. – 2007. – С.101-102.

Приложение. Листинг программы, работа над кодом которой проводилась в ходе производственной практики.

// cellpaint.cpp : Defines the entry point for the application.

#include "stdafx.h"

#include "resource.h"

#include <math.h>

#define MAX_LOADSTRING 100

#define iSizeBitmapx 21 //ширина шаблона клетки

#define iSizeBitmapy 21 //высота шаблона клетки

#define CoeffCorr 5000 //

#define MaxRadofCell 8 //максимальный радиус круглого шаблона клетки (для овального - максимальный размер по вертикали)

#define MinRadofCell 6 //минимальный радиус -//-

#define MaxnCadres 2000 //максимальное количество кадров, которое будет обработано (если кадров меньше, обработаются все, начиная со стартового кадра)

#define DelColor 24 //минимальная разность в цвете между светлой и темной областью. Если разность меньше, то считается, что в данной точке нет клетки сходной с данным шаблоном

#define DColor 1.3 //минимальное отношение цветов -//-

#define StartCadr 1 //номер стартового кадра

#define NumberofCadres 50//число кадров, которое будет обработано

#define StartpixX1 100 //координаты прямоугольника, в котором ищутся клетки

#define StartpixX2 500 //

#define StartpixY1 50 //

#define StartpixY2 560 //

#define Okrest 4 //размер квадрата окрестности, в котором ищется данная клетка на следующем кадре

#define PI 3.14159265358979323846 //пи и в Африке пи

#define NumberOfShablone 2 //количество шаблонов (шаблоны отличаются разной степенью эллиптичности)

#define MinObjem 10 //минимальный объем клетки (в пикселах)

#define NumOfUgol 2 //количество поворотов шаблона на определенный угол

// открываемый файл

//char OPEN_FILE[]="59_07.avi";

//char OPEN_FILE[]="f:\\Data\\362\\362_500kHz_1.avi";

char OPEN_FILE[]="239_1000kHz_1.avi";

//Следующие две функции по созданию бмп-файла взяты из MSDN

//вроде работает, но почему-то не всегда.

PBITMAPINFO CreateBitmapInfoStruct(HWND hwnd, HBITMAP hBmp)

{

BITMAP bmp;

PBITMAPINFO pbmi;

WORD cClrBits;

if (!GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp))

MessageBox (hwnd,"error","GetObject",MB_OK);

cClrBits = (WORD)(bmp.bmPlanes * bmp.bmBitsPixel);

if (cClrBits == 1)

cClrBits = 1;

else if (cClrBits <= 4)

cClrBits = 4;

else if (cClrBits <= 8)

cClrBits = 8;

else if (cClrBits <= 16)

cClrBits = 16;

else if (cClrBits <= 24)

cClrBits = 24;

else cClrBits = 32;

if (cClrBits != 24)

pbmi = (PBITMAPINFO) LocalAlloc(LPTR,

sizeof(BITMAPINFOHEADER) +

sizeof(RGBQUAD) * (1<< cClrBits));

else

pbmi = (PBITMAPINFO) LocalAlloc(LPTR,

sizeof(BITMAPINFOHEADER));

pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

pbmi->bmiHeader.biWidth = bmp.bmWidth;

pbmi->bmiHeader.biHeight = bmp.bmHeight;

pbmi->bmiHeader.biPlanes = bmp.bmPlanes;

pbmi->bmiHeader.biBitCount = bmp.bmBitsPixel;

if (cClrBits < 24)

pbmi->bmiHeader.biClrUsed = (1<<cClrBits);

pbmi->bmiHeader.biCompression = BI_RGB;

pbmi->bmiHeader.biSizeImage = ((pbmi->bmiHeader.biWidth * cClrBits +31) & ~31) /8

* pbmi->bmiHeader.biHeight;

pbmi->bmiHeader.biClrImportant = 0;

return pbmi;

}

void CreateBMPFile(HWND hwnd, LPTSTR pszFile, PBITMAPINFO pbi,

HBITMAP hBMP, HDC hDC)

{

HANDLE hf; // file handle

BITMAPFILEHEADER hdr; // bitmap file-header

PBITMAPINFOHEADER pbih; // bitmap info-header

LPBYTE lpBits; // memory pointer

DWORD dwTotal; // total count of bytes

DWORD cb; // incremental count of bytes

BYTE *hp; // byte pointer

DWORD dwTmp;

pbih = (PBITMAPINFOHEADER) pbi;

lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);

if (!lpBits)

MessageBox (hwnd,"error","GlobalAlloc",MB_OK);

if (!GetDIBits(hDC, hBMP, 0, (WORD) pbih->biHeight, lpBits, pbi,

DIB_RGB_COLORS))

MessageBox (hwnd,"error","GetDIBits",MB_OK);

hf = CreateFile(pszFile,

GENERIC_READ | GENERIC_WRITE,

(DWORD) 0,

NULL,

CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL,

(HANDLE) NULL);

if (hf == INVALID_HANDLE_VALUE)

MessageBox (hwnd,"error","CreateFile",MB_OK);

hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M"

hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) +

pbih->biSize + pbih->biClrUsed

* sizeof(RGBQUAD) + pbih->biSizeImage);

hdr.bfReserved1 = 0;

hdr.bfReserved2 = 0;

hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) +

pbih->biSize + pbih->biClrUsed

* sizeof (RGBQUAD);

if (!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),

(LPDWORD) &dwTmp, NULL))

MessageBox (hwnd,"error","WriteFile",MB_OK);

if (!WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER)

+ pbih->biClrUsed * sizeof (RGBQUAD),

(LPDWORD) &dwTmp, ( NULL) ) )

MessageBox (hwnd,"error","WriteFile",MB_OK);

dwTotal = cb = pbih->biSizeImage;

hp = lpBits;

if (!WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &dwTmp,NULL))

MessageBox (hwnd,"error","WriteFile",MB_OK);

if (!CloseHandle(hf))

MessageBox (hwnd,"error","CloseHandle",MB_OK);

GlobalFree((HGLOBAL)lpBits);

}

// Global Variables:

HINSTANCE hInst; // current instance

TCHAR szTitle[MAX_LOADSTRING]; // The title bar text

TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text

// Foward declarations of functions included in this code module:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

// TODO: Place code here.

MSG msg;

HACCEL hAccelTable;

// Initialize global strings

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_CELLPAINT, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

// Perform application initialization:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_CELLPAINT);

// Main message loop:

while (GetMessage(&msg, NULL, 0, 0))

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

return msg.wParam;

}

//

// FUNCTION: MyRegisterClass()

// PURPOSE: Registers the window class.

// COMMENTS:

// This function and its usage is only necessary if you want this code

// to be compatible with Win32 systems prior to the 'RegisterClassEx'

// function that was added to Windows 95. It is important to call this function

// so that the application will get 'well formed' small icons associated

// with it.

//

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_CELLPAINT);

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = (LPCSTR)IDC_CELLPAINT;

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);

}

// FUNCTION: InitInstance(HANDLE, int)

// PURPOSE: Saves instance handle and creates main window

// COMMENTS:

// In this function, we save the instance handle in a global variable and

// create and display the main program window.

//

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)

{

return FALSE;

}

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

return TRUE;

}

// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)

// PURPOSE: Processes messages for the main window.

// WM_COMMAND - process the application menu

// WM_PAINT - Paint the main window

// WM_DESTROY - post a quit message and return

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

static HBITMAP hBitMap; //хендлер для картинки

static HBITMAP bmp; //еще один

static HDC bmpDC; //hdc

int wmId, wmEvent;

PAINTSTRUCT ps;

static HDC hdc;

static PBITMAPINFO pbinfo;//инфо cтруктура bmp файла

int *Result;

char str[1024]; //строка с путем на открываемый файл

char buffer[80]="";

TCHAR szHello[MAX_LOADSTRING];

LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

char NUMCELLS[128]; //массив, в котором будет находиться имя файла, содержащего число найденных клеток.

char NUMCELLS1[128]; //массив, в котором будет находиться имя файла, содержащего число найденных клеток.

static int iNumCorr[CoeffCorr]; //в ячейках этого массива лежит количество клеток с данным коэффициентом корреляции, являющихся кандидатами в истинные клетки

static int NumberCells=0; //общее количество кандидатов в клетки

static int iStartPos[CoeffCorr]; //массив, в котором находятся стартовые позиции для координат кандидатов в клетки с данным коэффициентом корреляции

int iRadius; //радиус (величина переменная, используется в разных местах, поэтому каждое использование отдельно по тексту)

static int DiamCell=0; //расстояние между двумя кандидатами в клетки (а вовсе не диаметр)

int p; //переменная величина

int xCell,yCell; //координаты кандидатов в клетки

float points[MaxRadofCell+3][NumberOfShablone][NumOfUgol];//количество точек в эллипсе (зависит от размеров, и угла, на который повернут эллипс)

int Position=0; //

int i,j,k,l,m;

int t;

int x,y;

int xCell1,yCell1; //координаты кандидатов в клетки (они используются при вычислении DiamCell)

static float color[MaxRadofCell+3][NumberOfShablone][NumOfUgol]; //средний цвет по данному эллипсу

int Objem[MaxRadofCell+3][NumberOfShablone][NumOfUgol]; //объем данного эллипса

static BITMAP bitmap;

int NumberofCellsend; //количество клеток на данном кадре (найденное)

int iCentrCellx=(iSizeBitmapx-1)/2; //координаты центра клетки на шаблоне

int iCentrCelly=(iSizeBitmapy-1)/2; //

int correl=10000; //коэффициент корреляции клетки с центром в данной точке (наилучший для разных шаблонов)

int correlprom[MaxRadofCell+3][NumberOfShablone][NumOfUgol]; //коэффициент корреляции для клетки с центром в данной точке (наилучший для данного шаблона)

int iCellRad; //переменная величина

int PromUgol; //переменная величина

FILE * stream;

static MCI_DGV_STEP_PARMS step;

static WORD nCadres=MaxnCadres;

static OPENFILENAME of;

DWORD * fastImage;

static WORD pos=0; //номер кадра (отсчет ведется от стартового кадра)

static MCI_DGV_OPEN_PARMS mciOpen;

int NumOfShablone;

struct tag_three_color

{

float blue;

float green;

float red;

} colormass [MaxRadofCell+3][NumberOfShablone][NumOfUgol]; //структура средних цветов данного эллипса (повернутого на данный угол)

static MCIERROR error;

static MCI_DGV_RECT_PARMS mciRect;

static MCI_DGV_WINDOW_PARMS mciWindow;

DWORD * iRadiusofCell; //указатель на массив, в котором хранятся радиусы кандидатов в клетки

DWORD * iEllofCell; //указатель на массив, в котором хранятся разности между шириной и высотой кандидатов в клетки

DWORD * UgolofCell; //указатель на массив, в котором хранятся углы поворота кандидатов в клетки

static MCI_STATUS_PARMS Status;

static RECT rc;

static MCI_DGV_PLAY_PARMS mciPlay;

switch (message)

{

case WM_CREATE:

{

mciOpen.lpstrElementName = OPEN_FILE;

stream=fopen (mciOpen.lpstrElementName,"r");

if (stream==NULL) DestroyWindow (hWnd);

fclose (stream);

mciOpen.dwStyle = WS_CHILD; // Set the style.

mciOpen.hWndParent = hWnd; // Give a window handle.

mciOpen.lpstrDeviceType = "avivideo";

error=mciSendCommand(0, MCI_OPEN,

(DWORD)(MCI_OPEN_ELEMENT|MCI_DGV_OPEN_PARENT),

(DWORD)(LPSTR)&mciOpen);

GetClientRect (hWnd,&rc);

error=mciSendCommand(mciOpen.wDeviceID, MCI_WHERE,

MCI_DGV_WHERE_SOURCE,

(DWORD)(LPSTR)&mciRect);

rc.right=mciRect.rc.right;

rc.bottom=mciRect.rc.bottom;

SetWindowPos (hWnd,HWND_TOP,rc.left,rc.top,

rc.right+2*GetSystemMetrics(SM_CXSIZEFRAME),

rc.bottom+2*GetSystemMetrics(SM_CYSIZEFRAME)+

2*GetSystemMetrics(SM_CYMENU),

SWP_DRAWFRAME);

mciWindow.hWnd = hWnd;

error=mciSendCommand(mciOpen.wDeviceID, MCI_WINDOW,

MCI_DGV_WINDOW_HWND,

(DWORD)(LPSTR)&mciWindow);

DWORD dwFlags = 0;

step.dwCallback=NULL;

} break;

case WM_LBUTTONDOWN:

{

int Shape [iSizeBitmapx][iSizeBitmapx][NumberOfShablone][NumOfUgol]; //массив, в котором нарисованы все шаблоны клеток

iCentrCellx=(iSizeBitmapx-1)/2;

iCentrCelly=(iSizeBitmapy-1)/2;

hdc = GetDC (hWnd);

bmpDC = CreateCompatibleDC (hdc);

bmp = CreateCompatibleBitmap (hdc,iSizeBitmapx,iSizeBitmapy);

SelectObject (bmpDC,bmp);

//создание шаблона

for (i=0;i<NumberOfShablone;i++)

{

SelectObject (bmpDC,CreateSolidBrush (RGB(0,0,0)));

PatBlt (bmpDC,0,0,iSizeBitmapx,iSizeBitmapx,PATCOPY);

SelectObject (bmpDC, CreateSolidBrush (RGB(4,0,0)));

SelectObject (bmpDC, CreatePen (PS_SOLID,0,RGB(4,0,0)));

Ellipse (bmpDC,iCentrCellx-i,iCentrCelly-1,iCentrCellx+i+1,iCentrCelly+2); // outer space

for (iRadius=2;iRadius<MaxRadofCell+3;iRadius++)

{

SelectObject (bmpDC, CreatePen (PS_SOLID,0,RGB(4*iRadius,0,0)));

SelectObject (bmpDC,(HBRUSH)GetStockObject(NULL_BRUSH));

Ellipse (bmpDC,iCentrCellx-iRadius-i,iCentrCelly-iRadius,iCentrCellx+iRadius+i+1,iCentrCelly+iRadius+1); // outer space

}

BitBlt (hdc,0,0,iSizeBitmapx,iSizeBitmapy, bmpDC,0,0,SRCCOPY);

// MessageBox (hWnd,"ok","ok",MB_OK);

pbinfo = CreateBitmapInfoStruct(hWnd,bmp);

sprintf (str,"sumcell%d.bmp",i);

CreateBMPFile(hWnd,str,pbinfo, bmp, bmpDC) ;

for (l=0;l<iSizeBitmapx;l++)

for (j=0;j<iSizeBitmapx;j++)

{

Shape[l][j][i][(NumOfUgol-1)/2]=GetPixel(bmpDC,l,j);

}

}

// поворот шаблона

double NewX,NewY;//координаты точки после поворота на определенный угол

double Ugol; //угол поворота

for (i=0;i<NumOfUgol;i++)

{

if (NumOfUgol==1)

{

Ugol =0;

}

else

{

Ugol=((double)i-(NumOfUgol-1)/2.)*PI/5./(NumOfUgol+1);

}

for (j=0;j<NumberOfShablone;j++)

{

for (k=0;k<iSizeBitmapx;k++)

for(l=0;l<iSizeBitmapy;l++)

{

NewX=((double)(k-iCentrCellx)*cos(Ugol)+(double)(l-iCentrCelly)*sin(Ugol))+iCentrCellx;

NewY=(-(double)(k-iCentrCellx)*sin(Ugol)+(double)(l-iCentrCelly)*cos(Ugol))+iCentrCelly;

if (NewX-(double)(int)NewX>=0.5)

NewX=(double)(int)NewX+1;

if (NewY-(double)(int)NewY>=0.5)

NewY=(double)(int)NewY+1;

if (NewX>=0 && NewX<iSizeBitmapx &&

NewY>=0 && NewY<iSizeBitmapy)

{

SetPixel(bmpDC,(int)NewX,(int)NewY,Shape[k][l][j][(NumOfUgol-1)/2]);

}

}

for (k=0;k<iSizeBitmapx;k++)

for(l=0;l<iSizeBitmapy;l++)

{

Shape[k][l][j][i]=GetPixel(bmpDC,k,l);

}

BitBlt (hdc,0,0,iSizeBitmapx,iSizeBitmapy, bmpDC,0,0,SRCCOPY);

// MessageBox (hWnd,"ok","ok",MB_OK);

pbinfo = CreateBitmapInfoStruct(hWnd,bmp);

sprintf (str,"sumcell%d%d.bmp",j,i);

CreateBMPFile(hWnd,str,pbinfo, bmp,bmpDC);

}

}

//окончание создания шаблонов

//first cadr

{

//переход на стартовый кадр

step.dwFrames=StartCadr;

error=mciSendCommand(

mciOpen.wDeviceID,

MCI_STEP,

MCI_DGV_STEP_FRAMES,

(DWORD) (LPMCI_DGV_STEP_PARMS) &step);

if (error!=0)//если это не удалось, убить программу

{

DestroyWindow (hWnd);

break;

}

fastImage = new DWORD [(rc.right-rc.left)*(rc.bottom-rc.top)];//тут хранится текущий кадр

BitBlt (bmpDC,0,0,800,600,hdc,0,0,SRCCOPY);

DWORD * corr;

if (StartpixX1!=NULL)

{

rc.left=StartpixX1;

rc.top=StartpixY1;

rc.right=StartpixX2;

rc.bottom=StartpixY2;

}

corr=new DWORD [(rc.right-rc.left-iSizeBitmapx)*

(rc.bottom-rc.top-iSizeBitmapy)];

iRadiusofCell=new DWORD [(rc.right-rc.left-iSizeBitmapx)*

(rc.bottom-rc.top-iSizeBitmapy)];

iEllofCell=new DWORD [(rc.right-rc.left-iSizeBitmapx)*

(rc.bottom-rc.top-iSizeBitmapy)];

UgolofCell=new DWORD [(rc.right-rc.left-iSizeBitmapx)*

(rc.bottom-rc.top-iSizeBitmapy)];

for (i=0;i<(rc.right-rc.left-iSizeBitmapx)*(rc.bottom-rc.top-iSizeBitmapy);i++)

{

corr[i]=0;

iRadiusofCell[i]=0;

}

Sleep(1000);

MessageBeep(-1);

for (i=rc.left;i<rc.right;i++)

for (j=rc.top;j<rc.bottom;j++)

{

fastImage [(i-rc.left)*(rc.bottom-rc.top)+j-rc.top]=GetPixel(hdc,i,j);

// SetPixel(hdc,i,j,fastImage [(i-rc.left)*(rc.bottom-rc.top)+j-rc.top]);

}

for (i=0;i<MaxRadofCell+3;i++)

for (j=0;j<NumberOfShablone;j++)

for (k=0;k<NumOfUgol;k++)

points[i][j][k]=0;

for (i=0;i<iSizeBitmapx;i++)

for (j=0;j<iSizeBitmapy;j++)

for (k=0;k<NumberOfShablone;k++)

for (l=0;l<NumOfUgol;l++)

points [ Shape [i][j][k][l]>>2 ][k][l] += 1;

for (i=0;i<MaxRadofCell+3;i++)

for(j=0;j<NumberOfShablone;j++)

for (k=0;k<NumOfUgol;k++)

Objem[i][j][k]=0;

for (i=1;i<MaxRadofCell+3;i++)

for(j=0;j<NumberOfShablone;j++)

for (k=0;k<NumOfUgol;k++)

Objem[i][j][k]=Objem[i-1][j][k]+(int)points[i][j][k];

for (i=0;i<rc.right-rc.left-iSizeBitmapx;i++)

for (j=0;j<rc.bottom-rc.top-iSizeBitmapy;j++)

{

for (k=0;k<MaxRadofCell+3;k++)

for (l=0;l<NumberOfShablone;l++)

for (m=0;m<NumOfUgol;m++)

{

colormass [k][l][m].red = 0;

colormass [k][l][m].green = 0;

colormass [k][l][m].blue = 0;

}

for (k=0;k<iSizeBitmapx;k++)

for (l=0;l<iSizeBitmapy;l++)

{

for (t=0;t<NumberOfShablone;t++)

for (m=0;m<NumOfUgol;m++)

{

x = k+i;

y = l+j;

colormass[ Shape [k][l][t][m] >>2][t][m].blue += (

(fastImage [x*(rc.bottom-rc.top)+y] & 0x00ff0000) >> 16);

colormass[ Shape [k][l][t][m] >>2][t][m].green +=

(fastImage [x*(rc.bottom-rc.top)+y] & 0x0000ff00) >> 8;

colormass[ Shape [k][l][t][m] >>2][t][m].red +=

(fastImage [x*(rc.bottom-rc.top)+y] & 0x000000ff);

}

}

for (p=0;p<MaxRadofCell+3;p++)

for(k=0;k<NumberOfShablone;k++)

for (m=0;m<NumOfUgol;m++)

{

colormass[p][k][m].blue = ((float) colormass[p][k][m].blue /

(float) points [p][k][m]);

colormass[p][k][m].green = ((float) colormass[p][k][m].green /

(float) points [p][k][m]);

colormass[p][k][m].red = ((float) colormass[p][k][m].red /

(float) points [p][k][m]);

}

for (p=0;p<MaxRadofCell+3;p++)

for (k=0;k<NumberOfShablone;k++)

for (m=0;m<NumOfUgol;m++)

color[p][k][m]=(float)(colormass[p][k][m].red+

colormass[p][k][m].blue+

colormass[p][k][m].green);

correl=5000;

iCellRad=0;

NumOfShablone=0;

for (m=0;m<NumOfUgol;m++)

for (k=0;k<NumberOfShablone;k++)

for(iRadius=MinRadofCell;iRadius<MaxRadofCell+1;iRadius++)

{

correlprom[iRadius][k][m]=(int)

(10000./

(

color[iRadius+2][k][m]/color[iRadius][k][m] +

color[1][k][m]/color[iRadius][k][m]

)

);

if (correl>correlprom[iRadius][k][m] && Objem[iRadius][k][m]>MinObjem)

{

correl=correlprom[iRadius][k][m];

iCellRad=iRadius;

NumOfShablone=k;

PromUgol=m;

}

}

if (iCellRad!=0 &&

(color[1][NumOfShablone][PromUgol] / color [iCellRad][NumOfShablone][PromUgol] > DColor) &&

(color[1][NumOfShablone][PromUgol] - color [iCellRad][NumOfShablone][PromUgol] > DelColor) &&

// (color[iCellRad-2][NumOfShablone] - color[iCellRad][NumOfShablone] > DelColor) &&

(color[iCellRad+2][NumOfShablone][PromUgol] - color[iCellRad][NumOfShablone][PromUgol] > DelColor ) &&

// (color[iCellRad-2][NumOfShablone] / color [iCellRad][NumOfShablone] > DColor) &&

(color[iCellRad+2][NumOfShablone][PromUgol] / color [iCellRad][NumOfShablone][PromUgol] > DColor))

{

corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j]=correl;

iNumCorr[corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j]]++;

iRadiusofCell[i*(rc.bottom-rc.top-iSizeBitmapy)+j]=iCellRad;

iEllofCell[i*(rc.bottom-rc.top-iSizeBitmapy)+j]=NumOfShablone;

UgolofCell[i*(rc.bottom-rc.top-iSizeBitmapy)+j]=PromUgol;

SetPixel(hdc,i+(iSizeBitmapx-1)/2+rc.left,rc.top+j+(iSizeBitmapy-1)/2,0xff0000);

}

}

for (i=1;i<CoeffCorr;i++)

{

NumberCells+=iNumCorr[i];

}

int (*pointer);

pointer = new int[2*NumberCells+CoeffCorr];

iStartPos[0]=0;

for (i=1;i<CoeffCorr;i++)

{

iStartPos[i]=iStartPos[i-1]+iNumCorr[i-1]*2+1;

}

for (i=0;i<2*NumberCells+CoeffCorr;i++)

{

*(pointer+i)=0;

}

for (i=0;i<rc.right-rc.left-iSizeBitmapx;i++)

for(j=0;j<rc.bottom-rc.top-iSizeBitmapy;j++)

{

if (corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j]<CoeffCorr

&& corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j]!=0)

{

l=corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j];

k=*(pointer+iStartPos[l]);

*(pointer+iStartPos[l]+2*k+1)=i+rc.left;

*(pointer+iStartPos[l]+2*k+2)=j+rc.top;

*(pointer+iStartPos[l])+=1;

}

}

int *Cells;

Position=0;

Cells = new int[2*NumberCells];

for (i=0;i<CoeffCorr;i++)

for(j=0;j<*(pointer+iStartPos[i]);j++)

{

*(Cells+Position)=*(pointer+iStartPos[i]+2*j+1);

*(Cells+Position+1)=*(pointer+iStartPos[i]+2*j+2);

Position+=2;

}

for (i=0;i<NumberCells;i++)

{

xCell=*(Cells+2*i);

yCell=*(Cells+2*i+1);

if(xCell!=0 && yCell!=0)

{

for (j=i+1;j<NumberCells;j++)

{

xCell1=*(Cells+2*j);

yCell1=*(Cells+2*j+1);

if (xCell1!=0 && yCell1!=0)

{

DiamCell=iRadiusofCell[(xCell-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+(yCell-rc.top)]+

iRadiusofCell[(xCell1-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+(yCell1-rc.top)];

if ( (xCell-xCell1)*(xCell-xCell1)+(yCell-yCell1)*(yCell-yCell1)<DiamCell*DiamCell)

{

*(Cells+2*j)=0;

*(Cells+2*j+1)=0;

}

}

}

}

}

NumberofCellsend=0;

for (i=0;i<NumberCells;i++)

{

if(*(Cells+2*i)!=0 && *(Cells+2*i+1)!=0)

{

NumberofCellsend++;

SelectObject (hdc, CreatePen (PS_SOLID,0,RGB(0xff,0,0)));

SelectObject (hdc,(HBRUSH)GetStockObject(NULL_BRUSH));

Ellipse (hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2-iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]-iEllofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top],

*(Cells+2*i+1)+(iSizeBitmapx-1)/2-iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]

,*(Cells+2*i)+(iSizeBitmapx-1)/2+1+iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]+iEllofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]

,*(Cells+2*i+1)+(iSizeBitmapx-1)/2+1+iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]); // outer space

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2,*(Cells+2*i+1)+(iSizeBitmapx-1)/2,0xff0000);

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2-1,*(Cells+2*i+1)+(iSizeBitmapx-1)/2-1,0xff0000);

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2+1,*(Cells+2*i+1)+(iSizeBitmapx-1)/2+1,0xff0000);

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2+1,*(Cells+2*i+1)+(iSizeBitmapx-1)/2-1,0xff0000);

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2-1,*(Cells+2*i+1)+(iSizeBitmapx-1)/2+1,0xff0000);

}

}

Result=new int[NumberofCadres*NumberofCellsend*5];

j=0;

Sleep(2500);

FILE* Fpout;

Fpout=fopen("ell.txt","wb");

for (i=0;i<NumberCells;i++)

{

if(*(Cells+2*i)!=0 && *(Cells+2*i+1)!=0)

{

fprintf(Fpout,"%d %d %d %d\n",*(Cells+2*i)+(iSizeBitmapx-1)/2,*(Cells+2*i+1)+(iSizeBitmapx-1)/2,iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top],iEllofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]);

Result[j]=*(Cells+2*i);

Result[j+1]=*(Cells+2*i+1);

Result[j+2]=iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top];

Result[j+3]=iEllofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top];

Result[j+4]=UgolofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top];

j+=5;

}

}

fclose(Fpout);

delete Cells;

delete corr;

delete pointer;

}

int q,w;

int *Flag;

Flag=new int[NumberofCellsend];

for (i=0;i<NumberofCellsend;i++)

{

Flag[i]=0;

}

pos=1;

//laster cadres.

while (pos<NumberofCadres-1)

{

step.dwFrames=1;

error=mciSendCommand(

mciOpen.wDeviceID,

MCI_STEP,

MCI_NOTIFY,

(DWORD) (LPMCI_DGV_STEP_PARMS) &step);

Sleep(50);

BitBlt (bmpDC,0,0,800,600,hdc,0,0,SRCCOPY);

if (error!=0)

{

DestroyWindow (hWnd);

break;

}

for (i=rc.left;i<rc.right;i++)

for (j=rc.top;j<rc.bottom;j++)

fastImage [(i-rc.left)*(rc.bottom-rc.top)+j-rc.top]=GetPixel(hdc,i,j);

int XofCell,YofCell,RadiofCell;

int corr1=5000;

for (i=0;i<NumberofCellsend;i++)

{

XofCell=Result[NumberofCellsend*5*(pos-1)+5*i]-rc.left;

Result[NumberofCellsend*5*(pos)+5*i]=Result[NumberofCellsend*5*(pos-1)+5*i];

YofCell=Result[NumberofCellsend*5*(pos-1)+5*i+1]-rc.top;

RadiofCell=Result[NumberofCellsend*5*(pos-1)+5*i+2];

corr1=5000;

Result[NumberofCellsend*5*(pos)+5*i+1]=Result[NumberofCellsend*5*(pos-1)+5*i+1];

Result[NumberofCellsend*5*(pos)+5*i+2]=Result[NumberofCellsend*5*(pos-1)+5*i+2];

Result[NumberofCellsend*5*(pos)+5*i+3]=Result[NumberofCellsend*5*(pos-1)+5*i+3];

if (Flag[i]>4)

{

Result[NumberofCellsend*5*(pos)+5*i]=NULL;

Result[NumberofCellsend*5*(pos)+5*i+1]=NULL;

Result[NumberofCellsend*5*(pos)+5*i+2]=NULL;

Result[NumberofCellsend*5*(pos)+5*i+3]=NULL;

Result[NumberofCellsend*5*(pos)+5*i+4]=NULL;

}

Flag[i]++;

if (XofCell!=NULL && YofCell!=NULL)

{

for(q=XofCell-Okrest;q<XofCell+Okrest;q++)

for (w=YofCell-Okrest;w<YofCell+Okrest;w++)

{

if(q>=0 && q<rc.right-rc.left-iSizeBitmapx

&& w>=0 && w<rc.bottom-rc.top-iSizeBitmapy)

{

for (k=0;k<iSizeBitmapx;k++)

for (l=0;l<iSizeBitmapy;l++)

for (t=0;t<NumberOfShablone;t++)

for (m=0;m<NumOfUgol;m++)

{

x = k+q;

y = l+w;

colormass[ Shape [k][l][t][m] >>2][t][m].blue += (

(fastImage [x*(rc.bottom-rc.top)+y] & 0x00ff0000) >> 16);

colormass[ Shape [k][l][t][m] >>2][t][m].green +=

(fastImage [x*(rc.bottom-rc.top)+y] & 0x0000ff00) >> 8;

colormass[ Shape [k][l][t][m] >>2][t][m].red +=

(fastImage [x*(rc.bottom-rc.top)+y] & 0x000000ff);

}

correl=5000;

for (p=0;p<MaxRadofCell+3;p++)

for (t=0;t<NumberOfShablone;t++)

for (m=0;m<NumOfUgol;m++)

{

colormass[p][t][m].blue = ((float) colormass[p][t][m].blue /

(float) points [p][t][m]);

colormass[p][t][m].green = ((float) colormass[p][t][m].green /

(float) points [p][t][m]);

colormass[p][t][m].red = ((float) colormass[p][t][m].red /

(float) points [p][t][m]);

}

for (p=0;p<MaxRadofCell+3;p++)

for (t=0;t<NumberOfShablone;t++)

for (m=0;m<NumOfUgol;m++)

color[p][t][m]=(float)(colormass[p][t][m].red+

colormass[p][t][m].blue +

colormass[p][t][m].green);

NumOfShablone=0;

for(iRadius=MinRadofCell;iRadius<MaxRadofCell+1;iRadius++)

for (m=0;m<NumOfUgol;m++)

for (t=0;t<NumberOfShablone;t++)

{

correlprom[iRadius][t][m]=(int)

(10000./

(

color[iRadius+2][t][m]/color[iRadius][t][m] +

color[1][t][m]/color[iRadius][t][m]

)

);

if (correl>correlprom[iRadius][t][m] && Objem[iRadius][t][m]>MinObjem)

{

correl=correlprom[iRadius][t][m];

iCellRad=iRadius;

NumOfShablone=t;

PromUgol=m;

}

}

if (iCellRad!=0 &&

(color[1][NumOfShablone][PromUgol] - color[iCellRad][NumOfShablone][PromUgol] > DelColor) &&

(color[iCellRad+2][NumOfShablone][PromUgol] - color[iCellRad][NumOfShablone][PromUgol] > DelColor ) &&

(color[1][NumOfShablone][PromUgol] / color [iCellRad][NumOfShablone][PromUgol] > DColor) &&

(color[iCellRad+2][NumOfShablone][PromUgol] / color [iCellRad][NumOfShablone][PromUgol] > DColor) )

{

if(correl<corr1)

{

corr1=correl;

Result[NumberofCellsend*5*(pos)+5*i]=q+rc.left;

Result[NumberofCellsend*5*(pos)+5*i+1]=w+rc.top;

Result[NumberofCellsend*5*(pos)+5*i+2]=iCellRad;

Result[NumberofCellsend*5*(pos)+5*i+3]=NumOfShablone;

Result[NumberofCellsend*5*(pos)+5*i+4]=PromUgol;

Flag[i]=0;

}

}

}

}

}

}

for (j=0;j<NumberofCellsend;j++)

{

if(Result[NumberofCellsend*5*(pos)+5*j]!=NULL && Result[NumberofCellsend*5*(pos)+5*j+1]!=0)

{

SetPixel(hdc,Result[NumberofCellsend*5*(pos)+5*j]+(iSizeBitmapx-1)/2,Result[NumberofCellsend*5*(pos)+5*j+1]+(iSizeBitmapx-1)/2,0xff0000);

SetPixel(hdc,Result[NumberofCellsend*5*(pos)+5*j]+(iSizeBitmapx-1)/2-1,Result[NumberofCellsend*5*(pos)+5*j+1]+(iSizeBitmapx-1)/2-1,0xff0000);

SetPixel(hdc,Result[NumberofCellsend*5*(pos)+5*j]+(iSizeBitmapx-1)/2+1,Result[NumberofCellsend*5*(pos)+5*j+1]+(iSizeBitmapx-1)/2+1,0xff0000);

SetPixel(hdc,Result[NumberofCellsend*5*(pos)+5*j]+(iSizeBitmapx-1)/2+1,Result[NumberofCellsend*5*(pos)+5*j+1]+(iSizeBitmapx-1)/2-1,0xff0000);

SetPixel(hdc,Result[NumberofCellsend*5*(pos)+5*j]+(iSizeBitmapx-1)/2-1,Result[NumberofCellsend*5*(pos)+5*j+1]+(iSizeBitmapx-1)/2+1,0xff0000);

SelectObject (hdc, CreatePen (PS_SOLID,0,RGB(0xff,0,0)));

SelectObject (hdc,(HBRUSH)GetStockObject(NULL_BRUSH));

Ellipse (hdc,Result[NumberofCellsend*5*(pos)+5*j]+(iSizeBitmapx-1)/2-Result[NumberofCellsend*5*(pos)+5*j+2]-Result[NumberofCellsend*5*(pos)+5*j+3],

Result[NumberofCellsend*5*(pos)+5*j+1]+(iSizeBitmapx-1)/2-Result[NumberofCellsend*5*(pos)+5*j+2]

,Result[NumberofCellsend*5*(pos)+5*j]+(iSizeBitmapx-1)/2+1+Result[NumberofCellsend*5*(pos)+5*j+2]+Result[NumberofCellsend*5*(pos)+5*j+3]

,Result[NumberofCellsend*5*(pos)+5*j+1]+(iSizeBitmapx-1)/2+1+Result[NumberofCellsend*5*(pos)+5*j+2]); // outer space

}

}

pos++;

Sleep(200);

// MessageBeep(-1);

// MessageBox (hWnd,"ok","ok",MB_OK);

}

int NumCellsEND=0;

FILE* cells;

FILE* cells1;

sprintf (NUMCELLS,"wg_5_%d_%d.txt",StartCadr,NumberofCadres);

sprintf (NUMCELLS1,"wg%d_%d.txt",StartCadr,NumberofCadres);

cells=fopen(NUMCELLS,"wb");

cells1=fopen(NUMCELLS1,"wb");

for (i=0;i<NumberofCellsend;i++)

{

if (Result[5*NumberofCellsend*(NumberofCadres-1)+5*i]!=0 && Result[5*NumberofCellsend*(NumberofCadres-1)+5*i+1]!=0)

{

for (j=0;j<NumberofCadres;j++)

{

fprintf(cells,"%d %d %d %d %d ",

Result[5*j*NumberofCellsend+5*i]

+(iSizeBitmapx-1)/2,

Result[5*j*NumberofCellsend+5*i+1]

+(iSizeBitmapx-1)/2,

Result[5*j*NumberofCellsend+5*i+2],

Result[5*j*NumberofCellsend+5*i+3],

Result[5*j*NumberofCellsend+5*i+4]);

fprintf(cells1,"%d %d %d ",

Result[5*j*NumberofCellsend+5*i]

+(iSizeBitmapx-1)/2,

Result[5*j*NumberofCellsend+5*i+1]

+(iSizeBitmapx-1)/2,

Result[5*j*NumberofCellsend+5*i+2]);

}

NumCellsEND++;

fprintf(cells,"\n");

fprintf(cells1,"\n");

}

}

NumCellsEND=0;

FILE* cellsnew;

sprintf (NUMCELLS,"wgnew%d_%d.txt",StartCadr,NumberofCadres);

cellsnew=fopen(NUMCELLS,"wb");

for (i=0;i<NumberofCellsend;i++)

{

if (Result[5*NumberofCellsend*(NumberofCadres-1)+5*i]!=0 && Result[5*NumberofCellsend*(NumberofCadres-1)+5*i+1]!=0)

{

for (j=0;j<NumberofCadres;j++)

{

fprintf(cellsnew,"%d ",

Result[5*j*NumberofCellsend+5*i]

+(iSizeBitmapx-1)/2);

}fprintf(cellsnew,"\n");

for (j=0;j<NumberofCadres;j++)

{

fprintf(cellsnew,"%d ",

Result[5*j*NumberofCellsend+5*i+1]

+(iSizeBitmapx-1)/2);

}fprintf(cellsnew,"\n");

for (j=0;j<NumberofCadres;j++)

{

fprintf(cellsnew,"%d ",

Result[5*j*NumberofCellsend+5*i+2]);

}fprintf(cellsnew,"\n");

for (j=0;j<NumberofCadres;j++)

{

fprintf(cellsnew,"%d ",

Result[5*j*NumberofCellsend+5*i+3]);

}fprintf(cellsnew,"\n");

for (j=0;j<NumberofCadres;j++)

{

fprintf(cellsnew,"%d ",

Result[5*j*NumberofCellsend+5*i+4]);

}

NumCellsEND++;

fprintf(cellsnew,"\n");

}

}

fclose(cellsnew);

fclose(cells);

sprintf (NUMCELLS,"numcells%d_%d.txt",StartCadr,NumberofCadres);

cells=fopen(NUMCELLS,"wb");

fprintf(cells,"%d",NumCellsEND);

fclose(cells);

// последний кадр

{

//переход на последний кадр

step.dwFrames=pos;

error=mciSendCommand(

mciOpen.wDeviceID,

MCI_STEP,

MCI_DGV_STEP_FRAMES,

(DWORD) (LPMCI_DGV_STEP_PARMS) &step);

if (error!=0)//если это не удалось, убить программу

{

DestroyWindow (hWnd);

break;

}

fastImage = new DWORD [(rc.right-rc.left)*(rc.bottom-rc.top)];//тут хранится текущий кадр

BitBlt (bmpDC,0,0,800,600,hdc,0,0,SRCCOPY);

DWORD * corr;

if (StartpixX1!=NULL)

{

rc.left=StartpixX1;

rc.top=StartpixY1;

rc.right=StartpixX2;

rc.bottom=StartpixY2;

}

corr=new DWORD [(rc.right-rc.left-iSizeBitmapx)*

(rc.bottom-rc.top-iSizeBitmapy)];

iRadiusofCell=new DWORD [(rc.right-rc.left-iSizeBitmapx)*

(rc.bottom-rc.top-iSizeBitmapy)];

iEllofCell=new DWORD [(rc.right-rc.left-iSizeBitmapx)*

(rc.bottom-rc.top-iSizeBitmapy)];

UgolofCell=new DWORD [(rc.right-rc.left-iSizeBitmapx)*

(rc.bottom-rc.top-iSizeBitmapy)];

for (i=0;i<(rc.right-rc.left-iSizeBitmapx)*(rc.bottom-rc.top-iSizeBitmapy);i++)

{

corr[i]=0;

iRadiusofCell[i]=0;

}

Sleep(1000);

MessageBeep(-1);

for (i=rc.left;i<rc.right;i++)

for (j=rc.top;j<rc.bottom;j++)

{

fastImage [(i-rc.left)*(rc.bottom-rc.top)+j-rc.top]=GetPixel(hdc,i,j);

// SetPixel(hdc,i,j,fastImage [(i-rc.left)*(rc.bottom-rc.top)+j-rc.top]);

}

for (i=0;i<MaxRadofCell+3;i++)

for (j=0;j<NumberOfShablone;j++)

for (k=0;k<NumOfUgol;k++)

points[i][j][k]=0;

for (i=0;i<iSizeBitmapx;i++)

for (j=0;j<iSizeBitmapy;j++)

for (k=0;k<NumberOfShablone;k++)

for (l=0;l<NumOfUgol;l++)

points [ Shape [i][j][k][l]>>2 ][k][l] += 1;

for (i=0;i<MaxRadofCell+3;i++)

for(j=0;j<NumberOfShablone;j++)

for (k=0;k<NumOfUgol;k++)

Objem[i][j][k]=0;

for (i=1;i<MaxRadofCell+3;i++)

for(j=0;j<NumberOfShablone;j++)

for (k=0;k<NumOfUgol;k++)

Objem[i][j][k]=Objem[i-1][j][k]+(int)points[i][j][k];

for (i=0;i<rc.right-rc.left-iSizeBitmapx;i++)

for (j=0;j<rc.bottom-rc.top-iSizeBitmapy;j++)

{

for (k=0;k<MaxRadofCell+3;k++)

for (l=0;l<NumberOfShablone;l++)

for (m=0;m<NumOfUgol;m++)

{

colormass [k][l][m].red = 0;

colormass [k][l][m].green = 0;

colormass [k][l][m].blue = 0;

}

for (k=0;k<iSizeBitmapx;k++)

for (l=0;l<iSizeBitmapy;l++)

{

for (t=0;t<NumberOfShablone;t++)

for (m=0;m<NumOfUgol;m++)

{

x = k+i;

y = l+j;

colormass[ Shape [k][l][t][m] >>2][t][m].blue += (

(fastImage [x*(rc.bottom-rc.top)+y] & 0x00ff0000) >> 16);

colormass[ Shape [k][l][t][m] >>2][t][m].green +=

(fastImage [x*(rc.bottom-rc.top)+y] & 0x0000ff00) >> 8;

colormass[ Shape [k][l][t][m] >>2][t][m].red +=

(fastImage [x*(rc.bottom-rc.top)+y] & 0x000000ff);

}

}

for (p=0;p<MaxRadofCell+3;p++)

for(k=0;k<NumberOfShablone;k++)

for (m=0;m<NumOfUgol;m++)

{

colormass[p][k][m].blue = ((float) colormass[p][k][m].blue /

(float) points [p][k][m]);

colormass[p][k][m].green = ((float) colormass[p][k][m].green /

(float) points [p][k][m]);

colormass[p][k][m].red = ((float) colormass[p][k][m].red /

(float) points [p][k][m]);

}

for (p=0;p<MaxRadofCell+3;p++)

for (k=0;k<NumberOfShablone;k++)

for (m=0;m<NumOfUgol;m++)

color[p][k][m]=(float)(colormass[p][k][m].red+

colormass[p][k][m].blue+

colormass[p][k][m].green);

correl=5000;

iCellRad=0;

NumOfShablone=0;

for (m=0;m<NumOfUgol;m++)

for (k=0;k<NumberOfShablone;k++)

for(iRadius=MinRadofCell;iRadius<MaxRadofCell+1;iRadius++)

{

correlprom[iRadius][k][m]=(int)

(10000./

(

color[iRadius+2][k][m]/color[iRadius][k][m] +

color[1][k][m]/color[iRadius][k][m]

)

);

if (correl>correlprom[iRadius][k][m] && Objem[iRadius][k][m]>MinObjem)

{

correl=correlprom[iRadius][k][m];

iCellRad=iRadius;

NumOfShablone=k;

PromUgol=m;

}

}

if (iCellRad!=0 &&

(color[1][NumOfShablone][PromUgol] / color [iCellRad][NumOfShablone][PromUgol] > DColor) &&

(color[1][NumOfShablone][PromUgol] - color [iCellRad][NumOfShablone][PromUgol] > DelColor) &&

// (color[iCellRad-2][NumOfShablone] - color[iCellRad][NumOfShablone] > DelColor) &&

(color[iCellRad+2][NumOfShablone][PromUgol] - color[iCellRad][NumOfShablone][PromUgol] > DelColor ) &&

// (color[iCellRad-2][NumOfShablone] / color [iCellRad][NumOfShablone] > DColor) &&

(color[iCellRad+2][NumOfShablone][PromUgol] / color [iCellRad][NumOfShablone][PromUgol] > DColor))

{

corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j]=correl;

iNumCorr[corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j]]++;

iRadiusofCell[i*(rc.bottom-rc.top-iSizeBitmapy)+j]=iCellRad;

iEllofCell[i*(rc.bottom-rc.top-iSizeBitmapy)+j]=NumOfShablone;

UgolofCell[i*(rc.bottom-rc.top-iSizeBitmapy)+j]=PromUgol;

SetPixel(hdc,i+(iSizeBitmapx-1)/2+rc.left,rc.top+j+(iSizeBitmapy-1)/2,0xff0000);

}

}

for (i=1;i<CoeffCorr;i++)

{

NumberCells+=iNumCorr[i];

}

int (*pointer);

pointer = new int[2*NumberCells+CoeffCorr];

iStartPos[0]=0;

for (i=1;i<CoeffCorr;i++)

{

iStartPos[i]=iStartPos[i-1]+iNumCorr[i-1]*2+1;

}

for (i=0;i<2*NumberCells+CoeffCorr;i++)

{

*(pointer+i)=0;

}

for (i=0;i<rc.right-rc.left-iSizeBitmapx;i++)

for(j=0;j<rc.bottom-rc.top-iSizeBitmapy;j++)

{

if (corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j]<CoeffCorr

&& corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j]!=0)

{

l=corr[i*(rc.bottom-rc.top-iSizeBitmapy)+j];

k=*(pointer+iStartPos[l]);

*(pointer+iStartPos[l]+2*k+1)=i+rc.left;

*(pointer+iStartPos[l]+2*k+2)=j+rc.top;

*(pointer+iStartPos[l])+=1;

}

}

//тvёЄЁрштрэшх ъыхЄюъ т ьрёёшт яю ъю¤ЇЇшЎшхэЄє ъюЁЁхы Ўшш

int *Cells;

Position=0;

Cells = new int[2*NumberCells];

for (i=0;i<CoeffCorr;i++)

for(j=0;j<*(pointer+iStartPos[i]);j++)

{

*(Cells+Position)=*(pointer+iStartPos[i]+2*j+1);

*(Cells+Position+1)=*(pointer+iStartPos[i]+2*j+2);

Position+=2;

}

//єфрыхэшх ыш°эшї ъыхЄюъ

for (i=0;i<NumberCells;i++)

{

xCell=*(Cells+2*i);

yCell=*(Cells+2*i+1);

if(xCell!=0 && yCell!=0)

{

for (j=i+1;j<NumberCells;j++)

{

xCell1=*(Cells+2*j);

yCell1=*(Cells+2*j+1);

if (xCell1!=0 && yCell1!=0)

{

DiamCell=iRadiusofCell[(xCell-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+(yCell-rc.top)]+

iRadiusofCell[(xCell1-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+(yCell1-rc.top)];

if ( (xCell-xCell1)*(xCell-xCell1)+(yCell-yCell1)*(yCell-yCell1)<DiamCell*DiamCell)

{

*(Cells+2*j)=0;

*(Cells+2*j+1)=0;

}

}

}

}

}

NumberofCellsend=0;

for (i=0;i<NumberCells;i++)

{

if(*(Cells+2*i)!=0 && *(Cells+2*i+1)!=0)

{

NumberofCellsend++;

SelectObject (hdc, CreatePen (PS_SOLID,0,RGB(0xff,0,0)));

SelectObject (hdc,(HBRUSH)GetStockObject(NULL_BRUSH));

Ellipse (hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2-iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]-iEllofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top],

*(Cells+2*i+1)+(iSizeBitmapx-1)/2-iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]

,*(Cells+2*i)+(iSizeBitmapx-1)/2+1+iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]+iEllofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]

,*(Cells+2*i+1)+(iSizeBitmapx-1)/2+1+iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]); // outer space

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2,*(Cells+2*i+1)+(iSizeBitmapx-1)/2,0xff0000);

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2-1,*(Cells+2*i+1)+(iSizeBitmapx-1)/2-1,0xff0000);

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2+1,*(Cells+2*i+1)+(iSizeBitmapx-1)/2+1,0xff0000);

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2+1,*(Cells+2*i+1)+(iSizeBitmapx-1)/2-1,0xff0000);

SetPixel(hdc,*(Cells+2*i)+(iSizeBitmapx-1)/2-1,*(Cells+2*i+1)+(iSizeBitmapx-1)/2+1,0xff0000);

}

}

Result=new int[NumberofCadres*NumberofCellsend*5];

j=0;

Sleep(2500);

FILE* Fpout;

Fpout=fopen("ell1.txt","wb");

for (i=0;i<NumberCells;i++)

{

if(*(Cells+2*i)!=0 && *(Cells+2*i+1)!=0)

{

fprintf(Fpout,"%d %d %d %d\n",*(Cells+2*i)+(iSizeBitmapx-1)/2,*(Cells+2*i+1)+(iSizeBitmapx-1)/2,iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top],iEllofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top]);

Result[j]=*(Cells+2*i);

Result[j+1]=*(Cells+2*i+1);

Result[j+2]=iRadiusofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top];

Result[j+3]=iEllofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top];

Result[j+4]=UgolofCell[(*(Cells+2*i)-rc.left)*(rc.bottom-rc.top-iSizeBitmapy)+*(Cells+2*i+1)-rc.top];

j+=5;

}

}

fclose(Fpout);

delete Cells;

delete corr;

delete pointer;

}

//int q,w;

// int *Flag;

Flag=new int[NumberofCellsend];

for (i=0;i<NumberofCellsend;i++)

{

Flag[i]=0;

}

pos=1;

// MessageBox (hWnd,"ok","ok",MB_OK);

DestroyWindow (hWnd);

}

break;

case WM_COMMAND:

wmId = LOWORD(wParam);

wmEvent = HIWORD(wParam);

// Parse the menu selections:

switch (wmId)

{

case IDM_ABOUT:

DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);

break;

case IDM_EXIT:

DestroyWindow(hWnd);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

BitBlt (hdc,0,0,800,600,bmpDC,0,0,SRCCOPY);

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

error=mciSendCommand( mciOpen.wDeviceID, MCI_CLOSE, NULL ,NULL);

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

// Mesage handler for about box.

LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message)

{

case WM_INITDIALOG:

return TRUE;

case WM_COMMAND:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));

return TRUE;

}

break;

}

return FALSE;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]