1

以下に示す作業コードと同様の方法でタイル画像をプロットしています。

import Image
import matplotlib.pyplot as plt
import random
import numpy

def r():
    return random.randrange(50,200)

imsize = 100
rngsize = 5

rng = range(rngsize)
for i in rng:
    for j in rng:
        im = Image.new('RGB', (imsize, imsize), (r(),r(),r()))
        plt.imshow(im, aspect='equal', extent=numpy.array([i, i+1, j, j+1])*imsize)

plt.xlim(-5,imsize * rngsize + 5)
plt.ylim(-5,imsize * rngsize + 5)
plt.show()

ここに画像の説明を入力してください

問題は、パンとズームを行うと、ズームスケールに依存しない白い縞が画像の端の間に表示されることです。これは非常に望ましくありません。これはリサンプリングとアンチエイリアスに関係していると思いますが、matplotlibのレンダリングエンジンの正確な実装の詳細がわからない場合は特に、「正しい方法」で解決する方法がわかりません。

CairoとHTMLCanvasを使用すると、「ピクセルの隅に」または「ピクセルの中心に」(0.5ピクセルで変換)描画できるため、アンチエイリアシング効果を回避できます。Matplotlibでそれを行う方法はありますか?

助けてくれてありがとう!

4

1 に答える 1

3

値をより大きなnumpy配列に入力するだけで、合成画像全体を1回のショットでプロットできます。上記のコードを最小限の例に適合させましたが、サイズの異なる画像では、ステップサイズを変える必要があります。

F = numpy.zeros((imsize*rngsize,imsize*rngsize,3))

for i in rng:
    for j in rng:
        F[i*imsize:(i+1)*imsize, 
          j*imsize:(j+1)*imsize, :] = (r(), r(), r())

plt.imshow(F, interpolation = 'nearest')
plt.show()

ここに画像の説明を入力してください

于 2012-09-14T19:33:48.290 に答える