如何在图像中找到K个随机不同的像素?

时间:2015-12-21 20:22:19

标签: matlab

我知道如何使用rand函数找到一个随机像素,对于图像范围内的x& y。然后用循环做K次。

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

3 个答案:

答案 0 :(得分:6)

使用randperm(无需工具箱):

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

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

答案 2 :(得分:2)

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