我有一个RGB图像20x100x3
我希望将颜色为17,167,243
的像素更改为此颜色108,5,15
。如果有人可以请教你如何在Matlab中完成这项工作?
答案 0 :(得分:3)
假设img
为输入图像数组,这可能是bsxfun
的一种方法 -
oldval = [17,167,243]
newval = [108,5,15]
idx = find(all(bsxfun(@eq,img,permute(oldval,[1 3 2])),3))
idx_all = bsxfun(@plus,idx(:),[0:2]*numel(img(:,:,1)))
img(idx_all) = repmat(newval,numel(idx),1)
或使用logical indexing
而不是之前使用的基于linear indexing
的方法进行略微修改的方法 -
mask = all(bsxfun(@eq,img,permute(oldval,[1 3 2])),3)
img(repmat(mask,1,1,3)) = repmat(newval,sum(mask(:)),1)
答案 1 :(得分:0)
不是最优雅的解决方案:找到矩阵image(:,:, 1)
的索引等于17(使用find()
),然后image( :,:, 2)
的索引等于167,然后(:, :, 3)
。 ..然后识别所有三个列表中的所有索引(使用ismember()
)。将(:, :, x)
矩阵中这些像素的值更改为各自请求的RGB值。