您需要找到 100 个随机像素的索引:
rPix = floor(rand(1,100) * numel(myimage)) + 1;
rVal = rand(1,100);
myimage(rPix) = 255 * rVal;
解释
rand(1,100) : an array of 1 x 100 random numbers
numel(myimage) : number of pixels
product of the two : a random number between 0 and n
floor() : the next smallest integer. This "almost" points to 100 random pixels; we're off by 1, so
+ 1 : we add one to get a valid index.
我们现在有一个有效的随机索引。请注意,在 Matlab 中,对 2D 数组使用 1D 索引是有效的,只要您不使用大于数组中元素数的数字。因此,如果
A = rand(3,3);
b = A(5);
是相同的
b = A(2,2); % because the order is A(1,1), A(2,1), A(3,1), A(1,2), A(2,2), ...
下一行:
rVal = rand(1, 100);
生成 100 个随机数(介于 0 和 1 之间)。最后一行
myimage(rPix) = 255 * rVal;
索引(随机)从 的 100 个元素myimage
,并分配从rVal
乘以 255 的值。这是 Matlab 的一个非常强大的部分:矢量化。您可以(并且,为了速度,应该始终尝试)Matlab 在一次操作中对多个数字进行操作。以上等价于
for ii = 1:100
myimage(rPix(ii)) = 255 * rVal(ii);
end
只是快得多...