【问题标题】:How to divide image into same size blocks?如何将图像分成相同大小的块?
【发布时间】:2012-07-12 05:59:55
【问题描述】:

我有一张图片,我想把它分成相同大小的块。例如图像大小为 16。我想划分我的图像,他们在每个块上应用函数(例如 SVD、DWT、傅里叶变换)来搜索哪些块彼此相似。例如,我可以复制图像的一部分并将其粘贴到图像的另一部分,以便块彼此相似。我想搜索那些相似的块。

我是 Matlab 的新手,如果有人能帮助我如何划分图像,我真的很感激。 谢谢

【问题讨论】:

  • 但是如果你将大图像分割成更小的块,然后比较它们之间的块,那么即使图像有相同的部分,它们也可能不会与你的切片块细分对齐。所以也许这些块不匹配(反正我不是图像精化专家,所以也许我完全错了......)
  • 感谢您的回答,我正在考虑您的回答,我认为您是对的。在某些情况下,当我复制图像的某些部分并将其粘贴到另一部分时,可能是第一个块粘贴在两个块之间,很难找到相似的块。理论上你有什么建议我该怎么做?在一张图片中搜索相似的部分。
  • 我不是图像处理专家...如果您要查找的图像部分是 16x16 像素,并且图像不是太大,您可以尝试将其与您可以创建的任何 16x16 块:从 x=0 和 y=0 开始的块 16x16;块 16x16 从 x=0 和 y=1 开始......但这是一种非常暴力且效率低下的算法。您可能应该寻找一些算法之王,它可以从您的锁中提取有意义的特征,并且能够扫描图像以查找类似于相同“特征”的部分

标签: image matlab image-processing fft sliding-window


【解决方案1】:

您可以使用blockprocim2col。有关示例,请参见 blockprocdocumentation

【讨论】:

  • @ Maurits,感谢您的回答,我将阅读有关 blockproc 的信息,以了解更多我如何做到这一点。您对推拉窗有什么建议吗?
  • im2col(..., 'sliding') 会为你做滑动窗口。也就是说,'sliding' 选项将在滑动窗口中生成所有“中间”矩阵。还。 im2col 将每个窗口(邻域)存储为它返回的矩阵中的一列。
【解决方案2】:

我无法提供 matlab 答案,但您可以查看 Image segmentation(以 Google 为例)。有许多不同的方法可以做到这一点,具体取决于您想要的细分类型。

您还可以查看论文 Super-Resolution from a Single Image,该论文描述了一种在各种尺度上搜索自身重复出现的图像块的方法。链接的论文还描述了如何从多幅图像中的小特征创建图像数据库。

【讨论】:

    【解决方案3】:

    我有一个用 python 编写的解决方案,您可以将其转换为对您有用的形式。

    rsize = 4   #row size of the kernel
    csize = 4   #column size of the kernel
    
    for r in range(0,resized.shape[0] - rsize, rsize):
        for c in range(0,resized.shape[1] - csize, csize):
            window = resized[r:r+rsize,c:c+csize]
    

    我假设图像的大小为 17 x 17。这里可以用零填充图像的最后一列和最后一行,这样代码才能正常工作。

    您可以将此逻辑应用于 MATLAB。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2017-05-24
      相关资源
      最近更新 更多