将RGB图像的某些颜色的像素更改为另一种颜色Matlab

时间:2015-04-17 10:03:29

标签: image matlab image-processing

我有一个RGB图像20x100x3我希望将颜色为17,167,243的像素更改为此颜色108,5,15。如果有人可以请教你如何在Matlab中完成这项工作?

2 个答案:

答案 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值。