[ITK-users] ResampleDICOM example and DCMTK

classic Classic list List threaded Threaded
13 messages Options
Reply | Threaded
Open this post in threaded view
|

[ITK-users] ResampleDICOM example and DCMTK

NPatterson

Hi,
 
I have been trying to test the ResampledDICOM ITK example using DCMTK instead of GDCM. I have attached the code below. The code compiles and runs, but does not output the resultant files - which is strange, as all of the expected parameters are good (i.e. number of files, origin of image, image dimensions etc).

Can anyone possibly comment on any possible reason why the code execute without error, but does not result in any output files?

Regards, Nick



#include "itkVersion.h"
#include "itkImage.h"
#include "itkMinimumMaximumImageFilter.h"
#include "itkDCMTKImageIO.h"
#include "itkDCMTKSeriesFileNames.h"
#include "itkNumericSeriesFileNames.h"
#include "itkImageSeriesReader.h"
#include "itkImageSeriesWriter.h"
#include "itkResampleImageFilter.h"
#include "itkShiftScaleImageFilter.h"
#include "itkIdentityTransform.h"
#include "itkLinearInterpolateImageFunction.h"
#include <itksys/SystemTools.hxx>
#include "dcmdata/dcuid.h"
#include <string>

static void CopyDictionary (itk::MetaDataDictionary &fromDict, itk::MetaDataDictionary &toDict);

