Hi, we're having a slight issue with something in RTK 2.0.1 and are wondering 
about modifying the epsilon value in 
rtk::ThreeDCircularProjectionGeometry::VerifyAngles(). This is a bit cumbersome 
to describe so I'll go slow and kinda walk through it.

We have some software that iterates source/detector positions for DRR 
generation via the CUDA forward projector.
For certain combinations of source/detector positions/orientations, 
rtk::ThreeDCircularProjectionGeometry::AddProjection() fails because 
rtk::ThreeDCircularProjectionGeometry::VerifyAngles() fails and then 
subsequently rtk::ThreeDCircularProjectionGeometry::FixAngles() also fails. 
Ultimately, this all ends with a failure to generate our DRR. At first I 
thought maybe our detector vectors weren't orthonormal or something, but even 
after orthonormalizing them we get the same result.

Here's some sample inputs to AddProjection():

sourcePosition {-1.6395187023763129, 1756.3965917941700, -144.39815739041538}
detectorPosition {1.1837740829485037, -826.07679772360780, -144.71459973015834}
detectorRowVector {-0.99995122885867527, -0.0010919951074973716, 
-0.0098179685430691624}
detectorColumnVector {0.0098178296767637476, 0.00013326204342850774, 
-0.99995181030787128}

Detector normal vector is computed from row and column vectors, and those three 
vectors become the basis vectors of a 3x3 matrix. So far so good.

n = {0.0010932508471397015, -0.99999943265974056, -0.00012253452211328594}

Matrix is decomposed into angles, which all seem sane enough:

inPlaneAngleRAD = 1.4493613948895230 (83.042290916569541537 deg)
outOfPlaneAngleRAD = -1.5697311129073750 (-89.938967740189397659 deg)
gantryAngleRAD = -1.6824131994857836 (-96.395175727875965777 deg)

Then, inside VerifyAngles() we end up with the following matrices:

m = { {-0.99995124358590692, -0.0010573692766628138, -0.0098179642090855113},
      {0.0098178331830457710, 0.00012903646682954463, -0.99995179558875735},
      {0.0010585851822123655, -0.99999943265974056, -0.00011864910030298149} }

rm = { {-0.99995122885867527, -0.0010919951074973716, -0.0098179685430691624},
       {0.0098178296767637476, 0.00013326204342850774, -0.99995181030787128},
       {0.0010932508471397015, -0.99999943265974056, -0.00012253452211328594} }

But then we fail when comparing the reference matrix with the reconstructed 
matrix:

  for (int i = 0; i < 3; i++) // check whether matrices match
    for (int j = 0; j < 3; j++)
      if (fabs(rm[i][j] - m[i][j]) > EPSILON)
        return false;

because some of the matrix elements are just a bit unequal by more than 
EPSILON, which in this case is defined as 1e-5.
For instance, m[0][1] and rm[0][1] differ by 0.0000346258 in magnitude.
Bumping that epsilon up to 1e-4 gets us through the test, and the output seems 
good.

So finally, the question:
What are the ramifications of us bumping up the epsilon here? It seems like 
VerifyAngles() is there because the ThreeDCircularProjectionGeometry wants to 
store the angles for later use, and this is just a sanity check to make sure 
the extracted angles capture the original vector parameters satisfactorily. If 
that's true I would expect that a tiny errorin the angles (at around 0.001 to 
0.0001) would have a fairly miniscule impact on the actual DRR projection. Is 
this a valid assumption, or are there potentially more perilous consequences of 
us upping the epsilon in VerifyAngles() a bit, either to 1e-4 or maybe even 
1e-3?

Thanks in advance for any help/insights here.

Cheers,
Brandon




Brandon LaCava
Principal Software Engineer
Mevion Medical Systems
(He/him/his)
Tel: 978-540-1680
blac...@mevion.com
www.mevion.com
300 Foster Street, Littleton MA 01460


This electronic mail (including any attachments) may contain information that 
is privileged, confidential, and/or otherwise protected from disclosure to 
anyone other than its intended recipient(s). Any dissemination or use of this 
electronic email or its contents (including any attachments) by persons other 
than the intended recipient(s) is strictly prohibited. If you have received 
this message in error, please notify us immediately by reply email so that we 
may correct our internal records. Please then delete the original message 
(including any attachments) in its entirety. Thank you.
_______________________________________________
Rtk-users mailing list
Rtk-users@public.kitware.com
https://public.kitware.com/cgi-bin/mailman/listinfo/rtk-users

Reply via email to