4色(黒、白、赤、青)のチェス盤のようなイメージがあります。この画像を数値の行列に変換する必要があります。1 は白、2 は黒、3 は赤などです。
たとえば、画像:
行列に変換する必要があります:
[[1,2,1,2,1,2...]
[2,1,2,1,2,1...]
...]
私はPythonでの解決策を好むでしょう。
4色(黒、白、赤、青)のチェス盤のようなイメージがあります。この画像を数値の行列に変換する必要があります。1 は白、2 は黒、3 は赤などです。
たとえば、画像:
行列に変換する必要があります:
[[1,2,1,2,1,2...]
[2,1,2,1,2,1...]
...]
私はPythonでの解決策を好むでしょう。
SVG画像についてはよくわかりませんが、PILで読み取り可能な画像形式(GIF、TIFF、JPEG、BMPなど)があるとします。次に、次のようにPILを使用して読み取ることができます。
import Image
img = Image.open("Chess_Board.bmp")
ここで、量子化を実行したいので、画像のピクセルはRGBではなく、0から3までのカラーインデックスです(4つの異なる色が必要だとします)。
quantized = img.convert('P', palette=Image.ADAPTIVE, colors=4)
次に、個々のピクセルに簡単にアクセスできるように、それをnumpyに変換するとします。次に、1つのブロックにいくつ入るかを数えるためにNumpyMagicを実行します。
import numpy as np
a = np.array(quantized)
blockLengthX = np.argmin(a[0]==a[0,0])
blockLengthY = np.argmin(a[:,0]==a[0,0])
その後は簡単です。colsにはstepsizeblockLengthXを使用し、行にはblockLengthYを使用して配列にアクセスするだけです。
result = a[::blockLengthX, ::blockLengthY]
もちろん、これはすべてのブロックがまったく同じサイズであることを前提としています。これは、コピーアンドペーストを簡単にするための完全なプログラムです。私も少し短くしました:
import Image
import numpy as np
img = Image.open("Chess_Board.bmp")
a = np.array(img.convert('P', palette=Image.ADAPTIVE, colors=4))
blockLengthX = np.argmin(a[0]==a[0,0])
blockLengthY = np.argmin(a[:,0]==a[0,0])
result = a[::blockLengthX, ::blockLengthY]