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
[email protected]
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
[email protected]
https://public.kitware.com/cgi-bin/mailman/listinfo/rtk-users