n x n
正如您所指出的,一种可能的方法是将图像拆分为正方形(保存边缘情况),将它们中的每一个减少为单个值并根据 k-最近值(与其他部分有关)对它们进行分组。将它们分组后,例如,您可以从每个组中选择一个图像。可能更好的方法是在每个组中使用更相关的指标,请参阅将 url 中的图像与 python 中的文件系统中的图像进行比较以获得两个这样的指标。通过使用此指标,您可以从每个组中选择多个。
这是一个使用我发现的一些鸭子的示例。它认为n = 128
。为了将每一块减少到一个数字,它计算到纯黑色块的欧几里得距离n x n
。
f = Import["http://fohn.net/duck-pictures-facts/mallard-duck.jpg"];
pieces = Flatten[ImagePartition[ColorConvert[f, "Grayscale"], 128]]

black = Image[ConstantArray[0, {128, 128}]];
dist = Map[ImageDistance[#, black, DistanceFunction -> EuclideanDistance] &,
pieces];
nf = Nearest[dist -> pieces];
然后我们可以通过考虑来查看分组k = 2
:
GraphPlot[
Flatten[Table[
Thread[pieces[[i]] -> nf[dist[[i]], 2]], {i, Length[pieces]}]],
VertexRenderingFunction -> (Inset[#2, #, Center, .4] &),
SelfLoopStyle -> None]

现在,您可以在每个组中使用一个度量(比到黑色的距离更好)来从那里选择您想要的部分。