8000 Have issue when using RDLS to perform limited-angle cone beam reconstruction · Issue #157 · LLNL/LEAP · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Have issue when using RDLS to perform limited-angle cone beam reconstruction #157

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
stefenmax opened this issue Mar 18, 2025 · 4 comments

Comments

@stefenmax
Copy link

Hi Kyle:
Recently I want to use iterative algorithm to perform limited-angle cone beam reconstruction. The specfication is as follows:

proj size is (984 ,256, 821) # view, row, column
proj = proj[656:984, :,:] #choose 328 view from 984 view
self.numRows = 256
self.numCols = 821
self.sod = 625.61
self.sdd = 1097
self.pixelSizex = 1.09
self.pixelSizey = 0.8224 * 1097 / 821
self.start_angle = 180
self.end_angle = self.start_angle + ang_num
self.numAngles = round(ang_num/360984)
self.voxelsize = 0.9
self.angles = np.linspace(self.start_angle, self.end_angle, self.numAngles, dtype=np.float32)
leapct.set_conebeam(self.numAngles, self.numRows, self.numCols, self.pixelSizex, self.pixelSizey, 0.5
(self.numRows-1), 0.5*(self.numCols-1), self.angles, self.sod, self.sdd)
leapct.set_curvedDetector()
leapct.set_volume(img_size, img_size, self.numRows, voxelWidth = self.voxelsize, voxelHeight = self.voxelsize) #numX, numY, numZ, voxelWidth=None, voxelHeight=None
rec = copy.deepcopy(init)
rec = rec.squeeze(1)
filters = filterSequence()
filters.append(TV(leapct, delta=0.01/100.0, p=1.0))
leapct.ASDPOCS(proj,rec,iter_num,50,10,filters)
leapct.RDLS(proj,rec,iter_num,filters)

And the ASDPOCS is works fine(left image), but the RDLS result is not good contain lots of noise(right).

Image

@kylechampley
Copy link
Collaborator

You have two options and they can be done together or separate.

  1. You can increase the regularization strength for RDLS like this:
filters = filterSequence(1e1)

Try increasing this number by factors of ten (1e2, 1e3, ...) until you like the result.
2) Use the "preconditionerFWHM=2.0" argument to RDLS.

@stefenmax
Copy link
Author

Thanks for you reply. I tried the method you mentioned. Use the "preconditionerFWHM=2.0" argument could improve a little bit to the final result. But the final result is still not good. I also tried increase the FWHM and regularization strength, but it makes not much difference.

Image

@kylechampley
Copy link
Collaborator

How big of a value did you apply to the regularization strength?

@stefenmax
Copy link
Author

Thanks for your reminder. At first I only tried 1e1 to 1e2. Now I tried 1e3 with iteration number 200, it indeed remove the noise but the reconstruct result is still not comparable with ASD-POCS, RDLS result is similar to FBP as the following picture shown.
Image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants
0