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 個の要素にインデックスを付け、 から255 を掛けmyimage
た値を割り当てます。これは、Matlab の非常に強力な部分であるベクトル化です。Matlab は、1 回の操作で多数の数値を操作できます (速度を上げるために、常にそうする必要があります)。上記は次と同等ですrVal
for ii = 1:100
myimage(rPix(ii)) = 255 * rVal(ii);
end
はるかに高速です...