int main( int argc, char* argv[] )
{
  // Validate input parameters
  if( argc < 4 )
    {
    std::cerr << "Usage: "
              << argv[0]
              << " InputDicomDirectory OutputDicomDirectory spacing_x spacing_y spacing_z"
              << std::endl;
    return EXIT_FAILURE;
    }

  const unsigned int InputDimension = 3;
  const unsigned int OutputDimension = 2;

  typedef signed short PixelType;

  typedef itk::Image< PixelType, InputDimension > InputImageType;
  typedef itk::Image< PixelType, OutputDimension > OutputImageType;
  typedef itk::ImageSeriesReader< InputImageType >ReaderType;
  typedef itk::DCMTKImageIO ImageIOType;
  typedef itk::DCMTKSeriesFileNames InputNamesGeneratorType;
  typedef itk::NumericSeriesFileNames OutputNamesGeneratorType;
  typedef itk::IdentityTransform< double, InputDimension > TransformType;
  typedef itk::LinearInterpolateImageFunction< InputImageType, double > InterpolatorType;
  typedef itk::ResampleImageFilter< InputImageType, InputImageType > ResampleFilterType;
  typedef itk::ShiftScaleImageFilter< InputImageType, InputImageType > ShiftScaleType;
  typedef itk::ImageSeriesWriter< InputImageType, OutputImageType > SeriesWriterType;

////////////////////////////////////////////////
// 1) Read the input series

  ImageIOType::Pointer gdcmIO = ImageIOType::New();
  InputNamesGeneratorType::Pointer inputNames = InputNamesGeneratorType::New();
  inputNames->SetInputDirectory( argv[1] );

  const ReaderType::FileNamesContainer & filenames = inputNames->GetInputFileNames();

  ReaderType::Pointer reader = ReaderType::New();

  reader->SetImageIO( gdcmIO );
  reader->SetFileNames( filenames );
  try
    {
    reader->Update();
    }
  catch (itk::ExceptionObject &excp)
    {
    std::cerr << "Exception thrown while reading the series" << std::endl;
    std::cerr << excp << std::endl;
    return EXIT_FAILURE;
    }

////////////////////////////////////////////////
// 2) Resample the series
  InterpolatorType::Pointer interpolator = InterpolatorType::New();

  TransformType::Pointer transform = TransformType::New();
  transform->SetIdentity();

  const InputImageType::SpacingType& inputSpacing = reader->GetOutput()->GetSpacing();
  const InputImageType::RegionType& inputRegion = reader->GetOutput()->GetLargestPossibleRegion();
  const InputImageType::SizeType& inputSize =  inputRegion.GetSize();

  std::cout << "The input series in directory " << argv[1]
            << " has " << filenames.size() << " files with spacing "
            << inputSpacing
            << std::endl;

  // Compute the size of the output. The user specifies a spacing on
  // the command line. If the spacing is 0, the input spacing will be
  // used. The size (# of pixels) in the output is recomputed using
  // the ratio of the input and output sizes.
  InputImageType::SpacingType outputSpacing;
  outputSpacing[0] = atof(argv[3]);
  outputSpacing[1] = atof(argv[4]);
  outputSpacing[2] = atof(argv[5]);

  bool changeInSpacing = false;
  for (unsigned int i = 0; i < 3; i++)
    {
    if (outputSpacing[i] == 0.0)
      {
      outputSpacing[i] = inputSpacing[i];
      }
    else
      {
      changeInSpacing = true;
      }
    }
  InputImageType::SizeType   outputSize;
  typedef InputImageType::SizeType::SizeValueType SizeValueType;
  outputSize[0] = static_cast<SizeValueType>(inputSize[0] * inputSpacing[0] / outputSpacing[0] + .5);
  outputSize[1] = static_cast<SizeValueType>(inputSize[1] * inputSpacing[1] / outputSpacing[1] + .5);
  outputSize[2] = static_cast<SizeValueType>(inputSize[2] * inputSpacing[2] / outputSpacing[2] + .5);

  ResampleFilterType::Pointer resampler = ResampleFilterType::New();
    resampler->SetInput( reader->GetOutput() );
    resampler->SetTransform( transform );
    resampler->SetInterpolator( interpolator );
    resampler->SetOutputOrigin ( reader->GetOutput()->GetOrigin());
    resampler->SetOutputSpacing ( outputSpacing );
    resampler->SetOutputDirection ( reader->GetOutput()->GetDirection());
    resampler->SetSize ( outputSize );
    resampler->Update ();


////////////////////////////////////////////////
// 3) Create a MetaDataDictionary for each slice.

  // Copy the dictionary from the first image and override slice
  // specific fields
  ReaderType::DictionaryRawPointer inputDict = (*(reader->GetMetaDataDictionaryArray()))[0];
  ReaderType::DictionaryArrayType outputArray;

  // To keep the new series in the same study as the original we need
  // to keep the same study UID. But we need new series and frame of
  // reference UID's.

  char seriesUID[100];
  dcmGenerateUniqueIdentifier(seriesUID);

  char frameOfReferenceUID[100];
  dcmGenerateUniqueIdentifier(frameOfReferenceUID);

  std::string studyUID;
  std::string sopClassUID;
  itk::ExposeMetaData<std::string>(*inputDict, "0020|000d", studyUID);
  itk::ExposeMetaData<std::string>(*inputDict, "0008|0016", sopClassUID);
 // gdcmIO->KeepOriginalUIDOn();

  for (unsigned int f = 0; f < outputSize[2]; f++)
    {
    // Create a new dictionary for this slice
    ReaderType::DictionaryRawPointer dict = new ReaderType::DictionaryType;

    // Copy the dictionary from the first slice
    CopyDictionary (*inputDict, *dict);

    // Set the UID's for the study, series, SOP  and frame of reference
    itk::EncapsulateMetaData<std::string>(*dict,"0020|000d", studyUID);
    itk::EncapsulateMetaData<std::string>(*dict,"0020|000e", seriesUID);
    itk::EncapsulateMetaData<std::string>(*dict,"0020|0052", frameOfReferenceUID);

    char sopInstanceUID[100];
    dcmGenerateUniqueIdentifier(sopInstanceUID);

    itk::EncapsulateMetaData<std::string>(*dict,"0008|0018", sopInstanceUID);
    itk::EncapsulateMetaData<std::string>(*dict,"0002|0003", sopInstanceUID);

    // Change fields that are slice specific
    itksys_ios::ostringstream value;
    value.str("");
    value << f + 1;

    // Image Number
    itk::EncapsulateMetaData<std::string>(*dict,"0020|0013", value.str());

    // Series Description - Append new description to current series
    // description
    std::string oldSeriesDesc;
    itk::ExposeMetaData<std::string>(*inputDict, "0008|103e", oldSeriesDesc);

    value.str("");
    value << oldSeriesDesc << ": Resampled with pixel spacing " << outputSpacing[0] << ", "<< outputSpacing[1] << ", "<< outputSpacing[2];
    // This is an long string and there is a 64 character limit in the
    // standard
    unsigned lengthDesc = value.str().length();

    std::string seriesDesc( value.str(), 0,lengthDesc > 64 ? 64 : lengthDesc);
    itk::EncapsulateMetaData<std::string>(*dict,"0008|103e", seriesDesc);

    // Series Number
    value.str("");
    value << 1001;
    itk::EncapsulateMetaData<std::string>(*dict,"0020|0011", value.str());

    // Derivation Description - How this image was derived
    value.str("");
    for (int i = 0; i < argc; i++)
      {
      value << argv[i] << " ";
      }
    value << ": " << ITK_SOURCE_VERSION;

    lengthDesc = value.str().length();
    std::string derivationDesc( value.str(), 0, lengthDesc > 1024 ? 1024 : lengthDesc);
    itk::EncapsulateMetaData<std::string>(*dict,"0008|2111", derivationDesc);

    // Image Position Patient: This is calculated by computing the
    // physical coordinate of the first pixel in each slice.
    InputImageType::PointType position;
    InputImageType::IndexType index;
    index[0] = 0;
    index[1] = 0;
    index[2] = f;
    resampler->GetOutput()->TransformIndexToPhysicalPoint(index, position);

    value.str("");
    value << position[0] << "\\" << position[1] << "\\" << position[2];
    itk::EncapsulateMetaData<std::string>(*dict,"0020|0032", value.str());
    // Slice Location: For now, we store the z component of the Image
    // Position Patient.
    value.str("");
    value << position[2];
    itk::EncapsulateMetaData<std::string>(*dict,"0020|1041", value.str());

    if (changeInSpacing)
      {
      // Slice Thickness: For now, we store the z spacing
      value.str("");
      value << outputSpacing[2];
      itk::EncapsulateMetaData<std::string>(*dict,"0018|0050",value.str());
      // Spacing Between Slices
      itk::EncapsulateMetaData<std::string>(*dict,"0018|0088",value.str());
      }

    // Save the dictionary
     outputArray.push_back(dict);
    }

////////////////////////////////////////////////
// 4) Shift data to undo the effect of a rescale intercept by the
//    DICOM reader
  std::string interceptTag("0028|1052");
  typedef itk::MetaDataObject< std::string > MetaDataStringType;
  itk::MetaDataObjectBase::Pointer entry = (*inputDict)[interceptTag];

  MetaDataStringType::ConstPointer interceptValue = dynamic_cast<const MetaDataStringType *>( entry.GetPointer() ) ;

  int interceptShift = 0;

  if( interceptValue )
    {
    std::string tagValue = interceptValue->GetMetaDataObjectValue();
    interceptShift = -atoi ( tagValue.c_str() );
    }

  ShiftScaleType::Pointer shiftScale = ShiftScaleType::New();
  shiftScale->SetInput( resampler->GetOutput());
  shiftScale->SetShift( interceptShift );

////////////////////////////////////////////////
// 5) Write the new DICOM series

  // Make the output directory and generate the file names.
  itksys::SystemTools::MakeDirectory( argv[2] );

  // Generate the file names
  OutputNamesGeneratorType::Pointer outputNames = OutputNamesGeneratorType::New();
  std::string seriesFormat(argv[2]);
  seriesFormat = seriesFormat + "IM%d.dcm";
  outputNames->SetSeriesFormat (seriesFormat.c_str());
  outputNames->SetStartIndex (1);
  outputNames->SetEndIndex (outputSize[2]);
  std::cout << "Output Size: " << outputSize[2] << std::endl;
  std::cout << outputNames->GetFileNames().at(0) << std::endl;

  SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();
  seriesWriter->SetInput( shiftScale->GetOutput() );
  seriesWriter->SetImageIO( gdcmIO );
  seriesWriter->SetFileNames( outputNames->GetFileNames() );
  seriesWriter->SetMetaDataDictionaryArray( &outputArray );

  std::cout << seriesWriter->GetImageIO()->GetOrigin(0) << " " << seriesWriter->GetImageIO()->GetOrigin(1) <<
               " " << seriesWriter->GetImageIO()->GetOrigin(2) << std::endl;

  try
    {
        seriesWriter->Update();
    }
  catch( itk::ExceptionObject & excp )
    {
        std::cerr << "Exception thrown while writing the series " << std::endl;
        std::cerr << excp << std::endl;
        return EXIT_FAILURE;
    }
  std::cout << "The output series in directory " << argv[2] << " has " << outputSize[2] << " files with spacing "<< outputSpacing << std::endl;
  return EXIT_SUCCESS;
}

