⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmm_reduce_merge.m

📁 高斯滤波器 matlab toolbox For GMMs and Gaussian kernels
💻 M
字号:
function g = gmm_reduce_merge(g, N)
% Based on Mike West's merge-smallest algorithm

if size(g.x,2) <= N, return, end
g = gmm_remove_zeros(g);

while size(g.x,2) > N

    % Select min weight kernel
    wmin = min(g.w);
    i = find(g.w == wmin);
    if length(i) > 1
        idx = ceil(rand(1)*length(i));
        i = i(idx);
    end
    
    % Find its nearest neighbour (weighted Mahalanobis)
    w = wmin*g.w ./ (wmin + g.w);
    v = g.x - repcol(g.x(:,i), size(g.x,2));
    M = distance_mahalanobis(v, g.P(:,:,i)) .* w; % ?? using only the covariance of component i (why?)
    M(i) = NaN;
    [Mmin, j] = min(M);
    
    % Merge components into element i
    idx = [i j];
    gtmp.x = g.x(:,idx);
    gtmp.P = g.P(:,:,idx);
    gtmp.w = g.w(idx);
    [g.x(:,i), g.P(:,:,i), g.w(i)] = gmm_to_gaussian(gtmp);

    % Remove element j
    merge = logical(ones(size(g.w)));
    merge(j) = 0;
    g.x = g.x(:,merge);
    g.P = g.P(:,:,merge);
    g.w = g.w(merge);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -