An oscillatory neural model of multiple object tracking (Kazanovich and Borisyuk 2006)

 Download zip file 
Help downloading and running models
Accession:79145
An oscillatory neural network model of multiple object tracking is described. The model works with a set of identical visual objects moving around the screen. At the initial stage, the model selects into the focus of attention a subset of objects initially marked as targets. Other objects are used as distractors. The model aims to preserve the initial separation between targets and distractors while objects are moving. This is achieved by a proper interplay of synchronizing and desynchronizing interactions in a multilayer network, where each layer is responsible for tracking a single target. The results of the model simulation are presented and compared with experimental data. In agreement with experimental evidence, simulations with a larger number of targets have shown higher error rates. Also, the functioning of the model in the case of temporarily overlapping objects is presented.
Reference:
1 . Kazanovich Y, Borisyuk R (2006) An oscillatory neural model of multiple object tracking. Neural Comput 18:1413-40 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network;
Brain Region(s)/Organism:
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: C or C++ program;
Model Concept(s): Oscillations; Spatio-temporal Activity Patterns; Simplified Models;
Implementer(s): Kazanovich, Yakov [yakov_k at impb.psn.ru]; Borisyuk, Roman [rborisyuk at plymouth.ac.uk];
// Stimgen.cpp : Generation of the image with 9 circles
// Project MOT
// 6 objects in the field 19 x 60
// Kazanovich June 2005

// DON'T FORGET! If you change Stimgen.cpp, change the parameters nrows, ncolumns, nobj



#include "StdAfx.h"
#include "Mot.h"

extern struct image im;
extern struct imageproc improc;

// 10 objects

const int objx0 = 10;
const int objy0 = 10;
const int objdx = 10;
const int objdy = 10;

void Stimgen()
{
	int i, j, k;

	//***** Initial parameters of the image *****

	for (k = 0; k < nobj; k++)
	{
		switch (k)
		{
			case 0:
			{
				im.obj[0].cx = objx0;	
				im.obj[0].cy = objy0;
				im.obj[0].type = target;
				im.obj[0].priority = 1;
				break;
			}
			case 1:
			{
				im.obj[1].cx = objx0 + objdx;
				im.obj[1].cy = objy0;
				im.obj[1].type = target;
				im.obj[1].priority = 2;
				break;
			}
			case 2:
			{
				im.obj[2].cx = objx0 + 2*objdx;
				im.obj[2].cy = objy0;
				im.obj[2].type = distractor;
				im.obj[2].priority = 3;
				break;
			}
			case 3:
			{
				im.obj[3].cx = objx0 + 3*objdx;
				im.obj[3].cy = objy0;
				im.obj[3].type = target;
				im.obj[3].priority = 4;
				break;
			}
			case 4:
			{
				im.obj[4].cx = objx0 + 4*objdx;
				im.obj[4].cy = objy0;
				im.obj[4].type = distractor;
				im.obj[4].priority = 5;
				break;
			}
			case 5:
			{
				im.obj[5].cx = objx0;
				im.obj[5].cy = objy0 + objdy;
				im.obj[5].type = distractor;
				im.obj[5].priority = 6;
				break;
			}
			case 6:
			{
				im.obj[6].cx = objx0 + objdx;
				im.obj[6].cy = objy0 + objdy;
				im.obj[6].type = target;
				im.obj[6].priority = 7;
				break;
			}
			case 7:
			{
				im.obj[7].cx = objx0 + 2*objdx;
				im.obj[7].cy = objy0 + objdy;
				im.obj[7].type = distractor;
				im.obj[7].priority = 8;
				break;
			}
			case 8:
			{
				im.obj[8].cx = objx0 + 3*objdx;
				im.obj[8].cy = objy0 + objdy;
				im.obj[8].type = distractor;
				im.obj[8].priority = 9;
				break;
			}
			case 9:
			{
				im.obj[9].cx = objx0 + 4*objdx;
				im.obj[9].cy = objy0 + objdy;
				im.obj[9].type = target;
				im.obj[9].priority = 10;
			}
		}
	}


//***** Generation of pixel intensities *****

	for (i = 0; i < nrows; i++)
		for (j = 0; j < ncolumns; j++)
		{
			double intens = 0.0;
			double saliency = 0.0;
			int priority = 0;
			
			for (k = 0; k < nobj; k++)
			{
				double distx = fabs(im.obj[k].cx - j);
				double disty = fabs(im.obj[k].cy - i);
				if (distx <= im.r && disty <= im.r &&
					priority < im.obj[k].priority)
				{
					if (im.obj[k].type == distractor)
					{	
						intens = improc.intensdistract; 
						saliency = improc.lowsaliency;
					}
					if (im.obj[k].type == target)
					{	
						intens = improc.intenstarget; 
						saliency = improc.highsaliency;
					}
					priority = im.obj[k].priority;
				}
			}
			im.intens[i][j] = intens;
			im.saliency[i][j] = saliency;
		}
}