void CopyDictionary (itk::MetaDataDictionary &fromDict, itk::MetaDataDictionary &toDict)
{
  typedef itk::MetaDataDictionary DictionaryType;
  DictionaryType::ConstIterator itr = fromDict.Begin();
  DictionaryType::ConstIterator end = fromDict.End();
  typedef itk::MetaDataObject< std::string > MetaDataStringType;



  while( itr != end )
    {
    itk::MetaDataObjectBase::Pointer  entry = itr->second;
    MetaDataStringType::Pointer entryvalue = dynamic_cast<MetaDataStringType *>( entry.GetPointer() ) ;
    if( entryvalue )
      {
      std::string tagkey   = itr->first;
      std::string tagvalue = entryvalue->GetMetaDataObjectValue();
      itk::EncapsulateMetaData<std::string>(toDict, tagkey, tagvalue);
      }
    ++itr;
    }
}


_____________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] ResampleDICOM example and DCMTK

NPatterson
Hi, I wondered if anyone could test the code attached in the thread header
"ResampleDICOM example and DCMTK" regarding the use of DCMTK for DICOM
reading writing in ITK. I adapted the ResampleDICOM example to work with
DCMTK instead of GDCM, and although I get no errors, I also do not get any
output dicom images. If someone has the time to test this code to see if
they observe the same behaviour/or can suggest a fix, I would be very
appreciative.

