<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi Joel,<br>
    <br>
    My guess is that this is caused by the fact that some RTK Cuda
    filters do not handle old GPUs well. <br>
    <br>
    In particular, not all filters implement kernels for a 2D grid of
    thread block, and therefore require a GPU with compute capability at
    least 2.x<br>
<a class="moz-txt-link-freetext" href="http://en.wikipedia.org/wiki/CUDA#Version_features_and_specifications">http://en.wikipedia.org/wiki/CUDA#Version_features_and_specifications</a><br>
    <br>
    It will take me some time to check this hypothesis, because we
    mostly have recent GPUs here. And it would help if you could let us
    know which GPU you have and which version of CUDA is installed on
    your machine. <br>
    <br>
    As a workaround, you can just use the CPU version of the filters
    that do not work in CUDA on your hardware. To do that, you would
    need to look for where the culprit filters are created, like in the
    following block of code : <br>
    <br>
    #ifdef RTK_USE_CUDA<br>
      m_ConjugateGradientFilter =
    rtk::CudaConjugateGradientImageFilter_4f::New();<br>
    #else<br>
      m_ConjugateGradientFilter = ConjugateGradientFilterType::New();<br>
    #endif<br>
    <br>
    and make sure it is the CPU version that is created, not the GPU one
    (by commenting out everything but the fourth line, for example). It
    shouldn't take more than a few changes to make rtkfourdrooster work
    smoothly.<br>
    <br>
    Best regards,<br>
    Cyril<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 03/25/2015 07:18 AM, Joel Beaudry
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAMyfbWqdzbtqjbv2V87zgwwQRiyVc8WbrEfT929G79Tw26pNuw@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div>Hi Cyril and Simon,<br>
              <br>
              <div>
                <div>
                  <div>
                    <div>
                      <div>
                        <div>
                          <div>
                            <div>
                              <div>
                                <div>
                                  <div>After updating the ring artifact
                                    is no longer present, so it seems
                                    corrected on my end! Thanks for
                                    taking a look at it.<br>
                                    <br>
                                  </div>
                                  <div>Also, the information on image
                                    initialization and the link you
                                    provided were great. It definitely
                                    makes more sense now. Since I'm
                                    looking at lung tumor motion, I want
                                    to reduce motion blur but also
                                    obtain high (or decent) image
                                    quality. So if the regularization is
                                    able to correct the wrong tumor
                                    position from the dropped
                                    projections that'd be the most
                                    ideal. I will try both approaches
                                    and see the results. <br>
                                    <br>
                                  </div>
                                  <div>I am definitely interested in
                                    trying out 4drooster (it seems
                                    suited for what I want to do) but I
                                    get an error when trying it:<br>
                                    <br>
                                    itk::ExceptionObject (0x3d004f0)<br>
                                    Location: "void
                                    CUDA_subtract_4f(int*, float*,
                                    float*, float*, float*)"<br>
                                    File:
                                    .....RTK/code/rtkCudaConjugateGradientImageFilter_4f.cu<br>
                                    Line: 122<br>
                                    Description: itk::ERROR: CUDA ERROR:
                                    invalid configuration argument<br>
                                    <br>
                                  </div>
                                  <div>I thought it might be an issue
                                    with CUDA or my GPU, so I tried some
                                    other scripts (rtkfdk,
                                    rtkfdkcudatest, <br>
                                    rtkconjugategradientreconstructioncudatest,
                                    rtkfourdroostercudatest) which also
                                    got errors:<br>
                                    <br>
                                    Error message:<br>
                                    itk::ExceptionObject (0x1d00150)<br>
                                    Location: "void
                                    CUDA_displaced_weight(int*, int*,
                                    int*, ..., float)"<br>
                                    File:
                                    .....RTK/code/rtkCudaDisplacedDetectorImageFilter.cu<br>
                                    Line: 189<br>
                                    Description: itk::ERROR: CUDA ERROR:
                                    invalid configuration argument<br>
                                    <br>
                                    Error message:<br>
                                    itk::ExceptionObject (0x3085410)<br>
                                    Location: "void
                                    CUDA_weight_projection(int*, int*,
                                    int*, ..., float*)"<br>
                                    File:
                                    .....RTK/code/rtkCudaFDKWeightProjectionFilter.cu<br>
                                    Line: 138<br>
                                    Description: itk::ERROR: CUDA ERROR:
                                    invalid configuration argument<br>
                                    <br>
                                  </div>
                                </div>
                              </div>
                              <div>Oddly, rtksart,
                                rtkadmmtotalvariation, rtkadmmwavelets
                                all still work with CUDA. Using an older
                                version of RTK I can correctly run
                                rtkfdk with CUDA.<br>
                              </div>
                              <div><br>
                              </div>
                              <div>Any idea what could be the cause of
                                this (or if this error is reproducible)?
                                Let me know if you need more
                                information.<br>
                                <br>
                              </div>
                              <div>Cheers,<br>
                              </div>
                              <div>Joel<br>
                              </div>
                            </div>
                          </div>
                          <br>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
              <br>
              <br>
            </div>
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px
              0.8ex;border-left:1px solid
              rgb(204,204,204);padding-left:1ex">
              <div> I've added the displaced detector filters where
                necessary, and on my data, the ring artifact has now
                disappeared. Just pushed the fix.<br>
                Would you be so kind to try the new version on your data
                and let us know whether it fixed the problem ? <br>
              </div>
            </blockquote>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px
              0.8ex;border-left:1px solid
              rgb(204,204,204);padding-left:1ex">
              <div text="#000000" bgcolor="#FFFFFF"> Regarding your
                question on using the full-data FDK as initialization of
                an iterative reconstruction: if you have basic notions
                of linear algebra, I encourage you to read section V.6
                of<br>
                <a moz-do-not-send="true"
                  href="https://tel.archives-ouvertes.fr/tel-00985728/document"
                  target="_blank">https://tel.archives-ouvertes.fr/tel-00985728/document</a><br>
                And if you are doing 4D CBCT, I very strongly encourage
                you to try rtkfourdrooster<br>
                <br>
                In short, it says that, in the absence of
                regularization: <br>
                - the information embedded in a given projection ends up
                in the Fourier transform of the reconstructed volume<br>
                - the Fourier coefficients affected are almost specific
                to each projection<br>
                - therefore not taking a projection into account in the
                iterative process means not modifying the corresponding
                Fourier coefficients of the reconstructed volume during
                the iterative reconstruction<br>
                - if you initialize with a zero-filled volume, that
                means the Fourier information corresponding to the
                projections you drop is assumed to be zero, and will
                remain so<br>
                - if you initialize with anything else, the Fourier
                information corresponding to the projections you drop
                will remain whatever it was in the input you gave<br>
                <br>
                Regularization can make the correct Fourier coeffs
                "spread out" to the others, therefore the "dropped
                information" can be partially compensated by (very
                strong) regularization. In my experience, for cardiac 4D
                CBCT and pulmonary 4D CBCT, 3D wavelets regularization
                isn't enough to compensate for the loss of 80% or 90% of
                the data. Adding the regularization along time help a
                great deal (which is why I mentioned rtkfourdrooster).<br>
                So the question is: do you want data from the
                projections you dropped to end up in your reconstructed
                volume ?<br>
                <br>
                Sorry for the long answer, despite the "in short"
                preamble. <br>
                <br>
              </div>
            </blockquote>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px
              0.8ex;border-left:1px solid
              rgb(204,204,204);padding-left:1ex">
              <div text="#000000" bgcolor="#FFFFFF"> Regards,<br>
                Cyril
                <div>
                  <div><br>
                    <br>
                    <div>On 03/18/2015 09:03 AM, Simon Rit wrote:<br>
                    </div>
                    <blockquote type="cite">
                      <div dir="ltr">
                        <div>
                          <div>Hi,<br>
                          </div>
                          It looks very much like a displaced detector
                          artefact (the <a moz-do-not-send="true"
                            href="http://www.sciencedirect.com/science/article/pii/0895611196000316"
                            target="_blank">Cho</a> situation). If I
                          refer to the doc of ADMM <a
                            moz-do-not-send="true"
