MxN0 と 1 を含むサイズのマスクを持つ。
nこのマスクの 1 ピクセルをランダムに (均一に分散して) 選択するにはどうすればよいですか?
n編集:マスクが1であるこのマスクのピクセルを選択したい。それらのnピクセルは、画像/マスク全体にランダムに分散する必要があります。
MxN0 と 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)));
randpermMATLABはこの仕事に最適だと思いますが、このsort行は実際にはMATLABが MEX ファイルになる前に実装していた方法です。randperm.m
場所を順番に並べたい場合は、sortまたは.nonZeroSampleIndsmaskSampleInds