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