【问题标题】:Filter values out of a 3D matrix从 3D 矩阵中过滤值
【发布时间】:2013-10-02 10:28:52
【问题描述】:

我几乎可以肯定必须有一个 MATLAB 方法来解决这个问题,但我没有太多经验:

width=length(hsvSecond(:,1,1));
height=length(hsvSecond(1,:,1));
for i=1:width
    for j=1:height
        if(hsvSecond(i,j,2)>0.35)
            hsvSecond(i,j,1)=0;
            hsvSecond(i,j,2)=0;
            hsvSecond(i,j,3)=0;
        end    
    end
end

所以,基本上,如果hsvSecond(i,j,2) 的值大于一个数字,我想将hsvSecond(i,j,:) 置为零。

【问题讨论】:

    标签: matlab matrix filter threshold


    【解决方案1】:

    这是一个简单的单行:

    hsvSecond(repmat(hsvSecond(:,:,2) > 0.35, [1,1,3])) = 0;
    

    或者这个可能更有效的替代方案(尽管一些初步测试表明并非如此,这确实让我感到惊讶):

    hsvSecond = bsxfun(@times, hsvSecond(:,:,2) <= 0.35, hsvSecond)
    

    您的代码中有一些 cmets:

    width=length(hsvSecond(:,1,1));
    height=length(hsvSecond(1,:,1));
    

    应该是

    width = size(hsvSecond,1)
    height = size(hsvSecond,2)
    

    hsvSecond(i,j,1)=0;
    hsvSecond(i,j,2)=0;
    hsvSecond(i,j,3)=0;
    

    本来可以

    hsvSecond(i,j,:)=0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-01
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多