我知道如何使用rand函数找到一个随机像素,对于图像范围内的x& y。然后用循环做K次。
但是我想以更聪明的方式做到这一点,并确保我不会选择相同的方式 (x,y)坐标。提前谢谢!
答案 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'
的重复项。