【问题标题】:Divide images into blocks and compare each corresponding block将图像分成块并比较每个对应的块
【发布时间】:2020-02-05 11:28:03
【问题描述】:

您好,我有一组大小为 200x200 的图像,我想将这些图像分成 10 个大小为 20x20 的块(每个图像)。图像分块后,

1) 我想将图像 1 的第一个块与图像2 的第一个块、图像 3 和第二个块与图像2 的第二个块、图像 3 等进行比较。

2)在比较块之后,应该使用具有最大值的块并将其放入最终图像中,以便最终图像具有来自image1,image2或image3的最大值块。

是否可以进行这样的比较并产生新的图像。

image = cv2.resize(im,(200,200))
image1 = cv2.resize(im1,(200,200))

hs = round(h/10)
ws = round(w/10)
hs1 = round(hs1/10)
ws1 = round(ws1/10)
resized = cv2.resize(image, (ws,hs), interpolation = cv2.INTER_AREA)
resized1 = cv2.resize(image1, (ws1,hs1), interpolation = cv2.INTER_AREA)

结果如图here

图片可以访问here

【问题讨论】:

  • 如果你把一个 200x200 的图像分成 20x20 的块,你会得到 100 个块,而不是 10 个,对吧?请在您的问题中添加几张图片,并说明结果应该是什么样子。
  • 如何将 20x20 块与另一个块进行比较?那是 400 像素,如果图像是 RGB,则为 1,200 个值,那么您实际比较的是什么,结果是什么?
  • 我想将这些块与其他块进行比较。我能够逐像素(像素强度)比较图像。但我想比较块。我认为的一种方法是取每个块的平均值并将其与图像的所有相应块进行比较。但我不知道该怎么做。
  • 我已经在我的回答中添加了一些信息 - 这是您期望结果的样子吗?
  • @MarkSetchell 是否可以将输出图像生成为原始图像。这是我使用numpy.maximum.reduce() 时得到的。但我期待在比较之后,最终图像会像原始图像一样(像普通图像)

标签: python image opencv image-processing


【解决方案1】:

一个提示让您开始...您不需要平铺您的图像并创建调整大小/裁剪的子图像来执行此操作。您可以非常轻松地就地访问您的块。这是一个示例,使用较小的块(以便您可以看到它们)帮助您入门。

import numpy as np

# Make synthetic ramp image
ramp = np.arange(6,dtype=np.uint8).reshape(-1,1) + (np.arange(8)*10).reshape(1,-1)

看起来像这样:

array([[ 0, 10, 20, 30, 40, 50, 60, 70],
       [ 1, 11, 21, 31, 41, 51, 61, 71],
       [ 2, 12, 22, 32, 42, 52, 62, 72],
       [ 3, 13, 23, 33, 43, 53, 63, 73],
       [ 4, 14, 24, 34, 44, 54, 64, 74],
       [ 5, 15, 25, 35, 45, 55, 65, 75]])

现在让我们看看左上角的 2 行 3 列:

print(ramp[:2, :3]) 

看起来像这样:

array([[ 0, 10, 20],
       [ 1, 11, 21]])

让我们得到他们的平均值:

print(ramp[:2, :3].mean())
10.5

现在让我们看看右下角的 2 行 3 列:

print(ramp[-2:, -3:])

array([[54, 64, 74],
       [55, 65, 75]])

得到他们的意思:

print(ramp[-2:, -3:].mean())
64.5

第二个提示...您的答案将如下所示:

【讨论】:

  • 我不明白ramp = np.arange(6,dtype=np.uint8).reshape(-1,1) + (np.arange(8)*10).reshape(1,-1) 做了什么。它只是将图像分成 8x10 块吗?它是否返回块的坐标位置?
  • 不,它只是生成合成的“图像”,您可以在下一行看到 - 您没有提供示例图像...
  • 你说的当前输出有没有可能以原图的形式形成?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多