0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 function [ featureVect, varParams ] = extractVarsDist( trackCell, aoiPositions, maxDist, relevantAOIs, varParams )
0030
0031
0032
0033 if ~isfield( 'varParams', 'imageSize'); varParams.imageSize = [1024; 1280]; end
0034
0035 if ~isfield( 'varParams', 'fixMinNumSamples'); varParams.fixMinNumSamples = 6; end
0036 if ~isfield( 'varParams', 'fixMaxCircleRadius'); varParams.fixMaxCircleRadius = 15; end
0037
0038 if ~isfield( 'varParams', 'velThreshold'); varParams.velThreshold = 20; end
0039 if ~isfield( 'varParams', 'stopThreshold'); varParams.stopThreshold = 8; end
0040
0041 if ~isfield( 'varParams', 'startFixation'); varParams.startFixation = 1; end
0042 if ~isfield( 'varParams', 'numFixationInSeq'); varParams. numFixationInSeq = 7; end
0043 if ~isfield( 'varParams', 'startSaccade'); varParams.startSaccade = 1; end
0044 if ~isfield( 'varParams', 'numSaccadesInSeq'); varParams.numSaccadesInSeq = 7; end
0045
0046
0047
0048
0049
0050 imageSize = varParams.imageSize;
0051 fixMinNumSamples = varParams.fixMinNumSamples;
0052 fixMaxCircleRadius = varParams.fixMaxCircleRadius;
0053 velThreshold = varParams.velThreshold;
0054 stopThreshold = varParams.stopThreshold;
0055 startFixation = varParams.startFixation;
0056 numFixationInSeq = varParams.numFixationInSeq;
0057 startSaccade = varParams.startSaccade;
0058 numSaccadesInSeq = varParams.numSaccadesInSeq;
0059
0060
0061
0062
0063
0064 if ~iscell( trackCell );
0065 temp = trackCell; clear trackCell
0066 trackCell{1} = temp; clear temp
0067 end
0068 numSamples = length(trackCell );
0069
0070 numAOI = size( aoiPositions,2);
0071
0072
0073 varParams.dimPerFeat = [ numAOI; numAOI*numFixationInSeq; numFixationInSeq; 1; ...
0074 1; 1; 1; ...
0075 numAOI*numSaccadesInSeq; numAOI; 1;
0076 2*numFixationInSeq ; 2*numSaccadesInSeq ];
0077 varParams.dimNames = { 'AOIFixDensity'; 'AOIFixationSeq'; 'AOIFixationDuration'; 'relevantAOIFixDensVersusAll'; ...
0078 'totalDistTraveled'; 'numUniqueAOIsVisitedFixation'; 'latencyFirstRelAOIFixation'; ...
0079 'AOISaccadeSeq'; 'AOISaccadeToDensity'; 'latencyFirstRelAOISaccade'; ...
0080 'relNonRelFixSeq'; 'relNonRelSacSeq'};
0081 featureVect = zeros( sum(varParams.dimPerFeat ), numSamples);
0082
0083
0084
0085
0086 for k1 =1:numSamples
0087 if max(real(trackCell{k1})) <= 1
0088 eyePos = trackCell{k1};
0089 end
0090 [ eyePos ] = scaleEyeTrack( eyePos, imageSize );
0091
0092 [ fixStruct ] = codeFixationsDist( eyePos, fixMinNumSamples, fixMaxCircleRadius );
0093 [ sacStruct ] = codeSaccadesDist( eyePos, velThreshold, stopThreshold);
0094
0095
0096
0097
0098 [ AOIDensity numRealFix] = calcAOIFixDensityDist( fixStruct, aoiPositions, maxDist );
0099
0100
0101 relAOIVersusAll = [ sum(AOIDensity(relevantAOIs))];
0102
0103
0104 [ AOISeq AOIDur ] =calcAOIFixSequenceDist( fixStruct, aoiPositions, maxDist, numFixationInSeq+startFixation-1 );
0105 AOISeq = AOISeq(:, startFixation:end);
0106 AOIDur = AOIDur(startFixation:end);
0107
0108
0109
0110
0111
0112 distTraveled =calcDistTraveled( eyePos );
0113
0114
0115 numUniqAOIs = length(find( AOIDensity>0));
0116
0117
0118 latencyFirstRelAOI =calcLatencyRelAOIFixDist( fixStruct, aoiPositions, maxDist, relevantAOIs);
0119
0120
0121 [AOIDensitySac ] =calcAOISacDensityDist( sacStruct, aoiPositions, maxDist );
0122
0123
0124 [ AOISacSequence ] = calcAOISacSequenceDist( sacStruct, aoiPositions, maxDist, numSaccadesInSeq+startSaccade-1 );
0125 AOISacSequence = AOISacSequence(:,startSaccade:end);
0126
0127
0128 latencyFirstRelAOISac = calcLatencyRelAOISacDist( sacStruct, aoiPositions, maxDist, relevantAOIs );
0129
0130
0131 relIrelFixSeq =calcIrrRelSeq( AOISeq, relevantAOIs );
0132 relIrelSacSeq =calcIrrRelSeq( AOISacSequence, relevantAOIs );
0133
0134
0135
0136 featureVect(:,k1) = [ AOIDensity; AOISeq(:); AOIDur(:); relAOIVersusAll; ...
0137 distTraveled; numUniqAOIs; latencyFirstRelAOI; ...
0138 AOISacSequence(:); AOIDensitySac; latencyFirstRelAOISac; ...
0139 relIrelFixSeq(:); relIrelSacSeq(:) ];
0140
0141 end