1

私はiPad用のITKライブラリを構築しました-そしてそれは動作します。次に、ITKの例を作成しようとしました-次のようなものです:

// Load DICOM files
typedef itk::ImageSeriesReader< InputImageType > ReaderType;
ReaderType::Pointer reader = ReaderType::New();
typedef itk::GDCMImageIO ImageIOType;
typedef itk::GDCMSeriesFileNames NamesGeneratorType;
ImageIOType::Pointer gdcmIO = ImageIOType::New();
NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();
namesGenerator->SetInputDirectory( "C:/test" );

しかし、私はパスDICOMの代わりにipadのドキュメントフォルダのディレクトリにスタックをロードするために多くの可能性を試しました。c:/testしかし、それはうまくいきませんでした。

だから私の考えはDICOMインターネット上でそのようなものをロードすることです:

NSData *dicomImage = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.someurl.ch/dicom/blabla.dcm"]];   

そして今、私はdicomデータ(患者名など)を取り出して画像データから分離しようと考えています。それなら、IPADに表示するUIImageを最後に持つことが可能でなければならないと思います。

その例を探しましたが、残念ながら...何か良いものが見つかりませんでした。誰かがiPadにdcmをロードする方法や、オブジェクトITKから画像データを取得する方法を知っている人はいますか?NSData

4

4 に答える 4

2

ITKは実際にはGDCMを使用してDICOMファイルを読み取るため、GDCMを直接使用する方がおそらく簡単です。 http://sourceforge.net/apps/mediawiki/gdcm/index.php

iPad(または任意のモバイルデバイス)にDICOMファイルをロードする場合は、注意が必要です。一部のDICOMファイルは非常に大きく(GBのオーダー)、おそらくアプリケーションをクラッシュさせるだけです。もちろん、とにかくiPadに大きなファイルをロードするのは難しいでしょう:)


ピクセルデータは、JPEGで見られるように、必ずしもRGBデータである必要はありません。測光の解釈を確認してください。RGBの場合は、(デコードと解凍の後で)問題ありません。モノクロの場合は、データをUIImageに渡す前に、RGB値に変換する必要がある場合があります( DICOM画像の幅とレベルをJPEGの明るさとコントラストに変換する方法を参照)。

于 2011-05-16T09:28:41.623 に答える
1

DCMTKを調査することをお勧めします。iPhoneでは、DCMTKにあるネットワークプロトコル機能が必要になる可能性があります。

于 2011-09-23T02:18:18.523 に答える
0

前回の投稿以来、問題の解決策が少しあります。

namesGenerator->SetInputDirectory( documentFolderPath );
typedef std::vector<std::string> FileNamesContainer; 
FileNamesContainer fileNames = nameGenerator->GetInputFileNames();
reader->SetFileNames( fileNames );
reader->Update();
ImageType *  imageTest = reader->GetOutput(); // get 3d volume
PixelType * pixelData = imageTest->GetBufferPointer(); // get bufferpointer

これで、DICOMスタックをロードして、dicomヘッダー情報全体を取得できます:)ここで、私の問題は、画像のピクセルデータをUIImageに取り込むことです。このコードで単一のピクセル値をロードできます:(テストのためだけに、getPixelは遅いメソッドです)

ImageType::IndexType pixelIndex;
pixelIndex[0] = 100; 
pixelIndex[1] = 100; 
pixelIndex[2] = 0;

ImageType::PixelType pixelValue = imageTest->GetPixel( pixelIndex );

しかし、私の問題は、UIImageを作成するために* pixeldata(バッファーポインター)のデータを処理する方法がわからないことです。悲しいことに、ITKのドキュメントにいくつかの例が見つかりませんでした:(

于 2011-05-16T13:35:19.390 に答える
0
//assume that the image width is 880 and the image height is 635
int imageWidth = 880;
int imageHeight = 635;
NSString *dicomPath = [[[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/"] stringByAppendingString:@"your dicom file name"];
const char *c_dicomPath = [dicomPath UTF8String];

typedef unsigned char InputPixelType; 
const unsigned int InputDimension = 3;
typedef itk::Image< InputPixelType, InputDimension > InputImageType;

typedef itk::ImageFileReader< InputImageType > ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(c_dicomPath);

typedef itk::GDCMImageIO ImageIOType; 
ImageIOType::Pointer gdcmImageIO = ImageIOType::New(); 
reader->SetImageIO(gdcmImageIO);

InputPixelType *imageBuf = (InputPixelType*)malloc(sizeof(InputPixelType)*imageHeight*imageWidth*3);
reader->Update();

//get dicom image
memset(imageBuf, 0, sizeof(InputPixelType)*imageHeight*imageWidth*3);

gdcmImageIO->Read(imageBuf);
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGDataProviderRef provider = CGDataProviderCreateWithData(nil, imageBuf, imageWidth*imageHeight*3*sizeof(InputPixelType), nil);  

CGImageRef imageRef = CGImageCreate(imageWidth,//width
                                    imageHeight,//height 
                                    8,//size_t bitsPerComponent, 
                                    24,//size_t bitsPerPixel,
                                    imageWidth*sizeof(InputPixelType)*3,//size_t bytesPerRow, 
                                    colorspace,//CGColorSpaceRef space,
                                    kCGBitmapByteOrderDefault,//CGBitmapInfo bitmapInfo,
                                    provider,//CGDataProviderRef provider,
                                    nil,//const CGFloat *decode,
                                    NO,//bool shouldInterpolate, 
                                    kCGRenderingIntentDefault//CGColorRenderingIntent intent
                                    );
//here is the dicom image decode from dicom file
UIImage *dicomImage = [[UIImage alloc] initWithCGImage:imageRef scale:1.0 orientation:UIImageOrientationUp];
于 2012-03-05T02:42:02.670 に答える