36 #include <vtkImageData.h>
37 #include <vtkImageLuminance.h>
38 #include <vtkImageClip.h>
39 #include <vtkImageAppend.h>
40 #include <vtkMetaImageWriter.h>
41 #include <vtkImageImport.h>
57 mProcessedImage(frames),
68 std::vector<TimedPosition> frameInfo = this->
getFrames();
71 if (inputDims[2] != static_cast<int>(frameInfo.size()))
73 QString msg(
"Mismatch in US input data: inputDims[2] != frameInfo.size() : %1 != %2");
89 CX_ASSERT(index < mProcessedImage.size());
92 unsigned char *inputPointer =
static_cast<unsigned char*
> (mProcessedImage[index]->GetScalarPointer());
98 Eigen::Array3i retval;
99 retval[0] = mProcessedImage[0]->GetDimensions()[0];
100 retval[1] = mProcessedImage[0]->GetDimensions()[1];
101 retval[2] = mProcessedImage.size();
108 retval[2] = retval[0];
141 retval->mName = QFileInfo(inputFrameData->getName()).completeBaseName();
143 retval->resetRemovedFrames();
156 QFileInfo info(inputFilename);
159 QString mhdSingleFile = info.absolutePath()+
"/"+info.completeBaseName()+
".mhd";
161 if (QFileInfo(mhdSingleFile).exists())
166 retval->mName = QFileInfo(mhdSingleFile).completeBaseName();
167 timer.
printElapsedms(QString(
"Loading single %1").arg(inputFilename));
173 retval->mName = QFileInfo(inputFilename).completeBaseName();
175 retval->resetRemovedFrames();
185 retval->mName = name;
186 retval->mImageContainer = images;
187 retval->resetRemovedFrames();
196 return create(name, container);
201 mCropbox(0,0,0,0,0,0), mPurgeInput(true)
239 Eigen::Array<int, 6, 1> extent(sample->GetExtent());
240 retval[0] = extent[1]-extent[0]+1;
241 retval[1] = extent[3]-extent[2]+1;
255 retval[2] = retval[0];
262 cropbox[4] = -100000;
276 clip->SetInputData(input);
277 clip->SetOutputWholeExtent(cropbox.begin());
282 rawResult->Crop(cropbox.begin());
293 if (input->GetNumberOfScalarComponents() == 1)
306 copy->DeepCopy(outData);
346 if (inData->GetNumberOfScalarComponents() != 3)
353 outData->DeepCopy(grayFrame);
360 int* outExt = outData->GetExtent();
366 unsigned char *inPtr =
static_cast<unsigned char*
> (inData->GetScalarPointerForExtent(inData->GetExtent()));
367 unsigned char *outPtr =
static_cast<unsigned char*
> (outData->GetScalarPointerForExtent(outData->GetExtent()));
369 int maxX = outExt[1] - outExt[0];
370 int maxY = outExt[3] - outExt[2];
371 int maxZ = outExt[5] - outExt[4];
373 Eigen::Array<vtkIdType,3,1> inInc;
374 inData->GetContinuousIncrements(inData->GetExtent(), inInc[0], inInc[1], inInc[2]);
377 Eigen::Array<vtkIdType,3,1> outInc;
378 outData->GetContinuousIncrements(outData->GetExtent(), outInc[0], outInc[1], outInc[2]);
383 for (
int z=0; z<=maxZ; z++)
385 for (
int y=0; y<=maxY; y++)
387 for (
int x=0; x<=maxX; x++)
392 if (((*inPtr) == (*(inPtr + 1))) && ((*inPtr) == (*(inPtr + 2))))
402 int metric = (fabs(r-g) + fabs(r-b) + fabs(g-b)) / 3;
428 std::vector<std::vector<vtkImageDataPtr> > raw(angio.size());
430 for (
unsigned i=0; i<raw.size(); ++i)
447 for (
unsigned j=0; j<angio.size(); ++j)
453 raw[j][i] = angioFrame;
457 raw[j][i] = grayFrame;
485 return QFileInfo(
mName).completeBaseName();
507 import->SetImportVoidPointer(source->GetScalarPointer());
508 import->SetDataScalarType(source->GetScalarType());
509 import->SetDataSpacing(source->GetSpacing());
510 import->SetNumberOfScalarComponents(source->GetNumberOfScalarComponents());
511 import->SetWholeExtent(source->GetExtent());
512 import->SetDataExtentToWholeExtent();
522 if (numberOfFrames > 0)
vtkImageDataPtr cropImageExtent(vtkImageDataPtr input, IntBoundingBox3D cropbox) const
Use only US angio data as input. Removes grayscale from the US data and converts the remaining color ...
vtkSmartPointer< vtkImageAppend > vtkImageAppendPtr
std::vector< std::vector< vtkImageDataPtr > > initializeFrames(std::vector< bool > angio)
vtkImageDataPtr useAngio(vtkImageDataPtr inData, vtkImageDataPtr grayFrame) const
cx::ImageDataContainerPtr mImageContainer
#define CX_ASSERT(statement)
void setPurgeInputDataAfterInitialize(bool value)
boost::shared_ptr< class Image > ImagePtr
boost::shared_ptr< class USFrameData > USFrameDataPtr
void printElapsedms(QString text="Elapsed") const
std::vector< int > mReducedToFull
map from indexes in the reduced volume to the full (original) volume.
Eigen::Array3i getDimensions() const
void resetRemovedFrames()
IntBoundingBox3D mCropbox
virtual USFrameDataPtr copy()
Eigen::Vector3i range() const
void reportWarning(QString msg)
void fillImageImport(vtkImageImportPtr import, int index)
fill import with a single frame
Representation of an integer bounding box in 3D. The data are stored as {xmin,xmax,ymin,ymax,zmin,zmax}, in order to simplify communication with vtk.
vtkSmartPointer< class vtkImageClip > vtkImageClipPtr
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
vtkImageDataPtr convertImageDataToGrayScale(vtkImageDataPtr image)
vtkSmartPointer< class vtkImageImport > vtkImageImportPtr
vtkImageDataPtr toGrayscaleAndEffectuateCropping(vtkImageDataPtr input) const
void setCropBox(IntBoundingBox3D mCropbox)
Vector3D getSpacing() const
static USFrameDataPtr create(ImagePtr inputFrameData)
void removeFrame(unsigned int index)
boost::shared_ptr< class ImageDataContainer > ImageDataContainerPtr