python - 给定大小为 m*n 的输入图像 X, block 大小为 T,如何生成大小为 T*T 的 k 个随机非重叠 block ?

标签 python algorithm

阅读论文时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/

相关文章:

php - 计算颜色深浅

python - 将列表元素转换为元组列表

Python 2.7 - Outlook Win32com.client 无法从 .msg 获取发件人的实际电子邮件地址

python - 将单独的 self.request.sessions 合并为一个请求

python - pdfkit - 有没有办法在将 HTML 转换为 pdf 之前更改它?

algorithm - 如何将条形码解码为 ISBN?

javascript - 在球体表面堆积不规则圆

python - 打印功能不在 sublime text 3 控制台上显示输出

c++ - 使用 Peterson 的 N 进程算法的信号量实现

algorithm - 发现大型数据集中的周期性模式