Skip to content
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

Artifact in CBCT Sart reconstruction #613

Open
springXIACJ opened this issue Dec 2, 2024 · 5 comments
Open

Artifact in CBCT Sart reconstruction #613

springXIACJ opened this issue Dec 2, 2024 · 5 comments

Comments

@springXIACJ
Copy link

Hello, when I use more than 180 projections (e.g., 250 projections) to reconstruct CBCT, severe streak artifacts appear.
250_projection
When I used fewer projection views such as 100, I did not find this bar artifact.

100_projection

Geometry

geo.DSD = 1502.19 # Distance Source Detector (mm)
geo.DSO = 1161.91 # Distance Source Origin (mm)
geo.nDetector = np.array([1536, 1536]) # number of pixels (px)
geo.dDetector = np.array([ 0.278, 0.278]) # size of each pixel (mm)
geo.sDetector = geo.nDetector * geo.dDetector # total size of the detector (mm)
geo.nVoxel = np.array([512,512,512]) # number of voxels (vx)
geo.dVoxel = np.array([0.6, 0.6, 0.6]) # size of each voxel
geo.sVoxel =geo.nVoxel * geo.dVoxel # total size of the image (mm)
geo.offOrigin = np.array([0, 0, 0]) # Offset of image from origin (mm)
geo.offDetector = np.array([0, 0]) # Offset of Detector (mm)
geo.accuracy = 0.5 # Variable to define accuracy o
geo.COR = 0
#geo.rotDetector = np.array([0, 0, 0]) # Rotation of the detector, by
geo.mode = "cone" # Or 'parallel'. Geometry type.
lmbda = 1
lambdared = 0.999
initmode = None
verbose = True
qualmeas = ["RMSE", "SSD"]

@AnderBiguri
Copy link
Member

Hum interesting. If you try OS-SART, or CGLS, do you also get it?

I suspect this is another nitche case of the function computeV. Try these two algorithms, and lets see what happens. That will help pinpoint the issue and I can provide an alternative.

@springXIACJ
Copy link
Author

Hum interesting. If you try OS-SART, or CGLS, do you also get it?

I suspect this is another nitche case of the function computeV. Try these two algorithms, and lets see what happens. That will help pinpoint the issue and I can provide an alternative.
Both OS-SART and CGLS can be reconstructed normally, and the reconstruction results are as follows.

ossart cgls

@AnderBiguri
Copy link
Member

@springXIACJ seems to work!

If you want to use SART, try chaninging this line

V[i] = Atb(proj_one, geox, self.angleblocks[i], "FDK", gpuids=self.gpuids).mean(

to

V[i] = Atb(proj_one, geo, self.angleblocks[i], "FDK", gpuids=self.gpuids).mean(

@springXIACJ
Copy link
Author

@springXIACJ seems to work!

If you want to use SART, try chaninging this line

V[i] = Atb(proj_one, geox, self.angleblocks[i], "FDK", gpuids=self.gpuids).mean(

to

V[i] = Atb(proj_one, geo, self.angleblocks[i], "FDK", gpuids=self.gpuids).mean(

I have changed this line, but the code didn't work.
error

@AnderBiguri
Copy link
Member

My bad, I gave you a bad suggestion. Try instead to comment this lines:

# shrink the volume size to avoid zeros in backprojection
geox.sVoxel = (
geox.sVoxel * np.max(geox.sVoxel[1:] / np.linalg.norm(geox.sVoxel[1:])) * 0.9
)
geox.dVoxel = geox.sVoxel / geox.nVoxel

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