如何证明这些图片是相同的配置

时间:2019-11-22 07:16:39

标签: python python-3.x python-2.7

我想证明在垂直移动1个单位后,图片a)变成图片b),然后变成c)。下面是a,b和c的矩阵。你能帮忙吗?

a = [[1, 1], [2, 1], [3, 1]], [[1, 2], [2, 2], [3, 2]], [[1, 3], [2, 3], [3, 3]]]
shift_matrix = []
shift_unit_a = 0
shift_unit_b = 1
for item in a:
    for u in range(1, 3):
        shift_matrix[u][0] = item[u][0] + shift_unit_a
        shift_matrix[u][1] = item[u][1] + shift_unit_b
        if (np.array_equal(np.array(shift_matrix), np.array(item[u]))
            shift = 1
            print "True"
        else:
            shift = 0
            print "False"

您能帮我吗?enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

归结为检测一组中的所有点是否都从另一组中的对应点以相同的方式移位。

def is_shift(set1, set2): 
    shift = None  # will store a tuple of delta_x, delta_y
    for (x1, y1), (x2, y2) in zip(set1, set2): 
        cur_shift = x1 - x1, y1 - y2 
        if not shift:  # the first pair of points
            shift = cur_shift 
        elif shift != cur_shift: # shifted the same way as the first one?
            return False 
    return True 
>>> is_shift([[1, 1], [2, 1], [3, 1]], [[1, 2], [2, 2], [3, 2]])
True  
>>> is_shift([[1, 1], [2, 1], [3, 1]], [[1, 2], [2, 2], [3, 3]])
False  

现在,由于“ set1是移位的set2”是传递关系,因此足以在第一个集合与其余每个集合之间运行is_shifted

尽管有一个警告。根据您对数据的假设,您可能需要确保以相同的方式对这些点进行排序,即预先对每个集合进行排序。

我认为巧妙地使用numpy可以实现更有效的实现,但是想法是一样的。