【发布时间】:2025-07-22 07:10:01
【问题描述】:
我有一个 RGB 图像 20x100x3,我想将颜色为 17,167,243 的像素更改为这种颜色 108,5,15 。如果有人可以请告知如何在 Matlab 中完成此操作?
【问题讨论】:
标签: image matlab image-processing
我有一个 RGB 图像 20x100x3,我想将颜色为 17,167,243 的像素更改为这种颜色 108,5,15 。如果有人可以请告知如何在 Matlab 中完成此操作?
【问题讨论】:
标签: image matlab image-processing
假设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)
【讨论】:
Too many input arguments.。
img(repmat(mask,1,1,3)),而不是img(repmat(mask,[1 1 3]))。我假设这是一个版本问题。
不是最优雅的解决方案:找到矩阵image(:,:, 1) 的索引等于17(使用find()),然后image( :,:, 2) 相同等于167,然后(:, :, 3)...然后确定所有索引在所有三个列表中(使用ismember())。将(:, :, x) 矩阵中这些像素的值更改为各自请求的 RGB 值。
【讨论】: