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 和 HTML Canvas,您可以绘制“到像素角”或“到像素中心”(平移 0.5 像素),从而避免抗锯齿效果。有没有办法用 Matplotlib 做到这一点?

谢谢你的帮助!

4

1 回答 1

3

您可以简单地将值填充到更大的 numpy 数组中,并一次绘制整个合成图像。我已经将上面的代码调整为一个最小的示例,但是对于不同大小的图像,您需要采用不同的步长。

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 回答