gpt4 book ai didi

python - 使用散点图显示图像

转载 作者:行者123 更新时间:2023-12-01 02:51:31 25 4
gpt4 key购买 nike

我正在尝试使用散点图绘制图像数据。这可能听起来很愚蠢,但我希望将其扩展到 3 维,以便尝试查看 3 维。

当我这样做的时候

pylab.imshow(my_img, cmap=pylab.cm.gist_yarg)

我在查看自己的图像时没有任何问题。但是当我尝试时

ax.scatter(np.arange(my_img.shape[0]), 
np.arange(my_img.shape[1]),
c=my_img, cmap=plt.cm.gist_yarg)

我得到的大部分是黑色像素。为什么是这样?有办法让它工作吗?

最佳答案

scatter()函数为您为 xy 参数传递的数组中的每一对值绘制一个点。在您的示例中,这些数组的值将为 [0, 1, 2, ..., my_img.shape[0]-1][0, 1, 2, 。 ...,my_img.shape[1]-1]。最好的情况是,这会绘制一条对角线,如果 xy 的大小不同(即,您的图像不是正方形),会散布() 应该抛出一个错误,即 x 和 y 必须具有相同的大小

为了绘制图像中的所有像素,您必须传递每个像素的scatter()坐标。获取数组中每个元素的坐标的一种方法是 indicies()来自 numpy 的命令。您只需要最外层值的索引,而不是为每个像素存储的 RGB 值,因此只需向其传递形状的前两个值。

y, x = np.indices( my_img.shape[:2] )

现在,xy 是二维数组,表示二维图像中每个点的坐标。

您要做的另一件事是 reshape 图像数组,使其尺寸为 Nx3,其中 N 是图像中像素总数的长度。这是通过 .reshape() 完成的数组的方法。

colors = my_img.reshape((-1,3))

传递给 reshape 的 -1 告诉 reshape() 自动计算该尺寸,因此您不必显式向其传递像素数。

现在scatter()命令是:

ax.scatter( x, y, c=colors )
ax.invert_yaxis() #make y=0 appear at the top, similar to imshow()

最后,您想要应用颜色贴图。如果您传递颜色的 RGB 值,scatter()imshow() 会忽略 cmap 参数。您必须将 RGB 值转换为单个值,如 matplotlib Image tutorial 中所示。 .

注意:以这种方式绘制绘图速度很慢,并且可能不适合大图像!

关于python - 使用散点图显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44711177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com