如何对图像块进行排序以最小化它们之间的差异?

时间:2017-05-23 08:25:18

标签: sorting image-processing language-agnostic

我有一个小图像块列表。所有这些都是相同的大小(例如:16x16)。它们是黑白的,像素值在0-255之间。我想对这些图像进行排序,以尽量减少它们之间的差异。

我想到的是计算相邻块之间像素的mean absolute difference(MAD)(例如:块N对块N + 1,块N + 1对块N + 2,......) 。 由此我可以计算出那些MAD值的总和(例如:sum = mad1 + mad2 + ...)。我想要的是找到最小化该总和的顺序。

之前:

enter image description here

之后:(这只是手工完成以提供一个例子,这些块可能有更好的排序,特别是那些有垂直条纹的块)

enter image description here

1 个答案:

答案 0 :(得分:0)

根据 RaymoAisla 评论指出这与Travelling salesman problem类似,我决定使用Nearest neighbour algorithm实施解决方案。虽然不完美,但它会产生很好的效果:

enter image description here

这是代码:

In [36]: r = np.loadtxt(sio, delimiter=",", skiprows=0, dtype=[('f0',int),('f1'
    ...: ,int),('f2',int),('f3',int),('f4',int),('f5',float),('f6',float),('f7'
    ...: ,int),('f8',int)])
In [38]: r.shape
Out[38]: (4,)
In [45]: r.dtype
Out[45]: dtype([('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<i4'), ('f8', '<i4')])