95 lines
2.2 KiB
Python
95 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Demonstrate a simple data-slicing task: given 3D data (displayed at top), select
|
|
a 2D plane and interpolate data along that plane to generate a slice image
|
|
(displayed at bottom).
|
|
|
|
|
|
"""
|
|
|
|
## Add path to library (just for examples; you do not need this)
|
|
|
|
import numpy as np
|
|
from pyqtgraph.Qt import QtCore, QtGui
|
|
import pyqtgraph as pg
|
|
|
|
app=QtGui.QApplication([])
|
|
|
|
## Create window with two ImageView widgets
|
|
win=QtGui.QMainWindow()
|
|
win.resize(800, 800)
|
|
win.setWindowTitle('pyqtgraph example: DataSlicing')
|
|
cw=QtGui.QWidget()
|
|
win.setCentralWidget(cw)
|
|
l=QtGui.QGridLayout()
|
|
cw.setLayout(l)
|
|
imv1=pg.ImageView()
|
|
imv2=pg.ImageView()
|
|
l.addWidget(imv1, 0, 0)
|
|
l.addWidget(imv2, 1, 0)
|
|
sld=QtGui.QSlider(QtCore.Qt.Horizontal)
|
|
sld.setMinimum(10)
|
|
sld.setMaximum(30)
|
|
sld.setValue(20)
|
|
sld.setTickPosition(QtGui.QSlider.TicksBelow)
|
|
sld.setTickInterval(5)
|
|
|
|
l.addWidget(sld, 2, 0)
|
|
win.show()
|
|
|
|
roi=pg.LineSegmentROI([[10, 64], [120, 64]], pen='r')
|
|
imv1.addItem(roi)
|
|
|
|
x1=np.linspace(-30, 10, 128)[:, np.newaxis, np.newaxis]
|
|
x2=np.linspace(-20, 20, 128)[:, np.newaxis, np.newaxis]
|
|
y=np.linspace(-30, 10, 128)[np.newaxis, :, np.newaxis]
|
|
z=np.linspace(-20, 20, 128)[np.newaxis, np.newaxis, :]
|
|
d1=np.sqrt(x1**2+y**2+z**2)
|
|
d2=2*np.sqrt(x1[::-1]**2+y**2+z**2)
|
|
d3=4*np.sqrt(x2**2+y[:, ::-1]**2+z**2)
|
|
data=(np.sin(d1)/d1**2)+(np.sin(d2)/d2**2)+(np.sin(d3)/d3**2)
|
|
|
|
import PIL.Image
|
|
from scipy import ndimage
|
|
import glob
|
|
imgLst=sorted(glob.glob("image*.png"))
|
|
v=np.ndarray(shape=(len(imgLst), 2))
|
|
|
|
#for i, fn in enumerate(imgLst):
|
|
# img=PIL.Image.open(fn)
|
|
# img=np.asarray(img)
|
|
# s=ndimage.sobel(img)
|
|
# v[i, 0]=s.sum()
|
|
# v[i, 1]=s.std()
|
|
#fig, ax=plt.subplots()
|
|
#mx=v.max(0)
|
|
#mn=v.min(0)
|
|
#v=(v-mn)/(mx-mn)
|
|
# ax.plot(v[:,0])
|
|
#ax.plot(v)
|
|
#plt.show()
|
|
# pass
|
|
|
|
|
|
def update():
|
|
global data, imv1, imv2, imgLst
|
|
d2=roi.getArrayRegion(data, imv1.imageItem, axes=(1, 2))
|
|
imv2.setImage(d2)
|
|
|
|
|
|
roi.sigRegionChanged.connect(update)
|
|
|
|
## Display the data
|
|
imv1.setImage(data)
|
|
imv1.setHistogramRange(-0.01, 0.01)
|
|
imv1.setLevels(-0.003, 0.003)
|
|
|
|
update()
|
|
|
|
## Start Qt event loop unless running in interactive mode.
|
|
if __name__=='__main__':
|
|
import sys
|
|
|
|
if (sys.flags.interactive!=1) or not hasattr(QtCore, 'PYQT_VERSION'):
|
|
QtGui.QApplication.instance().exec_()
|