我已经实现了一个功能,但我不喜欢循环的必要性。但我没有看到任何避免循环的方法。好奇,如果有更好的方法来做到这一点。
function [ colored_img ] = colorImg ( img, ix, c )
% function [ colored_img ] = colorImg ( img, ix, c )
%
% INPUTS
% img - a 3D array representing the image to color.
% ix - the indexes of the pixels to set to a new color.
% c - a vector representing the color to paint the pixels ix.
%
% OUTPUTS
% colored_img - the colored image.
colored_img = img;
for jx = 1 : numel(c);
a = colored_img(:,:,jx);
a(ix) = c(jx);
colored_img(:,:,jx) = a;
end
end
答案 0 :(得分:0)
您可以复制颜色的索引。
imageSize = numel(img(:,:,1));
rgbIdx = bsxfun(@plus,ix(:),(0:2)*imageSize);
%# replicate the color so that there are as many
%# entries as pixels to recolor
%# (skip this if you use a colormap
%# of length nPixelsToRecolor)
nPixelsToRecolor = length(ix); %# assign this so that comment makes sense
repColor = repmat(c,nPixelsToRecolor,1); %# assuming color is 1-by-3
colored_img = img;
colored_img(rgbIdx(:)) = repColor(:);