如何有效地绘制matlab图像中的像素列表?

时间:2011-10-04 16:56:35

标签: matlab image-processing

我已经实现了一个功能,但我不喜欢循环的必要性。但我没有看到任何避免循环的方法。好奇,如果有更好的方法来做到这一点。

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

1 个答案:

答案 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(:);