【问题标题】:Matlab ordfilt2 or alternatives for weighted local maxMatlab ordfilt2 或加权局部最大值的替代方案
【发布时间】:2013-11-27 19:20:23
【问题描述】:

我想在 Matlab 中计算向量的加权最大值。对于加权最大值,我打算如下:

给定一个2*N+1 权重W={w[-N], w[-N+1] .. w[0] .. w[N]} 的向量和一个输入序列A,加权最大值是一个向量M,其中m[i]=max(w[-N]*a[i-N], w[-N+1]*a[i-N+1], ... w[N]*a[i+N])

例如,给定一个向量A= [1, 4, 12, 2, 4] 和权重W=[0.5, 1, 0.5],加权最大值将为M=[2, 6, 12, 6, 4]。

这可以使用ordfilt2 完成,但ordfilt2 使用权重作为加法而不是乘法。

我实际上正在研究 4D 矩阵,但任何 1D 解决方案都可以工作,因为 4D 权重矩阵是可分离的。

我当前的解决方案是生成输入数组A 的移位副本,根据移位对它们进行加权并最大化所有数组。 Shift 使用circshift 执行,是该过程中的瓶颈。通过索引“手动”生成移位矩阵的速度甚至更慢。

您能提出更有效的解决方案吗?

编辑:对于肯定的 A,M=exp(ordfilt2(log(A), length(W), ones(size(W)), log(W))) 完成了这项工作,但仍然比上面的 circshift 解决方案花费更长的时间。我仍在寻找更有效的解决方案。

【问题讨论】:

    标签: matlab max morphological-analysis


    【解决方案1】:
    >> B = padarray(A, [0 floor(numel(W)/2)], 0); % Pad A with zeros
    >> B = bsxfun(@times, B(bsxfun(@plus, 1:numel(B)-numel(W)+1, (0:numel(W)-1)')), W(:)); % Apply the weights
    >> M = max(B)  % Compute the local maxima
    M =
         2     6    12     6     4
    

    【讨论】:

    • 这可能会也可能不会比 ordfilt2 更有效!把它放在你的实际问题上,然后看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2021-10-07
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多