0
点赞
收藏
分享

微信扫一扫

python中3D地形图展示16bit图像维度数据的工具包

佳简诚锄 2022-02-11 阅读 72

可以像matlab一样展示图像数据维度,

为了用于在深度学习调试图片前处理时进行可视化,

并且解决了用plt.imshow图像不显示的问题(有人能告知一下到底怎么解决嘛,令人头秃)

可以展示全部,也可以只展示一部分(前200wh)

可以从路径展示图片,也可以从数据data展示图片

大于1200*1200+16bit图像的话,请谨慎使用展示全部

会非常慢

import tifffile
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import os
import pylab

def visualize(image):
    # Divide all values by 65535 so we can display the image using matplotlib
    image = image / 65535 *255
    plt.figure(figsize=(10, 10))
    plt.axis('off')
    plt.imshow(image)
    pylab.show()


def visual_img_from_path(path,id=False):

    if id:
        image_ori=tifffile.imread(os.path.join(path,  id + '.tif'))

    else:
        image_ori = tifffile.imread(path)

    shape=image_ori.shape
    print(shape)
    #plt.imshow(image_ori)
    #
    x = np.arange(0, shape[0], 1)
    y = np.arange(0, shape[1], 1)
    X, Y = np.meshgrid(x, y)
    Z=image_ori[X,Y]


    fig = plt.figure()

    ax1 = Axes3D(fig)
    # ax2.set_aspect("auto")

    ax1.plot_surface(X,Y,Z, rstride=20, cstride=20,alpha=0.3, cmap=plt.get_cmap('winter'))
    # 设置图像z轴的显示范围,x、y轴设置方式相同

    ax1.contour(X, Y, Z, zdir='z', cmap="rainbow")  # 生成z方向投影,投到x-y平面
    ax1.contour(X, Y, Z, zdir='x', cmap="rainbow")  # 生成x方向投影,投到y-z平面
    ax1.contour(X, Y, Z, zdir='y', cmap="rainbow")
    plt.show()

def visual_img_from_data(data):

    shape=data.shape
    print(shape)
    #plt.imshow(image_ori)
    #
    x = np.arange(0, shape[0], 1)
    y = np.arange(0, shape[1], 1)
    X, Y = np.meshgrid(x, y)
    Z=data[X,Y]



    fig = plt.figure()

    ax2 = Axes3D(fig)
    # ax2.set_aspect("auto")

    ax2.plot_surface(X,Y,Z, rstride=20, cstride=20, alpha=0.3,cmap=plt.get_cmap('summer'))

    ax2.contour(X, Y, Z, zdir='z', cmap="rainbow")  # 生成z方向投影,投到x-y平面
    ax2.contour(X, Y, Z, zdir='x', cmap="rainbow")  # 生成x方向投影,投到y-z平面
    ax2.contour(X, Y, Z, zdir='y', cmap="rainbow")
    # 设置图像z轴的显示范围,x、y轴设置方式相同
    plt.show()


def visual_img_part_from_data(data):

    shape=data.shape
    print(shape)
    #plt.imshow(image_ori)
    #
    x = np.arange(0, 200, 1)
    y = np.arange(0, 200, 1)
    X, Y = np.meshgrid(x, y)
    Z=data[X,Y]


    fig = plt.figure()

    ax2 = Axes3D(fig)
    # ax2.set_aspect("auto")

    ax2.plot_surface(X,Y,Z, rstride=5, cstride=5, alpha=0.3,cmap=plt.get_cmap('summer'))

    ax2.contour(X, Y, Z, zdir='z', cmap="rainbow")  # 生成z方向投影,投到x-y平面
    ax2.contour(X, Y, Z, zdir='x', cmap="rainbow")  # 生成x方向投影,投到y-z平面
    ax2.contour(X, Y, Z, zdir='y', cmap="rainbow")
    # 设置图像z轴的显示范围,x、y轴设置方式相同
    plt.show()

def visual_img_part_from_path(path,id=False):

    if id:
        image_ori=tifffile.imread(os.path.join(path,  id + '.tif'))

    else:
        image_ori = tifffile.imread(path)

    shape=image_ori.shape
    print(shape)
    #plt.imshow(image_ori)
    #
    x = np.arange(0, 200, 1)
    y = np.arange(0, 200, 1)
    X, Y = np.meshgrid(x, y)
    Z=image_ori[X,Y]


    fig = plt.figure()

    ax1 = Axes3D(fig)
    # ax2.set_aspect("auto")

    ax1.plot_surface(X,Y,Z, rstride=20, cstride=20,alpha=0.3, cmap=plt.get_cmap('winter'))
    # 设置图像z轴的显示范围,x、y轴设置方式相同

    ax1.contour(X, Y, Z, zdir='z', cmap="rainbow")  # 生成z方向投影,投到x-y平面
    ax1.contour(X, Y, Z, zdir='x', cmap="rainbow")  # 生成x方向投影,投到y-z平面
    ax1.contour(X, Y, Z, zdir='y', cmap="rainbow")
    plt.show()
举报

相关推荐

0 条评论