Regards, Nick.



--
View this message in context: http://itk-insight-users.2283740.n2.nabble.com/ITK-users-ResampleDICOM-example-and-DCMTK-tp7586131p7586158.html
Sent from the ITK Insight Users mailing list archive at Nabble.com.
_____________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] ResampleDICOM example and DCMTK

Matt McCormick-3
Hi Nick,

Nothing stands out from inspecting the code.  Could you please send an
example dataset?

Thanks,
Matt

On Sun, Aug 31, 2014 at 4:06 PM, NPatterson <[hidden email]> wrote:

> Hi, I wondered if anyone could test the code attached in the thread header
> "ResampleDICOM example and DCMTK" regarding the use of DCMTK for DICOM
> reading writing in ITK. I adapted the ResampleDICOM example to work with
> DCMTK instead of GDCM, and although I get no errors, I also do not get any
> output dicom images. If someone has the time to test this code to see if
> they observe the same behaviour/or can suggest a fix, I would be very
> appreciative.
>
> Regards, Nick.
>
>
>
> --
> View this message in context: http://itk-insight-users.2283740.n2.nabble.com/ITK-users-ResampleDICOM-example-and-DCMTK-tp7586131p7586158.html
> Sent from the ITK Insight Users mailing list archive at Nabble.com.
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/insight-users
_____________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] ResampleDICOM example and DCMTK

Matt McCormick-3
Hi Nick,

The DCMTKImageIO class does not yet populate and extract tag
information to / from the an Image's MetaDataDictionary.  This will
have to be implemented for this to work.

HTH,
Matt

On Sun, Aug 31, 2014 at 5:38 PM, Matt McCormick
<[hidden email]> wrote:

> Hi Nick,
>
> Nothing stands out from inspecting the code.  Could you please send an
> example dataset?
>
> Thanks,
> Matt
>
> On Sun, Aug 31, 2014 at 4:06 PM, NPatterson <[hidden email]> wrote:
>> Hi, I wondered if anyone could test the code attached in the thread header
>> "ResampleDICOM example and DCMTK" regarding the use of DCMTK for DICOM
>> reading writing in ITK. I adapted the ResampleDICOM example to work with
>> DCMTK instead of GDCM, and although I get no errors, I also do not get any
>> output dicom images. If someone has the time to test this code to see if
>> they observe the same behaviour/or can suggest a fix, I would be very
>> appreciative.
>>
>> Regards, Nick.
>>
>>
>>
>> --
>> View this message in context: http://itk-insight-users.2283740.n2.nabble.com/ITK-users-ResampleDICOM-example-and-DCMTK-tp7586131p7586158.html
>> Sent from the ITK Insight Users mailing list archive at Nabble.com.
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.php
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/insight-users
_____________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] ResampleDICOM example and DCMTK

ITK - Users mailing list
Hi Matt,
I have the same problem. I don't understand your answer. Part 3 of the code
extract and create the meta data. The writer uses DCMTKImageIO as in :  
seriesWriter->SetImageIO(gdcmIO );

