unit BrainMap; Описание объектов TVoxel, TCenter, TLead, TBrainMap, TLeadsMap, TBCNNMap - реализующих сеть BCNN на карте реального мозга
Некоторые типы данных и массивы описаны в файле BrainMapData
TCenterType = (ctLobe,ctStructure,ctBrArea,ctCluster,ctVoxel,ctSome); -Тип мозгового центра (по масштабу)
TDrawingType = (dtActivationT0,dtActivationT1,dtSigmaT0,dtSigmaT1);
- Тип прорисовывания Воксела цветом на карте мозга
TVoxelCoord = record
- 3D Координаты Вокселя иле Электрода
X:Single;
Y:Single;
Z:Single;
end;
TBrainRects = array[TPlane] of TRect; - Массив участков Канвы любого компонента для трех плоскостей (TPlane=(plFrontal,plSagital,plHorizontal); //Виды сечений описаны в файле BrainMapData.pas)
TParVox = record
- Параметры вокселя (номер - Ind и среднее расстояние от центра всех вокселов - Large)
Ind:Integer;
Large:Single;
end;
TLeadSet = set of TLeads; - Структурный тип - cписок отведений тип TLeads
Тип TLeads - Отведение (описан в файле BrainMapData)
TLeads = (Fp1, Fpz, Fp2, Nz, SO1, SO2, IO1, IO2, AF9, AF7, AF5, AF3, AF1, AFz, AF2, AF4, AF6, AF8, AF10, F9, F7, F5, F3, F1, Fz,
F2, F4, F6, F8, F10, FT9, FT7, FC5, FC3, FC1, FCz, FC2, FC4, FC6, FT8, FT10, T9, T7_T3, C5, C3, C1, Cz, C2, C4,
C6, T8_T4, T10, TP9, TP7, CP5, CP3, CP1, CPz, CP2, CP4, CP6, TP8, TP10, P9, P7_T5, P5, P3, P1, Pz, P2, P4, P6, P8_T6, P10, PO9, PO7, PO5, PO3, PO1, POz, PO2, PO4, PO6, PO8, PO10, O1, Oz, O2, O9, O10, CB1, CB2, Iz, M1, M2, A1, A2,
T1, T2, Unq);
//Объект Воксель на карте мозга
TVoxel=class(TObject)
constructor Create();
- Создать объект
function Resist(X,Y,Z:Single):Double
;overload; - Получить сопротивление до точки
function Resist(Coord:TVoxelCoord):Double
;overload; - Получить сопротивление до точки заданной структурой TVoxelCoord
procedure DrawPlane(Plane:TPlane; Level:Integer);
///Нарисовать Воксел на сечении TPlane Разрез мозга уровня Level (если он присутствует в сечении)
procedure Draw3D()
; ///Нарисовать воксел на 3х срезах мозга в 3х плоскостях
property Num:Integer - Номер Воксела по порядку в карте (Координаты вокселов, то к какис долям, структурам и полям мозга они относятся даны в массивах описанных в BrainMapData.pas)
property X:Single;
- координата воксела по горизонтали во фронтальной и горизонтальной плоскости
property Y:Single;
- координата воксела по горизонтали в сагиттальной плоскости и по вертикали в горизонтальной плоскости
property Z:Single
; - координата воксела по вертикали во фронтальной и сагиттальной плоскости
property Coord:TVoxelCoord ; - координаты воксела
property Activation:Double
; - электрический потенциал воксела (соответствует потенциалу центра к которому он принадлежит
property Repainting:Boolean
; - флаг прорисовывания воксела при активации центра
property Lobe:TBrainLobes
; - Доля мозга к которой относится Воксел из структуры TBrainLobes описанной в файле BrainMapData.pas
property LobeName:String
; - Название доли мозга к которой относится Воксел
property BrainStructure:TBrainStructures
; - Структура мозга к которой относится Воксел из структуры TBrainStructures описанной в файле BrainMapData.pas
property StructureName:String
; - Название структуры мозга к которой относится Воксел
property BrodmanArea:TBrodmanAreas
; - Поле по атласу Бродмана к которой относится Воксел из структуры TBrodmanAreas описанной в файле BrainMapData.pas
property BrodmanAreaName:String
; - Название поля по Бродману к которой относится Воксел
property Cluster[NumCluster:Integer]:Integer ; - Номер кластера (центра), к которому относится Воксел NumCluster - общее количество кластеров в модели - варианты: 30 кластеров, 39 кластеров, 55 кластеров
property ROI:Boolean; - Зарезервировано
////////////////////////////// Объект Отведение
TLead = class(TObject)
function Resist(X,Y,Z:Single):Double
;overload; - Получить сопротивление до точки с координатами XYZ
function Resist(Coord:TVoxelCoord):Double
;overload; - Получить сопротивление до Воксела
property Coord:TVoxelCoord
; - Координаты отведения
property Num:Integer
; - Номер отведения в списке
property X:Single
; - X - Координата электрода см координаты воксела ...
property Y:Single;
- Y - Координата электрода см координаты воксела ...
property Z:Single;
- Y - Координата электрода см координаты воксела ...
property Name:String
; - Название отведения
property InputValue:Single
; - Входной потенциал на электроде
property OutputValue:Single
; - Спрогнозированный потенциал на электроде после активации сети
property TargetValue:Single
; - Целевой потенциал на электроде после загрузки целевых значений при обучении
///////////////////////////////////////
Список Отведений используемых в модели
TLeadsMap = class(TObjectList<TLead>)
constructor Create(Owner:TBCNNMap;LeadList: array of TLeads);
- Создать список Owner - Модель BCNNMap к которой принадлежит список, LeadList - Динамисеский массив элементов TLeads список отведений
function AddLead(Lead:TLeads):TLead;
- Добавить отведение в список
procedure LoadList(LeadList: array of TLeads);
- Загрузить список отведений из массива LeadList
property LeadList:TLeadSet read fLeadList; -
Структурный тип содержащий все отведения
property Input[Lead:TLeads]:Single;
- Значение начального потенциала на электроде Lead
property Output[Lead:TLeads]:Single
; - Спрогнозированный потенциал на электроде Lead после активации сети
property Sigma[Lead:TLeads]:Single
; - Ошибка прогноза на электроде Lead в процессе обучения
///////////////////////////////////////
Объект Карта Вокселов - список всех вокселов на карте
TBrainMap = class(TObjectList<TVoxel>)
constructor Create(Owner:TBCNNMap);
- Создать список вокселов принадлежащий модели Owner
function Point2Coord(point:TPoint):TVoxelCoord
; - преобразовать точку на срезе карты в координаты воксела
function Point2Target(point:TPoint):TVoxelCoord;
- преобразовать точку на срезе карты в координаты воксела и сделать его центральным
procedure Draw(Plane:TPlane;Level:Integer); -
нарисовать срез мозга в плоскости Plane и на уровне Level
procedure Draw3D
; - нарисовать срезы 3х плоскостей содержащих точку TargetVoxel
procedure SetCanvas(Value:TCanvas);
- Установить канву компонента для рисования срезов мозга
function Search(X,Y,Z:Single):TVoxel;
- Найти воксел ближайший к координатам X,Y,Z
function GetRes(X,Y,Z:Single):TArray1D;overload;
- Получить сопротивление
function GetRes(Coord:TVoxelCoord):TArray1D;overload
; - Получить массив сопротивлений от каждого воксела до точки X,Y,Z
function GetDists:TArray2D
; - Получить матрицу расстояний между всеми вокселами;
property BrainRect[Index:TPlane]:TRect
; - Массив прямоугольных областей TRect для всех 3х сечений мозга
property ScaleRect:TRect
; - Прямоугольная область для отображения шкалы цветовой температуры отражающей потенциал воксела
property TargetVoxel:TVoxelCoord; -
Центральный воксел, отображаемый на всех 3 сечениях мозга
property Repainting:Boolean
; - Флаг интерактивной отображения активации вокселов на карте мозга в процессе активации нейросети
property ColorGrad:Double
; - Коэффициент преобразующий потенциал мозга в цветовую температуру. По умолчанию 0.5
Объект - Список вокселов соответствующих одному центру мозга
TBrainCenter = class(TObjectList<TVoxel>)
constructor Create(Owner:TBrainCentersList;CenterType:TCenterType;CenterVoxel:TVoxel);
- Создать список центров Owner - Сеть BCNNMap владелец, CenterType - Тип списка (ctLobe - Доли мозга, ctStructure - Структуры мозга, ctBrArea - поля по Бродману, ctCluster - Кластеры вокселов имеющих сходные матрицы сопротивлений до 29 электродов в системе 10-10%), ctSome - отдельные вокселы выбранные по порядку), CenterVoxel - Воксел, находящийся ближе к геометрическому центру группы вокселов, относящихся к этому центру и имеющий максимально подобную всем вокселам матрицу связей с центрами
procedure Draw;
Нарисовать активации центров и вокселов к ним примыкающих на карте мозга
property Num:Integer; - Номер центра
property CenterType:TCenterType read fType write fType; - Тип Центра - (ctLobe - Доли мозга, ctStructure - Структуры мозга, ctBrArea - поля по Бродману, ctCluster - Кластеры вокселов имеющих сходные матрицы сопротивлений до 29 электродов в системе 10-10%), ctSome - отдельные вокселы выбранные по порядку),
property CenterVox:TVoxel; - Воксел, являющийся геометрическим центром всех вокселов данной группы вокселов
property NeuronT0:TNeuron; - Нейрон, соответствующий данному центру в момент Ti
property NeuronT1:TNeuron; - Нейрон, соответствующий данному центру в момент Ti+1
property DrawingType:TDrawingType; - Тип отображения цветом активации центра - TDrawingType см. выше
Объект - Список центров мозга
TBrainCentersList = class(TObjectList<TBrainCenter>)
constructor Create(Owner:TBCNNMap;CRType:TCenterType;CenterCount:Integer); - Создать список центров Owner - сеть BCNNMap владелец, CRType - Тип центров TCenterType см. выше, CenterCount - Количество центров (необходимо для ctCluster или ctSome, для остальных не имеет значения)
function GetActivationsT0:TArray1D; - Получить матрицу активаций центров соответствующую электрическим потенциалам в момент Ti
function GetActivationsT1:TArray1D; Получить матрицу активаций центров соответствующую электрическим потенциалам в момент Ti+1
function GetSigmasT0:TArray1D; -Получить матрицу долей ошибки детерминированных центрами на выходе нейросети в момент Ti
function GetSigmasT1:TArray1D; -Получить матрицу долей ошибки детерминированных центрами на выходе нейросети в момент Ti+1
Объект - Нейросеть TBCNN (Описанная в BCNNLib.pas) содержащий также список электродов Leads:TLeadsMap, список центров Centers:TBrainCentersList, список вокселов BrainMap:TBrainMap
TBCNNMap = class(TBCNN)
constructor Create(Owner:TComponent;Electrodes:array of TLeads;CenterType:TCenterType;CenterCount:Integer;InvMatr:Boolean); - Создать сеть BCNNMap с владельцем Owner, списком электродов - динамическим массивом элементов TLeads - Electrodes, имеющем тип центров TCenterType см. выше, количеством центров CenterCount, Типом обратной матрицы на входе InvMatr True - псевдообратная, False - обучаемый 3х-слойный перцептрон.
destructor Free(); - Удалить сеть и освободить память
procedure SetMontage(Electrodes:array of TLeads); - Установить монтаж (создать новый список TLeadList и новую матрицу связей и нейронов)
procedure Activate(InputVec:TArray1D);overload; - Активация сети входным массивом - вектором потенциалов на электродах
procedure StepContext; - Пройти еще шаг активируя центры (передать потенциалы центров Ti+1 на центры Ti и активировать слой Ti+1 и выходной слой еще раз)
procedure SetMap(); - Нарисовать активации на карте
procedure SaveToXML(FileName:String); - Сохранить сеть в XML файл - FileName
procedure LoadFromXML(FileName:String); - Загрузить сеть из файла XML - FileName
property Electrodes:TLeadsMap; - Список объектов TLead - электродов см. выше
property BrainMap:TBrainMap; - Список объектов TVoxel - вокселов см. выше
property Leads:TLeadsMap; - Список объектов TLead - электродов см. выше
property Centers:TBrainCentersList; - Список объектов TBrainCenter - центров мозга см. выше
property Lead[Index:TLeads]:TLead; - Получить Объект электрод по Индексу TLeads см. выше
//Общие процедуры
//Получить название Доли мозга
function GetLobeText(Lobe:TBrainLobes):String;
//Получить название Структуры мозга
function GetStructureText(Structure:TBrainStructures):String; //Название структуры мозга
//Получить название Поя по Бродману мозга
function GetBrodmanAreaText(BrodmanArea:TBrodmanAreas):String; //Название Поля по бродману
//Получить дистанцию в Евклидовом пространстве между точками T1 и T2 с координатами TVoxelCoord
function Dist(T1,T2:TVoxelCoord):Double;
begin
Result:=SQRT(Sqr(T1.X-T2.X)+Sqr(T1.Y-T2.Y)+Sqr(T1.Z-T2.Z));
end;
//Возвращает номер воксела в массивах который ближе всего к центру доли Dextra True - правое False Левое полушарие
function GetLobeCenterVox(Lobe:TBrainLobes;Dextra:Boolean):TParVox;
//Возвращает номер воксела в массивах который ближе всего к центру структуры Dextra True - правое False Левое полушарие
function GetStrucCenterVox(Structure:TBrainStructures;Dextra:Boolean):TParVox;
//Возвращает номер воксела в массивах который ближе всего к центру поля по Бродману Dextra True - правое False Левое полушарие
function GetBrodmACenterVox(Barea:TBrodmanAreas;Dextra:Boolean):TParVox;
//Возвращает номер воксела в массивах который ближе всего к центру Кластера
//Cluster - номер кластера, ClusterCount - количество кластеров, VoxClusterList - массив со списком принадлежности вокселов к кластерам описаны в файле BrainMapData
function GetClusterCenterVox(Cluster:Integer;ClusterCount:Integer;const VoxClusterList:array of Integer):TParVox;