conrad的python包装(https://ww5.cs.fau.de/conrad/),一个用于锥束射线照相的框架

pyconrad的Python项目详细描述


皮康拉德

PyPI versionBuild Statushttps://codecov.io/gh/theHamsta/pyconrad/branch/master/graph/badge.svg

conrad框架的python包装器(https://www5.cs.fau.de/conrad/

康拉德

conrad是一个最先进的软件平台,有大量的文档。它基于独立于平台的技术。特殊库提供对硬件加速的访问,如CUDA和OpenCL。有一个易于并行处理的接口。该软件包包括不同的模拟工具,能够生成4-d投影和体积数据以及相应的矢量运动场。包括著名的重建算法,如fbp、dbp和art。包中的所有算法都引用了一个科学源。有关详细信息,请访问http://conrad.stanford.edu

安装

通过PIP安装:

pip install pyconrad

或者如果您使用:

pip install -e .

这将自动安装conrad和所有python依赖项。正确运行的需求在3.5版或更新版本的python和java 8中。

如果在安装过程中遇到问题,请查看我们的wiki:https://git5.cs.fau.de/PyConrad/pyCONRAD/wikis/home

测试

如果您想测试PyConrad是否在您的计算机上正常工作,您可以通过以下途径执行本报告中包含的所有测试:

python setup.py test

更改日志

可以找到CHANGELOG.md

用法

您可以用python启动conrad,如下所示:

importpyconradpyconrad.setup_pyconrad()pyconrad.start_gui()# start ImageJpyconrad.start_reconstruction_pipeline_gui()# if you want to start CONRAD's reconstruction filter pipeline

或者可以从命令行运行conrad重建管道:

conrad
# or: conrad_imagej

imagej命令

初始化jvm后,可以访问imagej和conrad的所有类。

importpyconrad.autoinitimportijfromedu.stanford.rsl.conrad.data.numericimportNumericGridimportnumpyasnppyconrad.start_gui()a=np.random.rand(20,30)grid=NumericGrid.from_numpy(a)grid.show()ij.IJ.run('FFT')

imshow

您还可以使用pyconrad查看imagej中的numpy数组。

importpyconrad.autoinitimportnumpyasnpimporttimea=np.random.rand(20,30)luts=['Fire','Spectrum','Ice','Cyan']forlutinluts:pyconrad.imshow(a,lut,lut=lut)print('Enjoy white noise!')foriinrange(300):noise=np.random.rand(200,200)pyconrad.imshow(noise,'White noise',spacing=(3,2),origin=(0,2))time.sleep(0.01)pyconrad.close_all_windows()

基本示例

您可以通过pyconrad.edu()或使用方便类classgetter访问Conrad的Java类。

importpyconrad.autoinitimportedu.stanford.rsl.tutorial.phantomsfromedu.stanford.rsl.conrad.phantomimportNumericalSheppLogan3Dphantom2d=edu.stanford.rsl.tutorial.phantoms.MickeyMouseGrid2D(100,100)phantom3d=NumericalSheppLogan3D(100,100,100).getNumericalSheppLoganPhantom()# You can also group Java packages an access all classes that are contained (import * does not work)# Access more easily using ClassGetter (# type: pyconrad.AutoCompleteConrad adds static auto-complete feature for ClassGetter.edu)_=pyconrad.ClassGetter('edu.stanford.rsl.tutorial.phantoms','edu.stanford.rsl.conrad.phantom')# type: pyconrad.AutoCompleteConradprint('This is a Java class: '+str(_.NumericalSheppLogan3D))# Shape is for dimensions (z,y,x), size for (x,y,z)print(grid.shape)print(grid.size)# Use Java method of class MickeyMouseGrid2Dphantom2d.show()phantom3d.show()

也可以将内存传输到numpy.ndarray。数值网格有额外的方法from_numpyas_numpy

_=pyconrad.ClassGetter()array=np.random.rand(4,2,3).astype(pyconrad.java_float_dtype)grid=_.NumericGrid.from_numpy(array)# Manipulate data in using CONRAD at Position (x,y,z) = (0,1,3)grid.setValue(5.0,[0,1,3])# or easier with Python indices (reversed)grid[3,1,0]=5# Shapeprint(grid.shape)print(grid.size)# Get modified arraynew_array=grid.as_numpy()# Attention: Python has a different indexing (z,y,x)print('Old value: %f'%array[3,1,0])print('New value: %f'%new_array[3,1,0])

更多示例

可以找到更多示例here

自动完成

由于很难记住java函数和类的确切名称,pyconrad为conrad类提供了基本的自动完成功能。 只需给ide一个类型提示,对象表示某个java命名空间或类(# type: pyconrad.AutoCompleteConrad.edu.standford...)。

与PyCharm一起工作:

autocomplete_video

java类的扩展方法

为了方便java和python之间的转换,我们在python中扩展了一些重要的java类,以便在相应的java类和相应的numpy结构之间进行转换。 扩展了以下Java类:

  • 点nd
  • 简单驱动器
  • 简单矩阵
  • 数值网格(因此所有网格1d-网格4d)

使用以下方法:

  • 作为numpy(取决于类表示的数组或矩阵)
  • 从努比
  • 从列表中
  • 来自tif
  • 保存tif
  • 保存vtk

常见问题

# Creating a PointND_.PointND(3,3)# does not work_.PointND([3,3])# this does work_.PointND(JArray(JDouble)([3,2]))# works_.PointND.from_numpy(np.array([2.1,3.1]))#works, uses extension method_.PointND.from_list([2.1,3.1])#works, uses extension method# Getting PointND as numpy arraynumpy_point=java_point.as_numpy()# the same applies for SimpleVector_.SimpleVector([3,2])# does not work. pyconrad does not know whether you want to call SimpleVector(final double... otherBuffer) or public SimpleVector(final float... otherBuffer)_.SimpleVector(JArray(JDouble)([3,2]))# works_.SimpleVector.from_numpy(np.array([2.1,3.1]))#works, uses extension method_.SimpleVector.from_list([2.1,3.1])#works, uses extension method#Getting SimpleVector as numpy arraynumpy_vector=java_vector.as_numpy()#the same applies for SimpleMatrix_.SimpleMatrix(JArray(JDouble,2)([[1.1,2.2,3.3],[4.4,5.5,6.6]]))# works_.SimpleMatrix.from_numpy(np.matrix([[1.1,2.2,3.3],[4.4,5.5,6.6]]))#works, uses extension method_.SimpleMatrix.from_list([[1.1,2.2,3.3],[4.4,5.5,6.6]])#works, uses extension method#Getting SimpleMatrix as numpy matrixnumpy_matrix=java_matrix.as_numpy()# Grid.setOrigin(...), setSpacing_.Grid2D(3,2).setOrigin(JArray(JDouble)([2,3]))# Creating nested enumstraj=_.HelicalTrajectory()print(traj.getDetectorOffsetU())# returns a floatenumval=_.['Projection$CameraAxisDirection'].values()[int(traj.getDetectorOffsetU())]# Convert back to enumenumval=jvm.enumval_from_int('Projection$CameraAxisDirection',traj.getDetectorOffsetU())# or like that

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java基于Maven结果构建不同的Docker映像(与Jenkins一起)   java为什么在捕获异常时顺序很重要?   java如何创建或添加文本编辑器来使用swing输入数学方程?   构建/编译颤振应用程序时的java问题   java如何在调用方中返回数据之前等待JavaFX服务完成?   java如何将文件而不仅仅是文本发送到JMS队列?   c#将StringBuilder#AppendFormat转换为java   web应用程序中的java授权   java找不到元素:通过POM执行代码时出错,通过单个main()程序执行时,同一定位器工作正常   从Java运行带有自定义模块导入的Python脚本   多线程Java堆内存使用率波动   使用Java在MongoDB中进行动态聚合   unicode UTF8到Java中的EBCDIC   java项目不会在Android Studio中运行