簡體   English   中英

numpy中3D陣列的二維切片系列

[英]2D slice series of 3D array in numpy

我有一個 3D 數組,它表示笛卡爾空間上的密度值。 要獲得 2D 圖像,我只需使用sum(array,2)對其中一個軸求和,然后使用 matplotlib function imshow(array2D)來獲得 2D 圖像。

我想要做的是使用imshow()一次只顯示 3D 數組的一個切片,以便我可以“翻頁”通過 3D 數組來查看圖像的不同點。

切片命令很簡單: array[:,:,x]但我看不出有辦法至少一次顯示每個切片。 除了每次手動更改程序文件之外,還有其他人有什么建議嗎? 這可以以某種方式以交互方式完成嗎?

我實際上編寫了代碼來做我認為你正在尋找的東西,看看這是否有幫助:

import numpy as np
import pylab

class plotter:
    def __init__(self, im, i=0):
        self.im = im
        self.i = i
        self.vmin = im.min()
        self.vmax = im.max()
        self.fig = pylab.figure()
        pylab.gray()
        self.ax = self.fig.add_subplot(111)
        self.draw()
        self.fig.canvas.mpl_connect('key_press_event',self)

    def draw(self):
        if self.im.ndim is 2:
            im = self.im
        if self.im.ndim is 3:
            im = self.im[...,self.i]
            self.ax.set_title('image {0}'.format(self.i))

        pylab.show()

        self.ax.imshow(im, vmin=self.vmin, vmax=self.vmax, interpolation=None)


    def __call__(self, event):
        old_i = self.i
        if event.key=='right':
            self.i = min(self.im.shape[2]-1, self.i+1)
        elif event.key == 'left':
            self.i = max(0, self.i-1)
        if old_i != self.i:
            self.draw()
            self.fig.canvas.draw()


def slice_show(im, i=0):
    plotter(im, i)

只需在 3d 陣列上調用 show function,我會告訴它要顯示的切片。 只要您選擇了 plot,就可以使用箭頭鍵逐步瀏覽切片。

請注意,這需要 arrays 的形狀為 (x, y, z),例如,您可以使用 np.dstack((im1, im2, ...)) 從一系列 2d arrays 中獲取這樣的數組。

另請參閱帶有兩個滑塊的交互式 matplotlib plot 以獲取使用 gui 滑塊執行此操作的代碼示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM