如何在matlab中为图像赋值

时间:2014-11-11 21:47:33

标签: arrays matlab image-processing multidimensional-array

我有5列x,y,r,g,b,其中包含行号,列号,红色,绿色和蓝色的值。这个n×5矩阵的线不是特定的顺序,但是它们与图像(x,y)和r,g,b一致。

我想做I=uint8(zeros(480,640,3)之类的事情,只需根据n×5垫改变那些rgb值。

I(mat(:,1), mat(:,2), 1)=mat(:,3) for red etc

的内容

2 个答案:

答案 0 :(得分:2)

以下使用linear indexing的概念和多功能bsxfun函数:

m = 640; %// number of rows
n = 480; %// number of columns
I = zeros(m, n, 3, 'uint8'); %// initiallize directly as uint8
I(bsxfun(@plus, x(:)+(y(:)-1)*m, (0:2)*m*n)) = [r(:) g(:) b(:)]; %// fill values

小例子:for

m = 2;
n = 3;
x = [1 2 1];
y = [1 1 2];
r = [ 1  2  3];
g = [11 12 13];
b = [21 22 23];

代码生成

I(:,:,1) =
    1    3    0
    2    0    0

I(:,:,2) =
   11   13    0
   12    0    0

I(:,:,3) =
   21   23    0
   22    0    0

答案 1 :(得分:1)

替代方案:

INDr = sub2ind([480, 640, 3], mat(:, 1), mat(:,2), ones([numel(mat(:,3)), 1]));
INDg = sub2ind([480, 640, 3], mat(:, 1), mat(:,2), 2*ones([numel(mat(:,3)), 1]));
INDb = sub2ind([480, 640, 3], mat(:, 1), mat(:,2), 3*ones([numel(mat(:,3)), 1]));

I=uint8(zeros(480,640, 3));

I(INDr)=mat(:,3);
I(INDg)=mat(:,4);
I(INDb)=mat(:,5);

注意在Matlab中,轴之间的约定在图像和数组之间是不同的。