2

MxN0 と 1 を含むサイズのマスクを持つ。

nこのマスクの 1 ピクセルをランダムに (均一に分散して) 選択するにはどうすればよいですか?

n編集:マスクが1であるこのマスクのピクセルを選択したい。それらのnピクセルは、画像/マスク全体にランダムに分散する必要があります。

4

3 に答える 3

2

マトリックス内の「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
于 2013-11-01T15:41:51.953 に答える
2

繰り返しサンプルを許可するための別の簡潔なソリューションが可能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

于 2013-11-01T18:13:23.860 に答える