我需要分析在tif文件中选择为子矩阵的图像的一部分.我希望图像具有原始格式,没有多余的装饰(缩放,轴,标签等)…我该怎么做?
这是我现在使用的代码:
submatrix = im[x_min:x_max, y_min:y_max]
plt.imshow(submatrix)
plt.savefig("subplot_%03i_%03i.tif" % (index, peak_number), format = "tif")
解决方法:
首先,如果您只想存储原始值或原始值的灰度表示形式,则最简单的方法是使用PIL.
例如,这将生成一个10×10灰度tif文件:
import numpy as np
import Image
data = np.random.randint(0, 255, (10,10)).astype(np.uint8)
im = Image.fromarray(data)
im.save('test.tif')
至于您关于matplotlib版本为何具有更多像素的问题,这是因为您暗中告诉了它. Matplotlib图形具有大小(以英寸为单位)和dpi(默认情况下,屏幕上为80,保存时为100).另外,默认情况下,imshow将对数组中的值进行插值,即使将插值设置为最接近,保存的图像仍将是为图形指定的尺寸.
如果要使用matplotlib将图形保存为一个值到一个像素(例如,为了轻松使用颜色图),请执行以下操作:
import numpy as np
import matplotlib.pyplot as plt
dpi = 80 # Arbitrary. The number of pixels in the image will always be identical
data = np.random.random((10, 10))
height, width = np.array(data.shape, dtype=float) / dpi
fig = plt.figure(figsize=(width, height), dpi=dpi)
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')
ax.imshow(data, interpolation='none')
fig.savefig('test.tif', dpi=dpi)