0001 function [model_alphaf, model_alphaDf, model_xf, model_xDf]=modelUpdateDSKCF(...
0002 firstFrame,patch,patch_depth,features,cell_size,cos_window,kernel,yf,...
0003 lambda,model_alphaf, model_alphaDf, model_xf, model_xDf,scaleUpdate,interp_factor)
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
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049 if(features.hog_linear)
0050
0051
0052 [xf xDf]=get_features_depth(patch,patch_depth, features, cell_size, cos_window);
0053 xf=fft2(xf);
0054 xDf=fft2(xDf);
0055
0056 switch kernel.type
0057 case 'gaussian',
0058 kf = gaussian_correlation(xf, xf, kernel.sigma);
0059 kDf = gaussian_correlation(xDf, xDf, kernel.sigma);
0060 case 'polynomial',
0061 kf = polynomial_correlation(xf, xf, kernel.poly_a, kernel.poly_b);
0062 kDf = polynomial_correlation(xDf, xDf, kernel.poly_a, kernel.poly_b);
0063 case 'linear',
0064 kf = linear_correlation(xf, xf);
0065 kDf = linear_correlation(xDf, xDf);
0066 end
0067
0068 alphaf = yf ./ (kf + lambda);
0069 alphaDf = yf ./ (kDf + lambda);
0070
0071 if (firstFrame),
0072 model_alphaf = alphaf;
0073 model_alphaDf = alphaDf;
0074 model_xf = xf;
0075 model_xDf = xDf;
0076 else
0077
0078 if(scaleUpdate)
0079 model_alphaf = updownsample_fourier( model_alphaf,size(alphaf,2),size(alphaf ,1));
0080 model_alphaDf = updownsample_fourier( model_alphaDf,size(alphaf,2),size(alphaf ,1));
0081 model_xf_ = xf;
0082 model_xDf_ = xDf;
0083 for i = 1:size(xf,3)
0084 model_xf_(:,:,i) = updownsample_fourier( model_xf(:,:,i),size(xf,2),size(xf ,1));
0085 model_xDf_(:,:,i) = updownsample_fourier( model_xDf(:,:,i),size(xDf,2),size(xDf ,1));
0086 end
0087 model_xf = model_xf_;
0088 model_xDf = model_xDf_;
0089
0090 model_alphaf = (1 - interp_factor) * model_alphaf + interp_factor * alphaf;
0091 model_xf = (1 - interp_factor) * model_xf + interp_factor * xf;
0092
0093 model_alphaDf = (1 - interp_factor) * model_alphaDf + interp_factor * alphaDf;
0094 model_xDf = (1 - interp_factor) * model_xDf + interp_factor * xDf;
0095 else
0096
0097 model_alphaf = (1 - interp_factor) * model_alphaf + interp_factor * alphaf;
0098 model_xf = (1 - interp_factor) * model_xf + interp_factor * xf;
0099
0100 model_alphaDf = (1 - interp_factor) * model_alphaDf + interp_factor * alphaDf;
0101 model_xDf = (1 - interp_factor) * model_xDf + interp_factor * xDf;
0102 end
0103 end
0104
0105 else
0106
0107 [xf ~]=get_features_depth(patch,patch_depth, features, cell_size, cos_window);
0108 xf=fft2(xf);
0109
0110 switch kernel.type
0111 case 'gaussian',
0112 kf = gaussian_correlation(xf, xf, kernel.sigma);
0113 case 'polynomial',
0114 kf = polynomial_correlation(xf, xf, kernel.poly_a, kernel.poly_b);
0115 case 'linear',
0116 kf = linear_correlation(xf, xf);
0117 end
0118 alphaf = yf ./ (kf + lambda);
0119
0120 if (firstFrame),
0121 model_alphaf = alphaf;
0122 model_xf = xf;
0123 else
0124
0125
0126 if(scaleUpdate)
0127
0128 bigger_flag = 0;
0129 noChangeFlag= 0;
0130 if size(alphaf ,1) > size(model_alphaf, 1)
0131
0132 bigger_flag = 0;
0133 elseif size(alphaf ,1) == size(model_alphaf, 1)
0134
0135 noChangeFlag=1;
0136 else
0137
0138 end
0139
0140 if bigger_flag
0141 model_alphaf = updownsample_fourier_leave_gain( model_alphaf,size(alphaf,2),size(alphaf ,1), alphaf);
0142 model_xf_ = xf;
0143 for i = 1:size(xf,3)
0144 model_xf_(:,:,i) = updownsample_fourier_leave_gain( model_xf(:,:,i),size(xf,2),size(xf ,1), xf(:,:,i));
0145 end
0146 model_xf = model_xf_;
0147
0148 elseif(noChangeFlag)
0149 aaaaa=0;
0150 else
0151 model_alphaf = updownsample_fourier( model_alphaf,size(alphaf,2),size(alphaf ,1));
0152 model_xf_ = xf;
0153 for i = 1:size(xf,3)
0154 model_xf_(:,:,i) = updownsample_fourier( model_xf(:,:,i),size(xf,2),size(xf ,1));
0155 end
0156 model_xf = model_xf_;
0157 end
0158
0159 if bigger_flag
0160
0161 else
0162 model_alphaf = (1 - interp_factor) * model_alphaf + interp_factor * alphaf;
0163 model_xf = (1 - interp_factor) * model_xf + interp_factor * xf;
0164 end
0165
0166 else
0167 model_alphaf = (1 - interp_factor) * model_alphaf + interp_factor * alphaf;
0168 model_xf = (1 - interp_factor) * model_xf + interp_factor * xf;
0169 end
0170 end
0171 model_alphaDf=[];
0172 model_xDf=[];
0173 end
0174
0175 end