Parker Weighting Reconstruction

I have a set of projections from 0° to 210°, take one image at 1°. And I want use CudaParkerShortScanImageFilter to reconstruction it. But there has artifacts because the warning like this:

WARNING: In C:\runner\_work\im\include\rtkParkerShortScanImageFilter.hxx, line 114
CudaParkerShortScanImageFilter (000001F2F6465970): You do not have enough data for proper Parker weighting (short scan) according to projection #0. Delta is 14.5 degrees and should be more than half the beam angle, i.e. 14.9738 degrees.

The lat image’s angle is 209° and the first is 0°, according to the calculation code of delta:

m_Delta = 0.5 * (lastAngle - m_FirstAngle - itk::Math::pi);
m_Delta = m_Delta - 2 * itk::Math::pi * floor(m_Delta / (2 * itk::Math::pi)); // between -2*PI and 2*PI

The delta is 14.5°, but actually the delta should be 15°?
I cropped the image to make this warning no longer appear, and the artifacts were greatly reduced. However the reconstruction result is a bit distorted:
distorted
The original should be square in shape. My code is like this:

    if flag:
        PSSFType = itk.RTK.CudaParkerShortScanImageFilter
    else:
        PSSFType = itk.RTK.ParkerShortScanImageFilter[ImageType]
    pssf = PSSFType.New()
    if flag:
        pssf.SetInput(projections)
    else:
        pssf.SetInput(reader)
    pssf.SetGeometry(geometry)
    pssf.InPlaceOff()
    # pssf.Update()

    if flag:
        FDKCPUType = itk.RTK.CudaFDKConeBeamReconstructionFilter
    else:
        FDKCPUType = itk.RTK.FDKConeBeamReconstructionFilter[ImageType]
    feldkamp = FDKCPUType.New()
    feldkamp.SetInput(0, constantImageSource2.GetOutput())
    feldkamp.SetInput(1, pssf.GetOutput())
    feldkamp.SetGeometry(geometry)
    feldkamp.GetRampFilter().SetTruncationCorrection(0.5)
    feldkamp.GetRampFilter().SetRamLakCutFrequency(0.5)  # 
    # feldkamp.Update()

    StreamerType = itk.StreamingImageFilter[ImageType, ImageType]
    streamerBP = StreamerType.New()
    streamerBP.SetInput(feldkamp.GetOutput())
    streamerBP.SetNumberOfStreamDivisions(2)
    splitter = itk.ImageRegionSplitterDirection.New()
    splitter.SetDirection(2)
    streamerBP.SetRegionSplitter(splitter)

Is there an error in my settings? Any reply will be appreciate!

If I’m following you, if you start at 0 and at 209°, you’ve done a 210° arc? That is debatable.
There is probably a problem with your geometry, yes, if you don’t reconstruct what you expect.

I may be a bit confused about the definition of arc, does it refer to the interval between the first angle and the last angle, or does it refer to the angles collected? As my example, the collection interval is 209°, but I collected data from a total of 210 angles.
When to build geometry during the full week scan, the first angle is 0°, and the final total angle is 359°.

This is a good point but then 359 and 0 are next to each other due to the cyclic nature of the acquisition. The choice we have made is to start the acquisition at the angle of the first projection and to end it at the angle of the last projection but we could have probably done things differently.

Thank you for your reply. In my situation, should I set the first collection point at 0 and the last at 210 in order to meet the situation of 180+beam angle.

Yes. The scan range is usually above this threshold which is not a problem for the filter. It can be above but not below.

2 Likes

Thank you very much for your answer.