Could you please add more explaination!
Best!
Ibraheem




--
Sent from: http://itk-users.7.n7.nabble.com/
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] ResampleDICOM example and DCMTK

Dženan Zukić
Hi Ibraheem,

we are moving away from a mailing list, and into a forum. Could you repost your question there?

Thanks,
Dženan

On Thu, Feb 8, 2018 at 5:36 AM, Ibraheem via Insight-users <[hidden email]> wrote:
Hi Matt,
I have the same problem. I don't understand your answer. Part 3 of the code
extract and create the meta data. The writer uses DCMTKImageIO as in :
seriesWriter->SetImageIO(gdcmIO );

Could you please add more explaination!
Best!
Ibraheem




--
Sent from: http://itk-users.7.n7.nabble.com/
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users


The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] ResampleDICOM example and DCMTK

ITK - Users mailing list
Thanks, this is a great news!
I will do so. 
Best!

On Thursday, February 8, 2018, 3:36:59 PM GMT+1, Dženan Zukić <[hidden email]> wrote:


Hi Ibraheem,

we are moving away from a mailing list, and into a forum. Could you repost your question there?

Thanks,
Dženan

On Thu, Feb 8, 2018 at 5:36 AM, Ibraheem via Insight-users <[hidden email]> wrote:
Hi Matt,
I have the same problem. I don't understand your answer. Part 3 of the code
extract and create the meta data. The writer uses DCMTKImageIO as in :
seriesWriter->SetImageIO( gdcmIO );

Could you please add more explaination!
Best!
Ibraheem




--
Sent from: http://itk-users.7.n7.nabble. com/
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
______________________________ __
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/ opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/ products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_ FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/ listinfo/insight-users


The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

[ITK-users] Forums suck, long live email, was Re: ResampleDICOM example and DCMTK

David Clunie
In reply to this post by Dženan Zukić
That's a bummer ... now I won't be able to have all the mail
to the list archived and indexed in a standard format along
with all the other lists that I subscribe to, so that I can
search everything at once, and instead it will be hidden on
some inaccessible proprietary system with dubious longevity.

Is there a way to have discourse.itk.org forward every message
by email? I couldn't find one.

David

On 2/8/18 9:36 AM, Dženan Zukić wrote:
> Hi Ibraheem,
>
> we are moving away from a mailing list, and into a forum <https://discourse.itk.org/>. Could you repost your question there?
>
> Thanks,
> Dženan
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] Forums suck, long live email, was Re: ResampleDICOM example and DCMTK

Dženan Zukić
Yes, there is. For me, the "mailing list mode" is found on this page:

Regards,
Dženan

On Thu, Feb 8, 2018 at 10:11 AM, David Clunie <[hidden email]> wrote:
That's a bummer ... now I won't be able to have all the mail
to the list archived and indexed in a standard format along
with all the other lists that I subscribe to, so that I can
search everything at once, and instead it will be hidden on
some inaccessible proprietary system with dubious longevity.

Is there a way to have discourse.itk.org forward every message
by email? I couldn't find one.

David

On 2/8/18 9:36 AM, Dženan Zukić wrote:
> Hi Ibraheem,
>
> we are moving away from a mailing list, and into a forum <https://discourse.itk.org/>. Could you repost your question there?
>
> Thanks,
> Dženan
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users


The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] Forums suck, long live email, was Re: ResampleDICOM example and DCMTK

Matt McCormick-3
In reply to this post by David Clunie
Hi David,

Thanks for chiming in. Don't worry, email lives on :-).

Instructions on how to use Discourse as a mailing list can be found here:

  https://discourse.itk.org/t/using-discourse-as-a-mailing-list/32

Thanks,
Matt

On Thu, Feb 8, 2018 at 10:11 AM, David Clunie <[hidden email]> wrote:

> That's a bummer ... now I won't be able to have all the mail
> to the list archived and indexed in a standard format along
> with all the other lists that I subscribe to, so that I can
> search everything at once, and instead it will be hidden on
> some inaccessible proprietary system with dubious longevity.
>
> Is there a way to have discourse.itk.org forward every message
> by email? I couldn't find one.
>
> David
>
> On 2/8/18 9:36 AM, Dženan Zukić wrote:
>> Hi Ibraheem,
>>
>> we are moving away from a mailing list, and into a forum <https://discourse.itk.org/>. Could you repost your question there?
>>
>> Thanks,
>> Dženan
> The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
> ________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> https://itk.org/mailman/listinfo/insight-users
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] Forums suck, long live email, was Re: ResampleDICOM example and DCMTK

