本文整理汇总了C++中image::pointer类的典型用法代码示例。如果您正苦于以下问题:C++ pointer类的具体用法?C++ pointer怎么用?C++ pointer使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了pointer类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: recompileOpenCLCode
void NoneLocalMeans::recompileOpenCLCode(Image::pointer input) {
// Check if there is a need to recompile OpenCL code
if(input->getDimensions() == mDimensionCLCodeCompiledFor &&
input->getDataType() == mTypeCLCodeCompiledFor && !recompile)
return;
recompile = false;
OpenCLDevice::pointer device = getMainDevice();
std::string buildOptions = "";
if(!device->isWritingTo3DTexturesSupported()) {
buildOptions = "-DTYPE=" + getCTypeAsString(mOutputType);
}
buildOptions += " -D WINDOW=";
buildOptions += std::to_string((windowSize-1)/2);
buildOptions += " -D GROUP=";
buildOptions += std::to_string((groupSize-1)/2);
buildOptions += " -D KVERSION=";
buildOptions += std::to_string(k);
buildOptions += " -D EUCLID=";
buildOptions += std::to_string(k);
cl::Program program;
if(input->getDimensions() == 2) {
program = getOpenCLProgram(device, "2D", buildOptions);
} else {
//createOpenCLProgram(std::string(FAST_SOURCE_DIR) + "Algorithms/NoneLocalMeans/NoneLocalMeans3Dgs.cl", "3D");
program = getOpenCLProgram(device, "3D", buildOptions);
}
mKernel = cl::Kernel(program, "noneLocalMeans");
mDimensionCLCodeCompiledFor = input->getDimensions();
mTypeCLCodeCompiledFor = input->getDataType();
}
示例2: execute
void ImageImporter::execute() {
if (mFilename == "")
throw Exception("No filename was supplied to the ImageImporter");
uchar* convertedPixelData;
// Load image from disk using Qt
QImage image;
reportInfo() << "Trying to load image..." << Reporter::end();
if(!image.load(mFilename.c_str())) {
throw FileNotFoundException(mFilename);
}
reportInfo() << "Loaded image with size " << image.width() << " " << image.height() << Reporter::end();
QImage::Format format;
if(mGrayscale) {
format = QImage::Format_Grayscale8;
} else {
format = QImage::Format_RGB888;
}
QImage convertedImage = image.convertToFormat(format);
// Get pixel data
convertedPixelData = convertedImage.bits();
Image::pointer output = getOutputData<Image>();
std::cout << "image info" << std::endl;
std::cout << convertedImage.width() << std::endl;
std::cout << convertedImage.depth() << std::endl;
std::cout << convertedImage.bytesPerLine() << std::endl;
if(convertedImage.width()*convertedImage.depth()/8 != convertedImage.bytesPerLine()) {
const int bytesPerPixel = (convertedImage.depth()/8);
std::unique_ptr<uchar[]> fixedPixelData = std::make_unique<uchar[]>(image.width()*image.height());
// Misalignment
for(int scanline = 0; scanline < image.height(); ++scanline) {
std::memcpy(
&fixedPixelData[scanline*image.width()*bytesPerPixel],
&convertedPixelData[scanline*convertedImage.bytesPerLine()],
image.width()*bytesPerPixel
);
}
output->create(
image.width(),
image.height(),
TYPE_UINT8,
mGrayscale ? 1 : 3,
getMainDevice(),
fixedPixelData.get()
);
} else {
output->create(
image.width(),
image.height(),
TYPE_UINT8,
mGrayscale ? 1 : 3,
getMainDevice(),
convertedPixelData
);
}
}
示例3: execute
void BinaryThresholding::execute() {
if(!mLowerThresholdSet && !mUpperThresholdSet) {
throw Exception("BinaryThresholding need at least one threshold to be set.");
}
Image::pointer input = getStaticInputData<Image>(0);
Segmentation::pointer output = getStaticOutputData<Segmentation>(0);
output->createFromImage(input);
if(getMainDevice()->isHost()) {
throw Exception("Not implemented yet.");
} else {
OpenCLDevice::pointer device = OpenCLDevice::pointer(getMainDevice());
cl::Program program;
if(input->getDimensions() == 3) {
program = getOpenCLProgram(device, "3D");
} else {
program = getOpenCLProgram(device, "2D");
}
cl::Kernel kernel;
if(mLowerThresholdSet && mUpperThresholdSet) {
kernel = cl::Kernel(program, "tresholding");
kernel.setArg(3, mLowerThreshold);
kernel.setArg(4, mUpperThreshold);
} else if(mLowerThresholdSet) {
kernel = cl::Kernel(program, "thresholdingWithOnlyLower");
kernel.setArg(3, mLowerThreshold);
} else {
kernel = cl::Kernel(program, "thresholdingWithOnlyUpper");
kernel.setArg(3, mUpperThreshold);
}
cl::NDRange globalSize;
OpenCLImageAccess::pointer access = input->getOpenCLImageAccess(ACCESS_READ, device);
if(input->getDimensions() == 2) {
OpenCLImageAccess::pointer access2 = output->getOpenCLImageAccess(ACCESS_READ_WRITE, device);
kernel.setArg(0, *access->get2DImage());
kernel.setArg(1, *access2->get2DImage());
globalSize = cl::NDRange(output->getWidth(), output->getHeight());
} else {
// TODO no 3d image write support
OpenCLImageAccess::pointer access2 = output->getOpenCLImageAccess(ACCESS_READ_WRITE, device);
kernel.setArg(0, *access->get3DImage());
kernel.setArg(1, *access2->get3DImage());
globalSize = cl::NDRange(output->getWidth(), output->getHeight(), output->getDepth());
}
kernel.setArg(2, (uchar)mLabel);
cl::CommandQueue queue = device->getCommandQueue();
queue.enqueueNDRangeKernel(
kernel,
cl::NullRange,
globalSize,
cl::NullRange
);
}
}
示例4: executeAlgorithmOnHost
void executeAlgorithmOnHost(Image::pointer input, Image::pointer output) {
ImageAccess inputAccess = input->getImageAccess(ACCESS_READ);
ImageAccess outputAccess = output->getImageAccess(ACCESS_READ_WRITE);
T * inputData = (T*)inputAccess.get();
T * outputData = (T*)outputAccess.get();
unsigned int nrOfElements = input->getWidth()*input->getHeight()*input->getDepth()*input->getNrOfComponents();
for(unsigned int i = 0; i < nrOfElements; i++) {
outputData[i] = 2.0*inputData[i];
}
}
示例5: recompileOpenCLCode
void SeededRegionGrowing::recompileOpenCLCode(Image::pointer input) {
// Check if there is a need to recompile OpenCL code
if(input->getDimensions() == mDimensionCLCodeCompiledFor &&
input->getDataType() == mTypeCLCodeCompiledFor)
return;
OpenCLDevice::pointer device = getMainDevice();
std::string buildOptions = "";
if(input->getDataType() == TYPE_FLOAT) {
buildOptions = "-DTYPE_FLOAT";
} else if(input->getDataType() == TYPE_INT8 || input->getDataType() == TYPE_INT16) {
buildOptions = "-DTYPE_INT";
} else {
buildOptions = "-DTYPE_UINT";
}
std::string filename;
if(input->getDimensions() == 2) {
filename = "Algorithms/SeededRegionGrowing/SeededRegionGrowing2D.cl";
} else {
filename = "Algorithms/SeededRegionGrowing/SeededRegionGrowing3D.cl";
}
int programNr = device->createProgramFromSource(std::string(FAST_SOURCE_DIR) + filename, buildOptions);
mKernel = cl::Kernel(device->getProgram(programNr), "seededRegionGrowing");
mDimensionCLCodeCompiledFor = input->getDimensions();
mTypeCLCodeCompiledFor = input->getDataType();
}
示例6: setScalarAsFloat
void setScalarAsFloat(T* data, uint position, Image::pointer image, float value, uchar channel) {
Vector3ui size = image->getSize();
if(position >= size.x()*size.y()*size.z())
throw OutOfBoundsException();
uint address = position*image->getNrOfComponents() + channel;
if(image->getDataType() == TYPE_SNORM_INT16) {
data[address] = value * 32767.0f;;
} else if(image->getDataType() == TYPE_UNORM_INT16) {
data[address] = value * 65535.0f;;
} else {
data[address] = value;
}
}
示例7: execute
void ImageSlicer::execute() {
Image::pointer input = getStaticInputData<Image>();
Image::pointer output = getStaticOutputData<Image>();
if(input->getDimensions() != 3)
throw Exception("Image slicer can only be used for 3D images");
if(!mArbitrarySlicing && !mOrthogonalSlicing)
throw Exception("No slice plane given to the ImageSlicer");
// TODO
if(mOrthogonalSlicing) {
orthogonalSlicing(input, output);
} else {
arbitrarySlicing(input, output);
}
}
示例8: getScalarAsFloat
float getScalarAsFloat(T* data, uint position, Image::pointer image, uchar channel) {
Vector3ui size = image->getSize();
if(position >= size.x()*size.y()*size.z())
throw OutOfBoundsException();
T value = data[position*image->getNrOfComponents() + channel];
float floatValue;
if(image->getDataType() == TYPE_SNORM_INT16) {
floatValue = std::max(-1.0f, (float)value / 32767.0f);
} else if(image->getDataType() == TYPE_UNORM_INT16) {
floatValue = (float)value / 65535.0f;
} else {
floatValue = value;
}
return floatValue;
}
示例9: transferVTKDataToFAST
void transferVTKDataToFAST(vtkImageData* image, Image::pointer output) {
void* data;
DataType type;
switch(image->GetScalarType()) {
case VTK_FLOAT:
data = readVTKData<float>(image);
type = TYPE_FLOAT;
break;
case VTK_CHAR:
case VTK_SIGNED_CHAR:
data = readVTKData<char>(image);
type = TYPE_INT8;
break;
case VTK_UNSIGNED_CHAR:
data = readVTKData<uchar>(image);
type = TYPE_UINT8;
break;
case VTK_SHORT:
data = readVTKData<short>(image);
type = TYPE_INT16;
break;
case VTK_UNSIGNED_SHORT:
data = readVTKData<ushort>(image);
type = TYPE_UINT16;
break;
default:
throw Exception("VTK image of unsupported type was supplied to the VTKImageImporter");
break;
}
int * size = image->GetDimensions();
if(image->GetDataDimension() == 2) {
output->create(size[0]-1, size[1]-1,type,1,Host::getInstance(),data);
} else if(image->GetDataDimension() == 3) {
output->create(size[0]-1, size[1]-1,size[2]-1,type,1,Host::getInstance(),data);
} else {
throw Exception("Wrong number of dimensions in VTK image");
}
deleteArray(data, type);
}
示例10: execute
void Dilation::execute() {
Image::pointer input = getInputData<Image>();
if(input->getDataType() != TYPE_UINT8) {
throw Exception("Data type of image given to Dilation must be UINT8");
}
Image::pointer output = getOutputData<Image>();
output->createFromImage(input);
SceneGraph::setParentNode(output, input);
output->fill(0);
OpenCLDevice::pointer device = std::dynamic_pointer_cast<OpenCLDevice>(getMainDevice());
cl::CommandQueue queue = device->getCommandQueue();
cl::Program program = getOpenCLProgram(device);
cl::Kernel dilateKernel(program, "dilate");
Vector3ui size = input->getSize();
OpenCLImageAccess::pointer access = input->getOpenCLImageAccess(ACCESS_READ, device);
dilateKernel.setArg(0, *access->get3DImage());
dilateKernel.setArg(2, mSize/2);
if(!device->isWritingTo3DTexturesSupported()) {
OpenCLBufferAccess::pointer access2 = output->getOpenCLBufferAccess(ACCESS_READ_WRITE, device);
dilateKernel.setArg(1, *access2->get());
queue.enqueueNDRangeKernel(
dilateKernel,
cl::NullRange,
cl::NDRange(size.x(), size.y(), size.z()),
cl::NullRange
);
} else {
OpenCLImageAccess::pointer access2 = output->getOpenCLImageAccess(ACCESS_READ_WRITE, device);
dilateKernel.setArg(1, *access2->get3DImage());
queue.enqueueNDRangeKernel(
dilateKernel,
cl::NullRange,
cl::NDRange(size.x(), size.y(), size.z()),
cl::NullRange
);
}
}
示例11: createIGTLTransformMessage
static igtl::TransformMessage::Pointer createIGTLTransformMessage(Image::pointer image) {
// Create transform message from the scene graph information of image
igtl::Matrix4x4 matrix;
AffineTransformation::pointer T = image->getSceneGraphNode()->getTransformation();
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 4; j++) {
matrix[i][j] = T->getTransform().matrix()(i,j);
}}
igtl::TransformMessage::Pointer message = igtl::TransformMessage::New();
message->SetDeviceName("DummyTransform");
message->SetMatrix(matrix);
return message;
}
示例12: Exception
void
SegmentationRenderer::draw(Matrix4f perspectiveMatrix, Matrix4f viewingMatrix, float zNear, float zFar, bool mode2D) {
std::lock_guard<std::mutex> lock(mMutex);
OpenCLDevice::pointer device = std::dynamic_pointer_cast<OpenCLDevice>(getMainDevice());
if(mColorsModified) {
// Transfer colors to device (this doesn't have to happen every render call..)
std::unique_ptr<float[]> colorData(new float[3*mLabelColors.size()]);
std::unordered_map<int, Color>::iterator it;
for(it = mLabelColors.begin(); it != mLabelColors.end(); it++) {
colorData[it->first*3] = it->second.getRedValue();
colorData[it->first*3+1] = it->second.getGreenValue();
colorData[it->first*3+2] = it->second.getBlueValue();
}
mColorBuffer = cl::Buffer(
device->getContext(),
CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
sizeof(float)*3*mLabelColors.size(),
colorData.get()
);
}
if(mFillAreaModified) {
// Transfer colors to device (this doesn't have to happen every render call..)
std::unique_ptr<char[]> fillAreaData(new char[mLabelColors.size()]);
std::unordered_map<int, Color>::iterator it;
for(it = mLabelColors.begin(); it != mLabelColors.end(); it++) {
if(mLabelFillArea.count(it->first) == 0) {
// Use default value
fillAreaData[it->first] = mFillArea;
} else {
fillAreaData[it->first] = mLabelFillArea[it->first];
}
}
mFillAreaBuffer = cl::Buffer(
device->getContext(),
CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
sizeof(char)*mLabelColors.size(),
fillAreaData.get()
);
}
mKernel = cl::Kernel(getOpenCLProgram(device), "renderToTexture");
mKernel.setArg(2, mColorBuffer);
mKernel.setArg(3, mFillAreaBuffer);
mKernel.setArg(4, mBorderRadius);
mKernel.setArg(5, mOpacity);
for(auto it : mDataToRender) {
Image::pointer input = std::static_pointer_cast<Image>(it.second);
uint inputNr = it.first;
if(input->getDimensions() != 2)
throw Exception("SegmentationRenderer only supports 2D images. Use ImageSlicer to extract a 2D slice from a 3D image.");
if(input->getDataType() != TYPE_UINT8)
throw Exception("SegmentationRenderer only support images with dat type uint8.");
// Check if a texture has already been created for this image
if(mTexturesToRender.count(inputNr) > 0 && mImageUsed[inputNr] == input)
continue; // If it has already been created, skip it
// If it has not been created, create the texture
OpenCLImageAccess::pointer access = input->getOpenCLImageAccess(ACCESS_READ, device);
cl::Image2D *clImage = access->get2DImage();
// Run kernel to fill the texture
cl::CommandQueue queue = device->getCommandQueue();
if (mTexturesToRender.count(inputNr) > 0) {
// Delete old texture
glDeleteTextures(1, &mTexturesToRender[inputNr]);
mTexturesToRender.erase(inputNr);
glDeleteVertexArrays(1, &mVAO[inputNr]);
mVAO.erase(inputNr);
}
cl::Image2D image;
cl::ImageGL imageGL;
std::vector<cl::Memory> v;
GLuint textureID;
// TODO The GL-CL interop here is causing glClear to not work on AMD systems and therefore disabled
/*
if(DeviceManager::isGLInteropEnabled()) {
// Create OpenGL texture
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, input->getWidth(), input->getHeight(), 0, GL_RGBA, GL_FLOAT, 0);
// Create CL-GL image
imageGL = cl::ImageGL(
device->getContext(),
CL_MEM_READ_WRITE,
//.........这里部分代码省略.........
示例13: executeAlgorithmOnHost
void executeAlgorithmOnHost(Image::pointer input, Image::pointer output, unsigned char group, unsigned char window, float strength, unsigned char sigma) {
throw Exception("This is on host, does not work atm");
ImageAccess::pointer inputAccess = input->getImageAccess(ACCESS_READ);
ImageAccess::pointer outputAccess = output->getImageAccess(ACCESS_READ_WRITE);
T * inputData = (T*)inputAccess->get();
T * outputData = (T*)outputAccess->get();
unsigned int width = input->getWidth();
unsigned int height = input->getHeight();
//Window is window-1/2
//group is group-1/2
//strength is strength*strength
//sigma is sigma*sigma
//Not working atm with the T
//Does not work with outofbounds atm
//So this code is for all pixels inbound, meaning x + group + window < width / x - group - window > 0 //same for y
for (int x = 0; x < width; x++){
for (int y = 0; y < height; y++){
double normSum = 0.0;
double totSum = 0.0;
double indi = 0.0;
double groupTot = 0.0;
double value = 0.0;
for (int i = x - window; i <= x + window; i++){
for (int j = y - window; j <= y + window; j++){
if (i != x && j != y){
int mX = x - group;
int mY = y - group;
for (int k = i - group; k <= i + group; k++, mX++){
for (int l = j - group; l <= j + group; l++, mY++){
//This is wrong, need to fix T
//indi = inputData[mX][mY] - inputData[k][l];
indi = abs(indi*indi);
indi = exp( - (indi/strength));
groupTot += indi;
}
}
//This is wrong, need to fix T
//value = inputData[i][j];
double pA[] = {i,j};
double pB[] = {x,y};
//double dist = i, j - x, y;
double dist = std::inner_product(std::begin(pA), std::end(pA), std::begin(pB), 0.0);
double gaussWeight = exp(-(dist / (2.0 * sigma)));
gaussWeight = gaussWeight / (2.0 * sigma);
groupTot *= gaussWeight;
normSum += groupTot;
totSum += groupTot * value;
groupTot = 0.0;
}
}
}
value = totSum / normSum;
/*
Not sure it needed
if (value < 0){
value = 0;
}
if (value > 1.0){
value = 1.0f;
}
*/
//This is wrong, need to fix T
//outputData[x][y] = (T)value;
}
}
}
示例14: createIGTLImageMessage
static igtl::ImageMessage::Pointer createIGTLImageMessage(Image::pointer image) {
// size parameters
int size[3] = {(int)image->getWidth(), (int)image->getHeight(), (int)image->getDepth()}; // image dimension
float spacing[3] = {image->getSpacing().x(), image->getSpacing().y(), image->getSpacing().z()}; // spacing (mm/pixel)
int svoffset[3] = {0, 0, 0}; // sub-volume offset
int scalarType;
size_t totalSize = image->getWidth()*image->getHeight()*image->getDepth()*image->getNrOfChannels();
switch(image->getDataType()) {
case TYPE_UINT8:
scalarType = igtl::ImageMessage::TYPE_UINT8;
totalSize *= sizeof(unsigned char);
break;
case TYPE_INT8:
scalarType = igtl::ImageMessage::TYPE_INT8;
totalSize *= sizeof(char);
break;
case TYPE_UINT16:
scalarType = igtl::ImageMessage::TYPE_UINT16;
totalSize *= sizeof(unsigned short);
break;
case TYPE_INT16:
scalarType = igtl::ImageMessage::TYPE_INT16;
totalSize *= sizeof(short);
break;
case TYPE_FLOAT:
scalarType = igtl::ImageMessage::TYPE_FLOAT32;
totalSize *= sizeof(float);
break;
}
//------------------------------------------------------------
// Create a new IMAGE type message
igtl::ImageMessage::Pointer imgMsg = igtl::ImageMessage::New();
imgMsg->SetDimensions(size);
imgMsg->SetSpacing(spacing);
imgMsg->SetNumComponents(image->getNrOfChannels());
imgMsg->SetScalarType(scalarType);
imgMsg->SetDeviceName("DummyImage");
imgMsg->SetSubVolume(size, svoffset);
imgMsg->AllocateScalars();
ImageAccess::pointer access = image->getImageAccess(ACCESS_READ);
memcpy(imgMsg->GetScalarPointer(), access->get(), totalSize);
return imgMsg;
}
示例15: execute
void MetaImageImporter::execute() {
if(mFilename == "")
throw Exception("Filename was not set in MetaImageImporter");
// Open and parse mhd file
std::fstream mhdFile;
mhdFile.open(mFilename.c_str(), std::fstream::in);
if(!mhdFile.is_open())
throw FileNotFoundException(mFilename);
std::string line;
std::string rawFilename;
bool sizeFound = false,
rawFilenameFound = false,
typeFound = false,
dimensionsFound = false;
std::string typeName;
// Find NDims first
bool imageIs3D = false;
do {
std::getline(mhdFile, line);
if(line.substr(0, 5) == "NDims") {
if(line.substr(5+3, 1) == "3") {
imageIs3D = true;
} else if(line.substr(5+3, 1) == "2") {
imageIs3D = false;
}
dimensionsFound = true;
}
} while(!mhdFile.eof() && !dimensionsFound);
if(!dimensionsFound)
throw Exception("NDims not found in metaimage file.");
// Reset and start reading file from beginning
mhdFile.seekg(0);
unsigned int width, height, depth = 1;
unsigned int nrOfComponents = 1;
Image::pointer output = getOutputData<Image>(0);
Vector3f spacing(1,1,1), offset(0,0,0), centerOfRotation(0,0,0);
Matrix3f transformMatrix = Matrix3f::Identity();
bool isCompressed = false;
std::size_t compressedDataSize = 0;
do{
std::getline(mhdFile, line);
boost::trim(line);
if(line.size() == 0) // line is empty
continue;
int firstSpace = line.find(" ");
std::string key = line.substr(0, firstSpace);
boost::trim(key);
int equalSignPos = line.find("=");
std::string value = line.substr(equalSignPos+1);
boost::trim(value);
if(key == "DimSize") {
std::vector<std::string> values;
boost::split(values, value, boost::is_any_of(" "));
// Remove any empty values:
values.erase(std::remove(values.begin(), values.end(), ""), values.end());
if(imageIs3D) {
if(values.size() != 3)
throw Exception("DimSize in MetaImage file did not contain 3 numbers");
depth = boost::lexical_cast<int>(values[2]);
} else {
if(values.size() != 2)
throw Exception("DimSize in MetaImage file did not contain 2 numbers");
}
width = boost::lexical_cast<int>(values[0]);
height = boost::lexical_cast<int>(values[1]);
sizeFound = true;
} else if(key == "CompressedData" && value == "True") {
isCompressed = true;
} else if(key == "CompressedDataSize") {
compressedDataSize = boost::lexical_cast<int>(value);
} else if(key == "ElementDataFile") {
rawFilename = value;
rawFilenameFound = true;
// Remove any trailing spaces
int pos = rawFilename.find(" ");
if(pos > 0)
rawFilename = rawFilename.substr(0,pos);
// Get path name
pos = mFilename.rfind('/');
if(pos > 0)
rawFilename = mFilename.substr(0,pos+1) + rawFilename;
} else if(key == "ElementType") {
typeFound = true;
typeName = value;
// Remove any trailing spaces
int pos = typeName.find(" ");
if(pos > 0)
typeName = typeName.substr(0,pos);
//.........这里部分代码省略.........