new_img ==>
new_img = zeros(height, width, 3);
curMean是这样的:[double, double, double]
new_img(rows,cols,:) = curMean;
所以这里有什么问题?
答案 0 :(得分:3)
该行:
new_img(rows,cols,:) = curMean;
仅在rows
和cols
为标量值时才有效。如果它们是向量,则有一些选项可以正确执行赋值,具体取决于您正在执行的赋值类型。如Jonas mentions in his answer,您可以为rows
和cols
中的每个成对索引组合分配值,也可以为每对[rows(i),cols(i)]
分配值。对于为每个成对组合分配值的情况,您可以通过以下几种方式进行操作:
将分配分为3个步骤,第三个维度中的每个平面一个:
new_img(rows,cols,1) = curMean(1); %# Assignment for the first plane
new_img(rows,cols,2) = curMean(2); %# Assignment for the second plane
new_img(rows,cols,3) = curMean(3); %# Assignment for the third plane
您也可以在for循环中以Jonas suggested执行此操作,但对于如此少量的迭代,我有点像使用上面的“展开”版本。
使用curMean
上的RESHAPE和REPMAT功能重新整形和复制矢量,使其与new_img
的子索引部分的尺寸相匹配:
nRows = numel(rows); %# The number of indices in rows
nCols = numel(cols); %# The number of indices in cols
new_img(rows,cols,:) = repmat(reshape(curMean,[1 1 3]),[nRows nCols]);
有关上述方法如何运作的示例,请假设我有以下内容:
new_img = zeros(3,3,3);
rows = [1 2];
cols = [1 2];
curMean = [1 2 3];
上述任何一种解决方案都会给你这个结果:
>> new_img
new_img(:,:,1) =
1 1 0
1 1 0
0 0 0
new_img(:,:,2) =
2 2 0
2 2 0
0 0 0
new_img(:,:,3) =
3 3 0
3 3 0
0 0 0
答案 1 :(得分:2)
小心这样的作业!
a=zeros(3);
a([1 3],[1 3]) = 1
a =
1 0 1
0 0 0
1 0 1
换句话说,您指定了行索引和列索引的所有组合。如果那就是你想要的,写作
for z = 1:3
newImg(rows,cols,z) = curMean(z);
end
应该得到你想要的东西(建议@gnovice)。
但是,如果rows
和cols
是匹配的对(即您只想在上面的示例中为元素(1,1)
和(3,3)
分配1),那么写作可能会更好
for i=1:length(rows)
newImg(rows(i),cols(i),:) = curMean;
end