随机选择图像掩码中的n个像素

时间:2013-11-01 15:01:57

标签: matlab

有一个大小为MxN的面具,其中包含0和1.

如何随机选择(均匀分布)选择此掩码的1个像素n

编辑: 我想选择遮罩为1的遮罩的n像素。那些n像素应该随机分布在整个图像/遮罩上。

3 个答案:

答案 0 :(得分: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行在成为MEX文件之前实际上是 how MATLAB used to implement randperm.m ,所以我想我会提供它,因为我喜欢一点MATLAB琐事。

如果您想按顺序排求地点,sort可以是nonZeroSampleIndsmaskSampleInds

答案 1 :(得分: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

答案 2 :(得分: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。