href="http://www.openrtk.org/Doxygen/classrtk_1_1ADMMWaveletsConeBeamReconstructionFilter.html"
                            target="_blank">wavelets</a> and <a
                            moz-do-not-send="true"
href="http://www.openrtk.org/Doxygen/classrtk_1_1ADMMTotalVariationConeBeamReconstructionFilter.html"
                            target="_blank">TV</a>, you have these nice
                          graphs that document the pipelines used for
                          the computation and indeed, the displaced
                          detector situation is accounted for in TV but
                          not in wavelets. Maybe you can try to dig in
                          the code and correct that in ADMM wavelets?
                          Otherwise, I'll ask Cyril if he agrees to do
                          it next week.<br>
                        </div>
                        Simon<br>
                      </div>
                      <div class="gmail_extra"><br>
                        <div class="gmail_quote">On Mon, Mar 16, 2015 at
                          11:00 PM, Joel Beaudry <span dir="ltr"><<a
                              moz-do-not-send="true"
                              href="mailto:joelbeaudry@gmail.com"
                              target="_blank">joelbeaudry@gmail.com</a>></span>
                          wrote:<br>
                          <blockquote class="gmail_quote"
                            style="margin:0px 0px 0px
                            0.8ex;border-left:1px solid
                            rgb(204,204,204);padding-left:1ex">
                            <div dir="ltr">
                              <div>
                                <div>
                                  <div>
                                    <div>Sure thing, thanks for the
                                      reply Simon. I've attached a
                                      Coronal and Axial slice showing
                                      the ring. I'll wait for Cyril's
                                      reply. <br>
                                      <br>
                                    </div>
                                    The image quality is pretty poor but
                                    I'm using ~70 projections (4DCBCT),
                                    so that's expected. Admittedly, I'm
                                    not using a high<br>
                                  </div>
                                  number of iterations (n=10) but I
                                  suspect this ring artifact is from
                                  something else. This does not occur
                                  when using rtkadmmtotalvariation, but
                                  only the admmwavelets.<br>
                                </div>
                                <br>
                              </div>
                              <div>And just a general question regarding
                                the nature of iterative reconstructions.
                                I'm currently using no input image, so I
                                assume the initial guess is just some
                                uniform value but is it beneficial to
                                first do a full (so use all projections)
                                FDK reconstruction and use that as the
                                input instead? <br>
                                <br>
                              </div>
                              <div>Thanks, <br>
                              </div>
                              <div>Joel<br>
                              </div>
                            </div>
                            <div>
                              <div>
                                <div class="gmail_extra"><br>
                                  <div class="gmail_quote">On Mon, Mar
                                    16, 2015 at 1:27 AM, Simon Rit <span
                                      dir="ltr"><<a
                                        moz-do-not-send="true"
                                        href="mailto:simon.rit@creatis.insa-lyon.fr"
                                        target="_blank">simon.rit@creatis.insa-lyon.fr</a>></span>
                                    wrote:<br>
                                    <blockquote class="gmail_quote"
                                      style="margin:0px 0px 0px
                                      0.8ex;border-left:1px solid
                                      rgb(204,204,204);padding-left:1ex">Hi,<br>
                                      Could you provide a snapshot?<br>
                                      Cyril, the developer of this
                                      method, is away for a few days but
                                      he'll<br>
                                      be able to answer next weeks.<br>
                                      Cheers,<br>
                                      Simon<br>
                                      <div>
                                        <div><br>
                                          On Fri, Mar 13, 2015 at 7:49
                                          PM, Joel Beaudry <<a
                                            moz-do-not-send="true"
                                            href="mailto:joelbeaudry@gmail.com"
                                            target="_blank">joelbeaudry@gmail.com</a>>

                                          wrote:<br>
                                          > Hi RTK users/developers,<br>
                                          ><br>
                                          > I've been using RTK for
                                          CBCT reconstructions and found
                                          it to be very useful,<br>
                                          > so thanks for all the
                                          work done on it!<br>
                                          ><br>
                                          > As for my question,when I
                                          use rtkadmmwavelets I get a
                                          ring artifact in the<br>
                                          > center of the image. I'm
                                          using it for 4DCBCT
                                          reconstructions, so I'm not<br>
                                          > using the full number of
                                          projections and not sure if
                                          this is a contributing<br>
                                          > factor. From reading
                                          previous posts I know that the
                                          entire object must be in<br>
                                          > the reconstruction, and
                                          so I have included both the
                                          patient and couch in the<br>
                                          > reconstruction volume but
                                          still get the ring artifact.
                                          Has anyone else<br>
                                          > encountered this? Any
                                          ideas/suggestions?<br>
                                          ><br>
                                          > Cheers,<br>
                                          > Joel<br>
                                          ><br>
                                          > PS. When trying
                                          rtkadmmtotalvariation I don't
                                          encounter such issues.<br>
                                          ><br>
                                        </div>
                                      </div>
                                      >
                                      _______________________________________________<br>
                                      > Rtk-users mailing list<br>
                                      > <a moz-do-not-send="true"
                                        href="mailto:Rtk-users@public.kitware.com"
                                        target="_blank">Rtk-users@public.kitware.com</a><br>
                                      > <a moz-do-not-send="true"
                                        href="http://public.kitware.com/mailman/listinfo/rtk-users"
                                        target="_blank">http://public.kitware.com/mailman/listinfo/rtk-users</a><br>
                                      ><br>
                                    </blockquote>
                                  </div>
                                  <br>
                                </div>
                              </div>
                            </div>
                          </blockquote>
                        </div>
                        <br>
                      </div>
                      <br>
                      <fieldset></fieldset>
                      <br>
                      <pre>_______________________________________________
Rtk-users mailing list
<a moz-do-not-send="true" href="mailto:Rtk-users@public.kitware.com" target="_blank">Rtk-users@public.kitware.com</a>
<a moz-do-not-send="true" href="http://public.kitware.com/mailman/listinfo/rtk-users" target="_blank">http://public.kitware.com/mailman/listinfo/rtk-users</a>
</pre>
                    </blockquote>
                    <br>
                  </div>
                </div>
              </div>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>