阅读论文时Local Shannon entropy measure with statistical tests for image randomness ,我想出了以下问题:
Given an input image X of size mn, a block size of T, generate k random non-overlapping blocks of size TT.
我想出了用左上坐标表示每个 block 的想法。然后,我使用以下代码生成那些非重叠 block 。虽然我在这段代码中使用了一些随机性,但结果并不是随机的,也没有涵盖所有可能的情况。是否有任何有效的算法可以做到这一点?甚至可以使用用于进一步搜索的关键字。
m, n = Y.shape
T = 44
k = 30
possible_blocks_vert = m // T
possible_blocks_horiz = n // T
possible_blocks = possible_blocks_vert * possible_blocks_horiz
if possible_blocks < k:
assert False
else:
last_possible_starting = (divmod(m, T)[1], divmod(n, T)[1])
random_y0, random_x0 = np.random.randint(last_possible_starting[0]), np.random.randint(last_possible_starting[1])
random_xs = [random_x0+i*T for i in range(possible_blocks_horiz)]
random_ys = [random_y0+i*T for i in range(possible_blocks_vert)]
i = 0
Xs = []
Ys = []
for x in np.random.permutation(random_xs):
for y in np.random.permutation(random_ys):
Xs.append(x)
Ys.append(y)
i += 1
if (i >= k):
break
if (i >= k):
break
Xs, Ys
此实现至少有两个缺点:
- 选择首先选择所有第一个随机行,然后选择所有第二个,依此类推,直到所有 k 个 block 都被选择
- 选择并未分布在所有可能的地方。
注意。该论文提出了一种称为局部香农熵 LSE 的新度量,它生成 k 个随机 block 并计算它们的平均香农熵作为 LSE。
最佳答案
你可以试试 jittered sampling (图 7.18c)。也就是说,将图像分成(至少)k
个单元格,并将每个 block 放入其中某处随机选取的单元格中。
为简单起见,我们假设图像为 256x256 像素,10 个 block 中的每个 block 为 32x32 像素。将图像拆分为 4x4 (ceil(sqrt(k))
) 单元格的规则网格,每个单元格大小为 64x64,从 16 个单元格中选择 10 个,将 32x32 block 随机放入每个 64x64 单元格中。
关于python - 给定大小为 m*n 的输入图像 X, block 大小为 T,如何生成大小为 T*T 的 k 个随机非重叠 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67221404/