Comments (15)
Sure, no problem. One more thing. I'm not sure you actually want to specify the voxel size as 1 mm. Doing this would mean that 128 columns of your projection data would never see anything. Do you want to make your voxels bigger so that they fill the field of view? If so, you could do this:
proj.leapct.set_volume(256,256,1,pixelSize*384.0/256.0,pixelSize)
from leap.
Really sorry about all the issues you are experiencing. The code changed a lot in the past few months and our changes kept breaking other things. We think these issues should now be resolved.
Please pull the newest version of the code and re-try. Note that the syntax of the demos have changed and we deleted all the example data. Now you just run the script and it will simulate the input data for you.
from leap.
Firstly, dear developer, please accept my sincere gratitude. After downloading the latest version of leap and installing it using pip install -v ., I encountered the following error. I don’t understand how to solve this error, especially “CMake Error in src/CMakeLists.txt: Unknown CUDA architecture specifier ‘major’.” Can you tell me how to solve it?
Using pip 23.3.2 from /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages/pip (python 3.9)
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Processing /data4/liqiaoxin/code/LEAP-main
Running command pip subprocess to install build dependencies
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting setuptools>=40.8.0
Downloading http://mirrors.aliyun.com/pypi/packages/55/3a/5121b58b578a598b269537e09a316ad2a94fdd561a2c6eb75cd68578cc6b/setuptools-69.0.3-py3-none-any.whl (819 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 819.5/819.5 kB 8.6 MB/s eta 0:00:00
Collecting wheel
Using cached http://mirrors.aliyun.com/pypi/packages/c7/c3/55076fc728723ef927521abaa1955213d094933dc36d4a2008d5101e1af5/wheel-0.42.0-py3-none-any.whl (65 kB)
Installing collected packages: wheel, setuptools
Successfully installed setuptools-69.0.3 wheel-0.42.0
Installing build dependencies ... done
Running command Getting requirements to build wheel
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The CUDA compiler identification is NVIDIA 12.0.76
-- Detecting CUDA compiler ABI info
-- Detecting CUDA compiler ABI info - done
-- Check for working CUDA compiler: /usr/local/cuda/bin/nvcc - skipped
-- Detecting CUDA compile features
-- Detecting CUDA compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Found CUDA: /usr/local/cuda (found suitable version "12.0", minimum required is "11.7")
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Configuring done
CMake Error in src/CMakeLists.txt:
Unknown CUDA architecture specifier "major".
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
/tmp/pip-build-env-1mrw73a5/overlay/lib/python3.9/site-packages/setuptools/dist.py:472: SetuptoolsDeprecationWarning: Invalid dash-separated options
!!
********************************************************************************
Usage of dash-separated 'description-file' will not be supported in future
versions. Please use the underscore name 'description_file' instead.
By 2024-Sep-26, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self.warn_dash_deprecation(opt, section)
running egg_info
writing src/leapct.egg-info/PKG-INFO
writing dependency_links to src/leapct.egg-info/dependency_links.txt
writing requirements to src/leapct.egg-info/requires.txt
writing top-level names to src/leapct.egg-info/top_level.txt
reading manifest file 'src/leapct.egg-info/SOURCES.txt'
writing manifest file 'src/leapct.egg-info/SOURCES.txt'
Getting requirements to build wheel ... done
Running command Preparing metadata (pyproject.toml)
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The CUDA compiler identification is NVIDIA 12.0.76
-- Detecting CUDA compiler ABI info
-- Detecting CUDA compiler ABI info - done
-- Check for working CUDA compiler: /usr/local/cuda/bin/nvcc - skipped
-- Detecting CUDA compile features
-- Detecting CUDA compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Found CUDA: /usr/local/cuda (found suitable version "12.0", minimum required is "11.7")
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Configuring done
CMake Error in src/CMakeLists.txt:
Unknown CUDA architecture specifier "major".
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
/tmp/pip-build-env-1mrw73a5/overlay/lib/python3.9/site-packages/setuptools/dist.py:472: SetuptoolsDeprecationWarning: Invalid dash-separated options
!!
********************************************************************************
Usage of dash-separated 'description-file' will not be supported in future
versions. Please use the underscore name 'description_file' instead.
By 2024-Sep-26, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self.warn_dash_deprecation(opt, section)
running dist_info
creating /tmp/pip-modern-metadata-vobiu9_5/leapct.egg-info
writing /tmp/pip-modern-metadata-vobiu9_5/leapct.egg-info/PKG-INFO
writing dependency_links to /tmp/pip-modern-metadata-vobiu9_5/leapct.egg-info/dependency_links.txt
writing requirements to /tmp/pip-modern-metadata-vobiu9_5/leapct.egg-info/requires.txt
writing top-level names to /tmp/pip-modern-metadata-vobiu9_5/leapct.egg-info/top_level.txt
writing manifest file '/tmp/pip-modern-metadata-vobiu9_5/leapct.egg-info/SOURCES.txt'
reading manifest file '/tmp/pip-modern-metadata-vobiu9_5/leapct.egg-info/SOURCES.txt'
writing manifest file '/tmp/pip-modern-metadata-vobiu9_5/leapct.egg-info/SOURCES.txt'
creating '/tmp/pip-modern-metadata-vobiu9_5/leapct-1.0.dist-info'
Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: numpy in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from leapct==1.0) (1.26.3)
Requirement already satisfied: torch in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from leapct==1.0) (2.1.2)
Requirement already satisfied: filelock in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (3.13.1)
Requirement already satisfied: typing-extensions in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (4.9.0)
Requirement already satisfied: sympy in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (1.12)
Requirement already satisfied: networkx in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (3.2.1)
Requirement already satisfied: jinja2 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (3.1.2)
Requirement already satisfied: fsspec in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (2023.12.2)
Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (12.1.105)
Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (12.1.105)
Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (12.1.105)
Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (8.9.2.26)
Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (12.1.3.1)
Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (11.0.2.54)
Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (10.3.2.106)
Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (11.4.5.107)
Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (12.1.0.106)
Requirement already satisfied: nvidia-nccl-cu12==2.18.1 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (2.18.1)
Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (12.1.105)
Requirement already satisfied: triton==2.1.0 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from torch->leapct==1.0) (2.1.0)
Requirement already satisfied: nvidia-nvjitlink-cu12 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch->leapct==1.0) (12.3.101)
Requirement already satisfied: MarkupSafe>=2.0 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from jinja2->torch->leapct==1.0) (2.1.3)
Requirement already satisfied: mpmath>=0.19 in /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages (from sympy->torch->leapct==1.0) (1.3.0)
Building wheels for collected packages: leapct
Running command Building wheel for leapct (pyproject.toml)
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The CUDA compiler identification is NVIDIA 12.0.76
-- Detecting CUDA compiler ABI info
-- Detecting CUDA compiler ABI info - done
-- Check for working CUDA compiler: /usr/local/cuda/bin/nvcc - skipped
-- Detecting CUDA compile features
-- Detecting CUDA compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Found CUDA: /usr/local/cuda (found suitable version "12.0", minimum required is "11.7")
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Configuring done
CMake Error in src/CMakeLists.txt:
Unknown CUDA architecture specifier "major".
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
/tmp/pip-build-env-1mrw73a5/overlay/lib/python3.9/site-packages/setuptools/dist.py:472: SetuptoolsDeprecationWarning: Invalid dash-separated options
!!
********************************************************************************
Usage of dash-separated 'description-file' will not be supported in future
versions. Please use the underscore name 'description_file' instead.
By 2024-Sep-26, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self.warn_dash_deprecation(opt, section)
running bdist_wheel
running build
running build_py
copying src/leaptorch.py -> build/lib
copying src/leapctype.py -> build/lib
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/wheel
copying build/lib/leaptorch.py -> build/bdist.linux-x86_64/wheel
copying build/lib/leapctype.py -> build/bdist.linux-x86_64/wheel
running install_egg_info
running egg_info
writing src/leapct.egg-info/PKG-INFO
writing dependency_links to src/leapct.egg-info/dependency_links.txt
writing requirements to src/leapct.egg-info/requires.txt
writing top-level names to src/leapct.egg-info/top_level.txt
reading manifest file 'src/leapct.egg-info/SOURCES.txt'
writing manifest file 'src/leapct.egg-info/SOURCES.txt'
Copying src/leapct.egg-info to build/bdist.linux-x86_64/wheel/leapct-1.0-py3.9.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/leapct-1.0.dist-info/WHEEL
creating '/tmp/pip-wheel-x7gj8bll/.tmp-jgdx75vo/leapct-1.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'leapctype.py'
adding 'leaptorch.py'
adding 'leapct-1.0.dist-info/METADATA'
adding 'leapct-1.0.dist-info/WHEEL'
adding 'leapct-1.0.dist-info/top_level.txt'
adding 'leapct-1.0.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Building wheel for leapct (pyproject.toml) ... done
Created wheel for leapct: filename=leapct-1.0-py3-none-any.whl size=27449 sha256=71867d70746352ba2558f364ff7b5f5fda4cffcaddfef3a81841f221fae831b0
Stored in directory: /data4/liqiaoxin/.cache/pip/wheels/7d/1d/94/4df1ba5b11c10424179467f3cfcc967f1ccd00c93433c90412
Successfully built leapct
Installing collected packages: leapct
Attempting uninstall: leapct
Found existing installation: leapct 1.0
Uninstalling leapct-1.0:
Removing file or directory /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages/pycache/leapctype.cpython-39.pyc
Removing file or directory /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages/pycache/leaptorch.cpython-39.pyc
Removing file or directory /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages/leapct-1.0.dist-info/
Removing file or directory /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages/leapctype.py
Removing file or directory /home/liqiaoxin/anaconda3/envs/pytorch/lib/python3.9/site-packages/leaptorch.py
Successfully uninstalled leapct-1.0
Successfully installed leapct-1.0
from leap.
OK, try this. Open src\CMakeLists.txt and comment out line 129 by adding a #
Then remove the # on line 131.
from leap.
OK, try this. Open src\CMakeLists.txt and comment out line 129 by adding a # Then remove the # on line 131.
Thank you for your reply, your suggestion seems to have worked. However, I have a small issue. When I run the test_project_and_FBP.py demo, it seems that you didn’t create a sample_data folder in the latest directory. Therefore, when saving data, there is a small error message indicating that the path does not exist. This can be resolved by simply creating a sample_data folder.
from leap.
I appreciate the feedback. I added that directory back in. Let me know if you run into any other issues.
from leap.
Hello, I have some questions about the usage logic of LEAP. Are proj.leapct.set_default_volume() and proj.allocate_batch_data() necessary, or are they just for pre-allocating space? I noticed that vol_data and proj_data seem to be attributes of the Projector, so do I need to input the image into proj before using it? Do the data f_th and g_th in proj(f_th) and proj.fbp(g_th) need to be put into vol_data and proj_data every time before calling? I think these questions may be related to your INRTO.md document, but this document has not been updated recently, is its content still valid? I look forward to your answer.
from leap.
You asked a lot of questions in this post. Some of your questions I don't quite understand, so I'll answer a few of them now and maybe you and I will better understand each other as we move through this.
First of all, if you want to use the NN solvers, you must allocate the space for the batch data. You don't necessarily have to run the call: allocate_batch_data(), but if you don't you'll have to set these member variables yourself. If you try running without allocating this space, it will return an error. Basically, any time you want to do tomography, you'll have to allocate space for the projection data and the reconstruction (volume) data. Pre-allocating these arrays makes it so you don't have to allocate space each iteration.
Next, let's talk about the set_default_volume() function. This function is just for convenience. It does not allocate any memory, all it does it tells LEAP how to define the reconstruction volume. It defines the "default volume" which is the volume that fills the field of view of your data and uses the native voxel sizes. You can also do this yourself with the set_volume(...) command, where you tell LEAP how many voxels in each dimension, the voxel sizes (mm), and if you want this shifted from the origin. We do recommend you use the set_default_volume() command as it is usually what most people want and the code runs most efficiently, but you are free to define it how you want. You do need to define the volume parameters before you allocate memory for it.
I'll answer the reminder of your questions after you reply to this post.
I'd also like to mention that all of this is for doing reconstruction with neutral networks. If you just want to do tomographic reconstruction, you should go directly through the tomographicModels class which is in leapctype.py.
from leap.
Thank you very much for your detailed answer. Your answer has been very helpful for me to understand and use LEAP! I also plan to use LEAP to replace the algorithm I wrote myself, and to state and cite it when publishing papers.
Here are some questions I have when using the LEAP package: Should proj be regarded as a projection and reconstruction operation function, or a class containing operation data? If proj is considered as an operation function, proj needs vol_data and proj_data attributes to store the reconstructed data and projection data, but these are needed as input data for proj() and proj.fbp(), which confuses me. If proj is considered as an object containing operation data, then sino = proj(img) and img = proj.fbp(sino) seem like operator functions. In neural networks, the output img is different each time, does this mean different proj objects? This also confuses me. In other words, a proj object contains the projection function, the projection function, the projection data, and the projection data, which makes it difficult for me to understand. I don’t know which ones are necessary and which ones are optional, which makes me unsure how to use it when using it as a layer in neural networks. (Your INTRO.md provides an example of usage, but I’m not sure if this document is still applicable after the records of the LEAP package have been modified)
I tried to use LEAP for a (256,256) image FP and FBP, but I got unexpected results. Can you tell me where I went wrong?
from leaptorch import Projector
proj = Projector(forward_project=True, use_static=True, use_gpu=True, gpu_device=torch.device('cuda:0'), batch_size=1)
numCols = 384
numAngles = 1000
pixelSize = 1
numRows = 1
proj.leapct.set_parallelbeam(numAngles, numRows, numCols, pixelSize, pixelSize, 0.5 * (numRows - 1),
0.5 * (numCols - 1), proj.leapct.setAngleArray(numAngles, 180.0))
proj.leapct.set_default_volume()
proj.allocate_batch_data()
f_th = torch.from_numpy(image).unsqueeze(0).unsqueeze(0).to(torch.device('cuda'))
sino_slice3 = proj(f_th)
FBP_CT3 = proj.fbp(sino_slice3)[0, 0, :, :].cpu().numpy()
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.colorbar()
plt.axis('off')
plt.title('truth')
plt.subplot(1, 2, 2)
plt.imshow(FBP_CT3, cmap='gray')
plt.colorbar()
plt.axis('off')
plt.title('recon')
plt.show()
from leap.
First I'll address the issue with the brain CT reconstruction. You are getting a bogus answer because you specified your image size as 384 x 384, but you provided an image of size 256 x 256. Note that the set_default_volume() sets the size of your reconstruction, so since you wanted 256 x 256, you should have done something like this instead:
proj.leapct.set_volume(256, 256, 1, pixelSize, pixelSize)
from leap.
The Projector class should be viewed as a torch.nn.Module that performs forward and back projections.
You shouldn't have to worry about proj_data and vol_data. They are just internal data arrays used for the calculations. You do not need to fill these with any values and should be viewed as private member variables. You provide the inputs and the Projector class will generate the outputs. Yes, the values of the data (either projections or volume data) are constantly changing. What is static is the parameters that specify the CT geometry and CT volume, including the data dimension sizes.
Did you see the demo scripts here?
https://github.com/LLNL/LEAP/tree/main/demo_leaptorch
You should especially look at this one:
https://github.com/LLNL/LEAP/blob/main/demo_leaptorch/test_recon_NN.py
as it provides a nice usage example.
from leap.
Even if I change numCols to 256, or change proj.leapct.set_default_volume() to proj.leapct.set_volume(256, 256, 1, pixelSize, pixelSize), the resulting image is incorrect (the sino_slice3 obtained after proj(f_th) is also wrong, all are inf or nan). When I set numCols to 256, the sino_slice3.max() obtained after proj(f_th) is inf, and when I set numCols to 384, the sino_slice3.min() obtained after proj(f_th) is nan. I have been puzzled as to why this error occurs.
from leap.
I don't have your input image, so I made one that is just a square. The following code works for me:
import torch
import matplotlib.pyplot as plt
import numpy as np
from leaptorch import Projector
proj = Projector(forward_project=True, use_static=True, use_gpu=True, gpu_device=torch.device('cuda:0'), batch_size=1)
numCols = 384
numAngles = 1000
pixelSize = 1
numRows = 1
proj.leapct.set_parallelbeam(numAngles, numRows, numCols, pixelSize, pixelSize, 0.5 * (numRows - 1),
0.5 * (numCols - 1), proj.leapct.setAngleArray(numAngles, 180.0))
#proj.leapct.set_default_volume()
proj.leapct.set_volume(256,256,1,pixelSize,pixelSize)
proj.allocate_batch_data()
image = np.zeros((256,256),dtype=np.float32)
image[image.shape[0]//2-10:image.shape[0]//2+10,image.shape[1]//2-10:image.shape[1]//2+10] = 1.0
f_th = torch.from_numpy(image).unsqueeze(0).unsqueeze(0).to(torch.device('cuda'))
sino_slice3 = proj(f_th)
FBP_CT3 = proj.fbp(sino_slice3)[0,0,:,:].cpu().numpy()
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.colorbar()
plt.axis('off')
plt.title('truth')
plt.subplot(1, 2, 2)
plt.imshow(FBP_CT3, cmap='gray')
plt.colorbar()
plt.axis('off')
plt.title('recon')
plt.show()
from leap.
I found out what the problem was. There was an error when my input image was 64-bit. Changing it to 32-bit solved the problem.Thank you so much!!!
from leap.
"You are right, thank you for the reminder, this improvement has helped me a lot!"
from leap.
Related Issues (20)
- big data, small RAM HOT 1
- The NaN problem in Iteration Reconstruction HOT 4
- issue: cone-beam with truncatedscan HOT 4
- Installing error HOT 14
- Can we intinialize the CT image when do iterative reconstruction methods on sinogram? HOT 5
- 3D reconstruction on LEAP HOT 6
- Forward projection bug related to the voxel spacing HOT 3
- Issue with LEAP Library Support on MacOS HOT 5
- Remove the limitation of 5 degree aligned to z-axis HOT 5
- Issue with Helical Reconstruction Geometry Parameters in Leap HOT 9
- laminography zero recon slice issue HOT 3
- Incorrect number of voxels in helical geometry when angular range is bigger than 360 degrees HOT 1
- Laminography multiply factor to align the projection image to slice image HOT 9
- Out of Memory Error for 4000x4000x2096 VOLUME HOT 23
- Out boundary brightness issue HOT 2
- batch mode in projection and its adjoint HOT 6
- intensity shift of helical fbp HOT 12
- Projection image's intensity slope reverse issue HOT 12
- fail to backpropagate after proj.fbp HOT 9
- Phantom jig calibration supporting HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from leap.