<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Hi Robert,<br>
<br>
Please use the mailing list for your questions, as the conversations
might be interesting to other users.<br>
<br>
"So I think we will also have the same problem that we miss some
voxels depending on the projection image resolution."<br>
-> Yes, that problem remains. Some voxels may not be hit at all,
and for them a specific processing has to be applied (median
filtering, for example). I do not think we do this in RTK, I think
we just leave these voxels set to zero. For all the others, which do
get hit at least by one ray, the division helps a lot.<br>
<br>
->The procedure you describe is exact<br>
<br>
Please keep asking if things remain unclear :)<br>
Cyril<br>
<br>
<div class="moz-cite-prefix">On 03/03/2015 03:04 PM, "Robert
Calließ" wrote:<br>
</div>
<blockquote
cite="mid:trinity-1902f02a-b5a2-4c3f-bee7-5414ae7de410-1425391451747@3capp-gmx-bs07"
type="cite">
<div style="font-family: Verdana;font-size: 12.0px;">
<div>
<div>
<div>Hello Cyril,</div>
<div>I'm sorry that I need to ask for your help again, but I
want to understand.</div>
<div> </div>
<div>>> And these weights are indeed between 0 and 1.
But instead of interpolating, you "splat", that means you
update the four nearest voxels by adding (projection's
pixel value * interpolationWeight) to each</div>
<div>Just to understand, if we back project a projection
image of "1" we also "draw a line" and update the voxels
(just like in josephs projector) but now we do not back
project a projection value but a "1".</div>
<div>And then we devide the current volume (result from
joseph back projection) by this volume (result from back
projection of "1").</div>
<div>So I think we will also have the same problem that we
miss some voxels depending on the projection image
resolution.</div>
<div> </div>
<div>I tried to follow the code and the normalized
backprojector uses the JosephProjector but works an</div>
<div>a seperate volume and on an image filled with "1". And
the steps would be...</div>
<div>- forward projection</div>
<div>- back projection</div>
<div>- back projection of image filled with "1" in a
seperate volume</div>
<div>- divide current volume by this seperate volume</div>
<div>is this right ?</div>
<div> </div>
<div>best regards,</div>
<div>Robert</div>
<div> </div>
<div> </div>
<div name="quote" style="margin:10px 5px 5px 10px; padding:
10px 0 10px 10px; border-left:2px solid #C3D9E5;
word-wrap: break-word; -webkit-nbsp-mode: space;
-webkit-line-break: after-white-space;">
<div style="margin:0 0 10px 0;"><b>Gesendet:</b> Freitag,
27. Februar 2015 um 09:44 Uhr<br>
<b>Von:</b> "Cyril Mory"
<a class="moz-txt-link-rfc2396E" href="mailto:cyril.mory@creatis.insa-lyon.fr"><cyril.mory@creatis.insa-lyon.fr></a><br>
<b>An:</b> "Robert Calließ"
<a class="moz-txt-link-rfc2396E" href="mailto:Robert.Calliess@gmx.de"><Robert.Calliess@gmx.de></a><br>
<b>Betreff:</b> Re: Aw: Re: [Rtk-users] sart back
projection, weighting steps</div>
<div name="quoted-content">
<div style="background-color: rgb(255,255,255);">Hi
Robert,<br>
<br>
No problem, glad to help.<br>
<br>
I think either I have'nt been clear enough, or you're
getting confused, though :) Let me try again:<br>
<br>
In joseph back projection, for each PIXEL, you "draw a
line" between the source and the pixel's center, and
see which voxels it crosses. Your line crosses each
slice of the volume at an intersection point. You
determine what the interpolation weights would be if
you were to interpolate at this intersection point.
And these weights are indeed between 0 and 1. But
instead of interpolating, you "splat", that means you
update the four nearest voxels by adding (projection's
pixel value * interpolationWeight) to each. And you
move to the next slice. Once you've considered all
rays, you're done. Nothing in this process guarantees
that a voxel will receive any contribution. In fact,
some receive none, and some too many. The
backprojected volume you obtain is "biased". You could
think of it as the product of what you really want
(the projection's pixel values smeared out along the
lines of rays) with a "sampling density map" (the
cumulated splat weights each voxel has been updated
with).<br>
If you back project a projection of ones, then your
resulting volume is exactly this sampling density map,
and you can divide by it to obtain what you really
want.<br>
<br>
In voxel based back projection, for each voxel, you
"draw a line" between the source and the voxel's
center, see where it hits the 2D projection, and add
the value of that pixel (or interpolated at this
position between pixels) into the voxel. And that's it
for this voxel, so each voxel gets updated once and
only once. And if the projection contains only ones,
then your volume gets filled with ones. Dividing by
one isn't going to change anything, so you just don't
do it.<br>
<br>
I hope it is clearer.<br>
Cyril<br>
<br>
<div class="moz-cite-prefix">On 02/26/2015 02:10 PM,
"Robert Calließ" wrote:</div>
<blockquote>
<div style="font-family: Verdana;font-size: 12.0px;">
<div>
<div>Hello Cyril,</div>
<div>thank you for the fast reply and thank you
for the support.</div>
<div>
<div>Indeed I have some more questions. For
the normalization step</div>
<div>you on the one hand side create a
projection image filled with "1"</div>
<div>and on the other hand side you create an
empty (zero) volume and</div>
<div>then back project the image, ok.</div>
<div> </div>
<div>>>How many contributions a voxel
receives is determined by the sampling of
the projections</div>
<div>Yes, I have the same problems with a
voxel-based back projector. But don't you
have</div>
<div>this problem also with joseph's method
when you use it for the back projection of
the "1" projection</div>
<div>image ? It's not clear to me how this
kind of back projection actually works (or
is calculated).</div>
<div>And if the projection image consists of
pixels with value "1" then we actually don't
need it or do we ?</div>
<div>So far I understand, no matter if we
perform the forward or back projtion, the
joseph projector calculates</div>
<div>the weightings of the four voxels that
are "around" the current plane intersection
point. And this</div>
<div>weights are always between 0 and 1.</div>
<div>Or do I totally misunderstand the concept
of this backprojection.</div>
<div>I hope I did not confused you.</div>
<div> </div>
<div>best regards,</div>
<div>Robert</div>
<div> </div>
<div> </div>
<div style="margin: 10.0px 5.0px 5.0px
10.0px;padding: 10.0px 0 10.0px
10.0px;border-left: 2.0px solid
rgb(195,217,229);">
<div style="margin: 0 0 10.0px 0;"><b>Gesendet:</b> Dienstag,
24. Februar 2015 um 10:55 Uhr<br>
<b>Von:</b> "Cyril Mory" <a
moz-do-not-send="true"
class="moz-txt-link-rfc2396E"
href="cyril.mory@creatis.insa-lyon.fr"
target="_parent"><cyril.mory@creatis.insa-lyon.fr></a><br>
<b>An:</b> "Robert Calließ" <a
moz-do-not-send="true"
class="moz-txt-link-rfc2396E"
href="Robert.Calliess@gmx.de"
target="_parent"><Robert.Calliess@gmx.de></a>,
<a moz-do-not-send="true"
class="moz-txt-link-abbreviated"
href="rtk-users@openrtk.org"
target="_parent">rtk-users@openrtk.org</a><br>
<b>Betreff:</b> Re: [Rtk-users] sart back
projection, weighting steps</div>
<div>
<div style="background-color:
rgb(255,255,255);">Hi Robert,<br>
<br>
I'm glad to know that most of the
explanation text is understandable :)<br>
You might want to check this filter:<br>
<a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://www.openrtk.org/Doxygen/classrtk_1_1NormalizedJosephBackProjectionImageFilter.html"
target="_blank">http://www.openrtk.org/Doxygen/classrtk_1_1NormalizedJosephBackProjectionImageFilter.html</a><br>
You can use the command line application
"rtkbackprojections" with argument --bp
to compare "Joseph" and
"NormalizedJoseph".<br>
<br>
When performing a back projection with
non-normalized Joseph, the projection
values are "splat" (splat is the adjoint
operator of interpolation) between the
four nearest voxels in each volume plane
the ray intersects. Nothing guarantees
that every voxel will receive a
contribution during this process. How
many contributions a voxel receives is
determined by the sampling of the
projections, which can be much looser or
much denser (locally and globally) than
what would be required. Dividing by the
back projection of an image of ones
mitigates this effect. In theory, as
long as the forward and back projection
operators are the adjoint of one
another, it should not be a problem for
SART. In practice, it does make a
difference.<br>
<br>
I hope it helps. Please let me know if
it is still unclear;<br>
<br>
Cyril<br>
<div class="moz-cite-prefix">On
02/24/2015 09:56 AM, "Robert Calließ"
wrote:</div>
<blockquote>
<div style="font-family:
Verdana;font-size: 12.0px;">
<div>Hello,</div>
<div>in the file
rtkSARTConeBeamReconstructionFilter.h
there is briefly written how the</div>
<div>forward and back projection is
performed. For the forward
projection, every pixel is</div>
<div>divided by the intersection
length of the ray with the volume.
That is clear to me.</div>
<div> </div>
<div>For the back projection applies
the following text:</div>
<div>"each voxel of the back
projection must be divided by the
value it would take if<br>
a projection filled with ones was
being reprojected. This weighting
step is not<br>
performed when using a
voxel-based back projection, as
the weights are all equal to one<br>
in this case. When using a
ray-based backprojector, typically
Joseph,it must be performed."</div>
<div> </div>
<div>That means a temporary
projection image is created where
all pixels have the value "1". So
far I understand,</div>
<div>if we use a voxel based back
projector we do not need to apply
this weighting step because the
ray from source to voxel center</div>
<div>somewhere hits the detector
plane and usually there we
interpolate the pixel value. But
all of them are "1" so it's
obsolete to</div>
<div>interpolate inbetween.</div>
<div> </div>
<div>But if we use for instance the
joseph back projector don't we
calculate the four weightings at
the current volume planes the</div>
<div>ray intersects with ? So we
already have weightings that range
from 0 to 1. I'm a little bit
confused about the projection
image</div>
<div>filled with "1". So how a this
back projection of "1" actually
happens ?</div>
<div> </div>
<div>I hope someone can help me with
that. Thank you.</div>
<div> </div>
<div>best regards,</div>
<div>Robert</div>
<div> </div>
</div>
<fieldset class="mimeAttachmentHeader"> </fieldset>
<pre>_______________________________________________
Rtk-users mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated">Rtk-users@public.kitware.com</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://public.kitware.com/mailman/listinfo/rtk-users" target="_blank">http://public.kitware.com/mailman/listinfo/rtk-users</a>
</pre>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>