2015-12-21 46 views
0

我知道如何通过使用rand函数找到一个随机像素,在图像的极限范围内x & y。然后用循环做K次。如何在图像中找到K个随机不同的像素?

但是,我想以更聪明的方式做到这一点,并确保我不会选择相同的 (x,y)坐标。提前致谢!

+1

看看[这个]的答案(http://stackoverflow.com/questions/17177230/randomly-selecting-pixels-in-a-picture-matlab)的问题。 –

回答

2

randi生成1和指定限制之间的整数,您可以使用它与您的图像大小来生成像素坐标。为了确保不再选择相同的坐标,请维护一个矩阵逻辑并标记您正在拾取的像素。 如果你只是想从图像中选择K个随机像素,我会建议使用类似randi(imgSize,K,2)的东西来生成索引矩阵。您最终可能会在矩阵中出现重复项,并删除那些可以使用和'rows'参数的项。

+1

似乎这个问题的正确用户名! – David

4

这里棘手的部分是避免重复。如果您有统计工具箱,你可以使用randsample

k = 10; 
[m,n] = size(image(:,:,1)); %// works with 3- and 1-channel images 
s = randsample(m*n, k);  %// get k random indices 
[X, Y] = ind2sub([m, n], s); %// convert indices to x,y coordinates 

在我的测试运行具有512x512x3图像我得到了以下坐标:(无需工具箱)

X =  
    464 143 174 235 437 201 348 272 212 260 

Y = 
    499 449 508 148 107 114 341 196 60 224 
6

使用randperm

K = 10; 
[h, w, c] = size(image); 
[X, Y] = ind2sub([h w], randperm(h*w, K)); 
+0

这也会起作用!我忘了你可以告诉'randperm'有多少元素回来! – beaker