MxN
0 と 1 を含むサイズのマスクを持つ。
n
このマスクの 1 ピクセルをランダムに (均一に分散して) 選択するにはどうすればよいですか?
n
編集:マスクが1であるこのマスクのピクセルを選択したい。それらのn
ピクセルは、画像/マスク全体にランダムに分散する必要があります。
MxN
0 と 1 を含むサイズのマスクを持つ。
n
このマスクの 1 ピクセルをランダムに (均一に分散して) 選択するにはどうすればよいですか?
n
編集:マスクが1であるこのマスクのピクセルを選択したい。それらのn
ピクセルは、画像/マスク全体にランダムに分散する必要があります。
マトリックス内の「1」のインデックスを見つけてrandperm
から、それらのランダムなサブセットを選択するために使用します。
idx = find(mask==1);
y = randperm(length(idx),n); %take n values from 1 to the number of values in idx
rand_idx = idx(y); %select only those values out of your indexes
繰り返しサンプルを許可するための別の簡潔なソリューションが可能randi
です (置換によるサンプリング):
nonZeroSampleInds = randi(nnz(mask),1,n);
maskInds = find(mask);
maskSampleInds = maskInds(nonZeroSampleInds);
繰り返しのないサンプルの場合randperm
、nkjtの回答のように機能するか、単に楽しみのために次から始めることができます。
[~,nonZeroSampleInds]=sort(rand(1,nnz(mask)));
randperm
MATLABはこの仕事に最適だと思いますが、このsort
行は実際にはMATLABが MEX ファイルになる前に実装していた方法です。randperm.m
場所を順番に並べたい場合は、sort
または.nonZeroSampleInds
maskSampleInds