function center_likelihood = getCenterLikelihood(object_likelihood, m) %GETCENTERLIKELIHOOD computes the sum over rectangles of size M. % CENTER_LIKELIHOOD is the 'colour response' [h,w] = size(object_likelihood); n1 = h - m(1) + 1; n2 = w - m(2) + 1; %% equivalent MATLAB function SAT = integralImage(object_likelihood); i = 1:n1; j = 1:n2; center_likelihood = (SAT(i,j) + SAT(i+m(1), j+m(2)) - SAT(i+m(1), j) -SAT(i, j+m(2))) / prod(m); end
时间: 2024-04-03 18:34:44 浏览: 104
这段代码是用来计算一个矩阵中大小为M的矩形的像素值之和的平均值,也可以看作是该矩形的颜色响应值。这个函数的输入参数object_likelihood是一个二维矩阵,表示某个物体的像素概率分布,而m是一个长度为2的向量,表示矩形的高度和宽度。其中,SAT是输入矩阵的积分图像,用于加速像素值之和的计算。最后,函数返回值center_likelihood是一个标量,表示矩形的颜色响应值的平均值。
相关问题
function center_likelihood = getCenterLikelihood(object_likelihood, m) %GETCENTERLIKELIHOOD computes the sum over rectangles of size M. % CENTER_LIKELIHOOD is the 'colour response' [h,w] = size(object_likelihood); n1 = h - m(1) + 1; n2 = w - m(2) + 1; %% equivalent MATLAB function SAT = integralImage(object_likelihood); i = 1:n1; j = 1:n2; center_likelihood = (SAT(i,j) + SAT(i+m(1), j+m(2)) - SAT(i+m(1), j) - SAT(i, j+m(2))) / prod(m); end
这是一个 MATLAB 函数,用于计算输入的概率图像 object_likelihood 中,所有大小为 m 的矩形区域的像素值之和的均值。这里用到了积分图像的技术,先通过 integralImage 函数计算出 object_likelihood 的积分图像 SAT,然后利用 SAT 的性质快速计算矩形区域的像素值之和。最后将像素值之和除以矩形区域的像素数 prod(m),得到均值作为该矩形区域的中心响应 center_likelihood。
具体来说,该函数首先获取 object_likelihood 的大小 [h,w],然后计算出可以包含大小为 m 的矩形区域的行数 n1 和列数 n2。接着调用 integralImage 函数计算出 object_likelihood 的积分图像 SAT。然后利用两个循环变量 i 和 j,分别遍历所有可以包含大小为 m 的矩形区域的起始行和起始列。对于每个起始位置,利用 SAT 计算该矩形区域的像素值之和,并将其除以矩形区域的像素数 prod(m) 得到均值 center_likelihood。最后将所有矩形区域的均值存储到 center_likelihood 中并返回。
详细解释一下这段代码 % extract patch of size bg_area and resize to norm_bg_area im_patch_cf = getSubwindow(im, pos, p.norm_bg_area, bg_area); pwp_search_area = round(p.norm_pwp_search_area / area_resize_factor); % extract patch of size pwp_search_area and resize to norm_pwp_search_area im_patch_pwp = getSubwindow(im, pos, p.norm_pwp_search_area, pwp_search_area); % compute feature map xt = getFeatureMap(im_patch_cf, p.feature_type, p.cf_response_size, p.hog_cell_size); % apply Hann window xt_windowed = bsxfun(@times, hann_window, xt); % compute FFT xtf = fft2(xt_windowed); % Correlation between filter and test patch gives the response % Solve diagonal system per pixel. if p.den_per_channel hf = hf_num ./ (hf_den + p.lambda); else hf = bsxfun(@rdivide, hf_num, sum(hf_den, 3)+p.lambda); end response_cf = ensure_real(ifft2(sum(conj(hf) .* xtf, 3))); % Crop square search region (in feature pixels). response_cf = cropFilterResponse(response_cf, ... floor_odd(p.norm_delta_area / p.hog_cell_size)); if p.hog_cell_size > 1 % Scale up to match center likelihood resolution. response_cf = mexResize(response_cf, p.norm_delta_area,'auto'); end [likelihood_map] = getColourMap(im_patch_pwp, bg_hist, fg_hist, p.n_bins, p.grayscale_sequence); % (TODO) in theory it should be at 0.5 (unseen colors shoud have max entropy) likelihood_map(isnan(likelihood_map)) = 0; % each pixel of response_pwp loosely represents the likelihood that % the target (of size norm_target_sz) is centred on it response_pwp = getCenterLikelihood(likelihood_map, p.norm_target_sz);
这段代码是跟踪算法中的一部分。它将目标模板和当前帧中的搜索区域进行相关运算,以测量目标在搜索区域中的相似度,然后根据相似度对搜索区域进行排名,找到最可能的目标位置。具体地:
- 首先,从当前帧中提取两个不同大小的图像块,即目标模板和搜索区域,并将它们调整为算法所需的标准大小(norm_bg_area和norm_pwp_search_area)。
- 接着,对目标模板进行特征提取,生成一个特征图(xt)。
- 对特征图应用汉宁窗口,然后对窗口后的特征图进行FFT变换,得到频域特征图(xtf)。
- 计算目标模板和搜索区域的频域特征图的相关性,以得到搜索区域的响应(response_cf)。
- 裁剪响应图,只保留与目标大小相似的部分,然后根据HOG单元大小对响应图进行放缩,以与中心似然图的分辨率匹配。
- 对搜索区域进行颜色直方图计算,得到中心似然图(likelihood_map)。
- 将中心似然图中的NaN值设置为0。
- 最后,使用中心似然图计算每个像素点对于目标中心位置的可能性,生成响应图(response_pwp)。
这些响应图最终会被组合在一起,以找到最可能的目标位置。
阅读全文