n x n
考えられる方法の1つは、指摘したように画像を正方形に分割し(エッジケースを保存)、それぞれを1つの値に減らし、k最近傍値(他の部分に関連する)に従ってグループ化することです。それらをグループ化した後、たとえば、各グループから1つの画像を選択できます。潜在的に優れているのは、各グループ内でより関連性の高いメトリックを使用することです。このような2つのメトリックについては、URLの画像とPythonのファイルシステムの画像の比較を参照してください。このメトリックを使用することにより、各グループから複数のピースを選択できます。
これは私が周りで見つけたいくつかのアヒルを使った例です。を考慮しn = 128
ます。各ピースを1つの数値に減らすために、の純粋な黒いピースまでのユークリッド距離を計算し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]
これで、これらの各グループ内のメトリック(黒までの距離よりも優れている)を使用して、そこから必要な部分を選択できます。