1

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

4

1 回答 1

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;
于 2013-09-26T12:46:06.523 回答