2013-11-01 82 views
1

經與大小MxN含0和1隨機選擇n個像素的圖像中的掩模

如何選擇隨機(均勻分佈)選擇該掩模的n 1像素的掩模?

編輯: 我想選擇n這個面具的像素,其中面具是1.那些n像素應該隨機分佈在整個圖像/面具。

+0

「select n 1-pixels」 - huh?請讓問題更清楚。 – learnvst

回答

1

找到「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 
0

你可以這樣做:

idx = find(mask == 1); % This found all 1s in your mask 

idx2Take = 1:5:size(idx,1); % This take 1s on every 5 (uniform distributed) 

uniformPts = idx(idx2Take); % Finally, obtain the mask position from the uniform distribution 

後,您只需要得到所有uniformPts。

2

另一個簡潔的解決方案是可能的randi(採樣與更換):

nonZeroSampleInds = randi(nnz(mask),1,n); 
maskInds = find(mask); 
maskSampleInds = maskInds(nonZeroSampleInds); 

對於非重複的樣品,randperm作品在nkjt的答案,或者只是爲了好玩,你可以用下面的開始,

[~,nonZeroSampleInds]=sort(rand(1,nnz(mask))); 

我認爲MATLAB的randperm是完美的工作,但是這sort行實際上how MATLAB used to implement randperm.m是之前它成爲一個MEX文件,所以我想我會提供它,因爲我喜歡有點MATLAB瑣事。

如果您想要訂購的位置,sort或者nonZeroSampleIndsmaskSampleInds