过滤3D矩阵中的值

时间:2013-09-26 12:36:29

标签: matlab matrix filter threshold

我几乎肯定必须有一种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,:)置为零。

1 个答案:

答案 0 :(得分:3)

这是一个简单的单行:

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

或者这种可能更有效的替代方案(尽管一些基本测试表明其他方面让我感到惊讶):

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

虽然对您的代码有一些评论:

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;