<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>