是否可以为图像的整个切片分配单个像素值?例如,我有:
img = zeros(100, 200, 3, 'uint8');
我想将值[200, 134, 12]
分配给图像的上半部分。我能做到
img(1:50, :, 1) = 200;
img(1:50, :, 2) = 134;
img(1:50, :, 3) = 12;
但是,如果可能的话,我想使用广播来完成任务。由于尺寸不匹配,以下选项不起作用:
img(1:50, :, :) = [200, 134, 12]
img(1:50, :, :) = [[200, 134, 12]]
img(1:50, :, :) = reshape([200, 134, 12], 1, 1, 3)
在这种情况下,我可以在 MATLAB 中应用广播吗?如果是这样,如何?
赋值运算符未列为可用于隐式扩展的运算符之一。但是,您可以将图像的上半部分设置为零,并使用plus
运算符进行广播:
img(1:50, :, :) = 0;
img(1:50, :, :) = img(1:50, :, :) + reshape([200, 134, 12], 1, 1, 3);
让我的评论成为答案:
我想你可以img(1:50, :, :) = repmat(reshape([200, 134, 12], 1, 1, 3),50,200)
,但我不确定它是否比 3 行更清晰,并且可能会使用更多的处理能力和内存(在这个规模上并不重要(