代码之家  ›  专栏  ›  技术社区  ›  BlueLemon

如何使用Matplotlib从灰度图像创建曲面图?

  •  8
  • BlueLemon  · 技术社区  · 9 年前

    假设我有一张灰度图像(大小:550x150像素)。我用matplolib加载图像

    import matplotlib.pyplot as plt
    import matplotlib.image as mp_img
    image = mp_img.imread("my-cat.png")
    plt.imshow(image)
    plt.show()
    

    现在 plt.imshow 在屏幕上显示图像。但我想要的是灰度值的曲面图,大致如下:

    。颜色并不是必须的,但它会有助于保持高度线。我知道,我需要一个形式的函数 f(x,y) -> z 以创建曲面图。所以,我想在 (x_pixel,y_pixel) 在我的图像中获得 f 。这导致了我的问题:

    • 我想在绘图期间对图像值进行一些插值(例如平滑)。这也取决于网格的大小,所以我如何控制它?和
    • 如何从图像中绘制灰度值的曲面图?
    2 回复  |  直到 8 年前
        1
  •  25
  •   hitzg    9 年前

    所以这很简单。加载数据,构建绘图:

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    # generate some sample data
    import scipy.misc
    lena = scipy.misc.lena()
    
    # downscaling has a "smoothing" effect
    lena = scipy.misc.imresize(lena, 0.15, interp='cubic')
    
    # create the x and y coordinate arrays (here we just use pixel indices)
    xx, yy = np.mgrid[0:lena.shape[0], 0:lena.shape[1]]
    
    # create the figure
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    ax.plot_surface(xx, yy, lena ,rstride=1, cstride=1, cmap=plt.cm.gray,
            linewidth=0)
    
    # show it
    plt.show()
    

    结果:

    enter image description here

        2
  •  2
  •   Community THelper    4 年前
    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    import cv2
    
    # generate some sample data
    import scipy.misc
    lena = cv2.imread("./data/lena.png", 0)
    
    # downscaling has a "smoothing" effect
    lena = cv2.resize(lena, (100,100))
    
    # create the x and y coordinate arrays (here we just use pixel indices)
    xx, yy = np.mgrid[0:lena.shape[0], 0:lena.shape[1]]
    
    # create the figure
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    ax.plot_surface(xx, yy, lena ,rstride=1, cstride=1, cmap=plt.cm.jet,
                    linewidth=0)
    
    # show it
    plt.show()
    

    如果要获取彩色绘图,请将代码更改为:“cmap=plt.cm.jet”。 所以你可以得到这样的东西: color plot