Bill Lorensen-2
David, I agree. I only use the email option for discourse.

On Feb 8, 2018 7:48 AM, "Matt McCormick" <[hidden email]> wrote:
Hi David,

Thanks for chiming in. Don't worry, email lives on :-).

Instructions on how to use Discourse as a mailing list can be found here:

  https://discourse.itk.org/t/using-discourse-as-a-mailing-list/32

Thanks,
Matt

On Thu, Feb 8, 2018 at 10:11 AM, David Clunie <[hidden email]> wrote:
> That's a bummer ... now I won't be able to have all the mail
> to the list archived and indexed in a standard format along
> with all the other lists that I subscribe to, so that I can
> search everything at once, and instead it will be hidden on
> some inaccessible proprietary system with dubious longevity.
>
> Is there a way to have discourse.itk.org forward every message
> by email? I couldn't find one.
>
> David
>
> On 2/8/18 9:36 AM, Dženan Zukić wrote:
>> Hi Ibraheem,
>>
>> we are moving away from a mailing list, and into a forum <https://discourse.itk.org/>. Could you repost your question there?
>>
>> Thanks,
>> Dženan
> The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
> ________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> https://itk.org/mailman/listinfo/insight-users
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users

The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] Forums suck, long live email, was Re: ResampleDICOM example and DCMTK

Sean McBride
In reply to this post by Matt McCormick-3
On Thu, 8 Feb 2018 10:47:55 -0500, Matt McCormick said:

>Thanks for chiming in. Don't worry, email lives on :-).
>
>Instructions on how to use Discourse as a mailing list can be found here:
>
>  https://discourse.itk.org/t/using-discourse-as-a-mailing-list/32

Alas, in my opinion anyway, using Discourse as a mailing list is a very subpar experience.

- it changes the 'from' address, making off-list replies impossible
- replying to the 'from' address bounces, making 'reply all' broken
- there's no 'List-Post' header, so it's hard to start new threads
- it sends html email
- the text-only part of the email renders quotations poorly
- quoted text in replies get removed, making inline replies impossible/broken
- it does something weird with emoji characters, changing them to strings like ":ok_hand:"
- it discards email signatures

Cheers,

Sean


The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users
Reply | Threaded
Open this post in threaded view
|

Re: [ITK-users] [ITK] Forums suck, long live email, was Re: ResampleDICOM example and DCMTK

Matt McCormick-3
On Wed, Feb 14, 2018 at 5:47 PM, Matthew Brett <[hidden email]> wrote:

> On Wed, Feb 14, 2018 at 10:14 PM, Sean McBride <[hidden email]> wrote:
>> On Thu, 8 Feb 2018 10:47:55 -0500, Matt McCormick said:
>>
>>>Thanks for chiming in. Don't worry, email lives on :-).
>>>
>>>Instructions on how to use Discourse as a mailing list can be found here:
>>>
>>>  https://discourse.itk.org/t/using-discourse-as-a-mailing-list/32
>>
>> Alas, in my opinion anyway, using Discourse as a mailing list is a very subpar experience.

These statements are very deceiving.


>> - it changes the 'from' address, making off-list replies impossible

This means it does not expose your email address to all the spammers
on the internets!


>> - replying to the 'from' address bounces, making 'reply all' broken

Use "reply" instead of "reply all".


>> - there's no 'List-Post' header, so it's hard to start new threads

See the link above on how to start a new thread.


>> - it sends html email

Yes, this is too bad. However, HTML email is simply a standard today
in all kinds of communication.


>> - the text-only part of the email renders quotations poorly

I am not sure how bad this is relative having content only limited to
plain text. In imaging, it is helpful to be able to share images.


>> - quoted text in replies get removed, making inline replies impossible/broken

It is still possible to quote replies.


>> - it does something weird with emoji characters, changing them to strings like ":ok_hand:"

Is this bad?


>> - it discards email signatures

This is a feature.


2 cents,
Matt
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
https://itk.org/mailman/listinfo/insight-users