我在Matlab工作。我在一个名为im1的矩阵中有一个彩色图像。我需要将所有黑色像素都设为白色而不改变其他像素。如果没有for循环,我怎么能这样做? 这段代码需要10秒才能在大图像上执行。
for i=1:h
for j=1:w
if im1(i,j,:)==0
im1(i,j,:)=255;
end
end
end
答案 0 :(得分:8)
我可以考虑使用逻辑索引的两种方法。
方法1 -
im1(repmat(all(im1==0,3),[1 1 size(im1,3)]))=255
方法2 -
im1(bsxfun(@and,all(im1==0,3),im1==0))=255
看看哪一个更有效率会很有趣。
答案 1 :(得分:4)
试试这个
[height, width, dim_3] = size(im1);
[row col] = find(im1(:,:,1) == 0 & im1(:,:,2) == 0 & im1(:,:,3) == 0);
im1(sub2ind([height, width, dim_3],repmat(row,dim_3,1),repmat(col,dim_3,1),repmat((1:dim_3)',numel(row),1))) = 255;