Howto: Access multi-frame images without loading complete pixel data
Here's an example that shows how to access the individual frames of a large multi-frame image (for visualization purposes) without loading the complete pixel data into main memory.
The parameter fcount in the DicomImage constructor specifies that initially only the first 10 frames are processed. Multiple calls of processNextFrames() give access to the subsequent frames.
See API documentation for details.
Source Code
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmimgle/dcmimage.h"
int main(int argc, char *argv[])
{
OFLog::configure(OFLogger::INFO_LOG_LEVEL);
DicomImage *image = new DicomImage("mf_image.dcm", CIF_UsePartialAccessToPixelData, 0, 10 /* fcount */);
if (image->getStatus() == EIS_Normal)
{
do {
DCMIMGLE_INFO("processing frame " << image->getFirstFrame() + 1 << " to "
<< image->getFirstFrame() + image->getFrameCount());
} while (image->processNextFrames());
}
delete image;
return 0;
}
This example requires DCMTK 3.5.5 (20091222) or newer.
| DicomImage::DicomImage | ( | const char * | filename, |
| const unsigned long | flags = 0, | ||
| const unsigned long | fstart = 0, | ||
| const unsigned long | fcount = 0 | ||
| ) |
constructor, open a DICOM file.
Opens specified file and reads image related data, creates internal representation of image data. Use getStatus() to obtain detailed information about any errors.
-
Parameters:
-
filename the DICOM file flags configuration flags (see diutils.h, CIF_MayDetachPixelData is set automatically) fstart first frame to be processed (optional, 0 = 1st frame), all subsequent use of parameters labeled 'frame' in this class refers to this start frame. fcount number of frames (optional, 0 = all frames)
| int DicomImage::processNextFrames | ( | const unsigned long | fcount = 0 | ) | [inline] |
process next couple of frames.
If the image object has been created with less than the number of frames stored in the DICOM image, this function allows for accessing the subsequent frames. Multiple calls to this function allow for successively processing all frames stored in the file or dataset. See parameters 'fstart' and 'fcount' of the constructor for how to initially create an instance of this class. NB: Only "original" images can be processed in this way, i.e. images that were created by one of the above constructors. Images that were created by one of the createXXX() methods can not be processed since they are derived from original image data in a certain way, e.g. scaled.
-
Parameters:
-
fcount number of frames to be processed (0 = same number as before)
-
Returns:
- status, true if successful, false otherwise
-
------------------------------------------------------------------
柳北风儿
http://qimo601.iteye.com
- 转载: http://support.dcmtk.org/wiki/dcmtk/howto/multiframe
本文介绍了一种在不加载完整像素数据到主内存的情况下,访问大型多帧DICOM图像中各个帧的方法。通过设置DicomImage构造函数的fcount参数来指定初始处理的帧数,并使用processNextFrames()方法来获取后续帧。
690

被折叠的 条评论
为什么被折叠?



