gpt4 book ai didi

image - 使图像重叠,尽管被翻译

转载 作者:行者123 更新时间:2023-12-04 15:41:57 25 4
gpt4 key购买 nike

我将有两个图像。

它们将相同或几乎相同。

但有时任一图像可能已在任一轴上移动了几个像素。

检测是否有此类举动的最佳方法是什么?

或者更好的是,操纵图像以便它们修复这种不需要的运动的最佳方法是什么?

最佳答案

如果图像真的几乎相同,并且只是简单地转换(即没有倾斜、旋转、缩放等),您可以尝试使用互相关。

当您将图像与其自身进行互相关(这是自相关)时,最大值将位于结果矩阵的中心。如果您垂直或水平移动图像,然后与原始图像互相关,最大值的位置将相应移动。通过测量最大值位置相对于预期位置的偏移,您可以确定图像在垂直和水平方向上平移了多远。

这是python中的一个玩具示例。首先导入一些东西,生成一个测试图像,并检查自相关:

import numpy as np
from scipy.signal import correlate2d

# generate a test image
num_rows, num_cols = 40, 60
image = np.random.random((num_rows, num_cols))

# get the auto-correlation
correlated = correlate2d(image, image, mode='full')

# get the coordinates of the maximum value
max_coords = np.unravel_index(correlated.argmax(), correlated.shape)

这会产生坐标 max_coords = (39, 59) .现在测试该方法,将图像向右移动一列,在左侧添加一些随机值,并再次在互相关中找到最大值:
image_translated = np.concatenate(
(np.random.random((image.shape[0], 1)), image[:, :-1]),
axis=1)

correlated = correlate2d(image_translated, image, mode='full')
new_max_coords = np.unravel_index(correlated.argmax(), correlated.shape)

这给 new_max_coords = (39, 60) ,正确指示图像水平偏移 1(因为 np.array(new_max_coords) - np.array(max_coords)[0, 1] )。使用此信息,您可以移动图像以补偿平移。

请注意,如果您决定采用这种方式,您可能会有很多问题需要解决。给定图像的尺寸,在确定最大坐标“应该”遵循相关性(即避免计算自相关并凭经验确定这些坐标)时,会出现逐一错误,特别是如果图像具有偶数行数/列数。在上面的例子中,中心只是 [num_rows-1, num_cols-1]但我不确定这是否是更普遍的安全假设。

但是对于许多情况——尤其是那些图像几乎完全相同且仅进行翻译的情况——这种方法应该很有效。

关于image - 使图像重叠,尽管被翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36084249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com