Skip to content
Snippets Groups Projects
Commit 76f3b582 authored by Eric Wait's avatar Eric Wait
Browse files

dll global cuda buffer for mex interface

parent 70ded4b5
No related branches found
No related tags found
No related merge requests found
......@@ -62,6 +62,7 @@ std::string MexCommand::printUsageList()
void MexCommand::cleanUp()
{
clear();
std::map<std::string,MexCommand*>::iterator it = commandList.begin();
for (; it!=commandList.end(); ++it)
......
......@@ -2,241 +2,264 @@
#include "CudaImageBuffer.cuh"
#include "CHelpers.h"
CudaImageBuffer<unsigned char>* g_cudaBuffer = NULL;
CudaImageBuffer<unsigned char>* g_cudaBuffer2 = NULL;
void clear()
{
if (g_cudaBuffer!=NULL)
delete g_cudaBuffer;
if (g_cudaBuffer2!=NULL)
delete g_cudaBuffer2;
}
void set(Vec<unsigned int> imageDims)
{
if (g_cudaBuffer==NULL)
g_cudaBuffer = new CudaImageBuffer<unsigned char>(imageDims,true);
}
void set2(Vec<unsigned int> imageDims)
{
if (g_cudaBuffer2==NULL)
g_cudaBuffer2 = new CudaImageBuffer<unsigned char>(imageDims,true);
}
void addConstant(const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, double additive)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.addConstant(additive);
g_cudaBuffer->addConstant(additive);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void addImageWith(const MexImagePixelType* image1, const MexImagePixelType* image2, MexImagePixelType* imageOut,
Vec<unsigned int> imageDims, double factor)
{
CudaImageBuffer<unsigned char> cudaBuffer1(imageDims,true);
CudaImageBuffer<unsigned char> cudaBuffer2(imageDims,true);
cudaBuffer1.loadImage(image1,imageDims);
cudaBuffer2.loadImage(image2,imageDims);
set(imageDims);
set2(imageDims);
g_cudaBuffer->loadImage(image1,imageDims);
g_cudaBuffer2->loadImage(image2,imageDims);
cudaBuffer1.addImageWith(&cudaBuffer2,factor);
g_cudaBuffer->addImageWith(g_cudaBuffer2,factor);
cudaBuffer1.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void applyPolyTransformation( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, double a, double b, double c, MexImagePixelType minValue, MexImagePixelType maxValue )
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.applyPolyTransformation(a,b,c,minValue,maxValue);
g_cudaBuffer->applyPolyTransformation(a,b,c,minValue,maxValue);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void calculateMinMax(const MexImagePixelType* image, Vec<unsigned int> imageDims, double& minValue, double& maxValue)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.calculateMinMax(minValue,maxValue);
g_cudaBuffer->calculateMinMax(minValue,maxValue);
}
void contrastEnhancement(const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, Vec<float> sigmas,
Vec<unsigned int> medianNeighborhood)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.contrastEnhancement(sigmas,medianNeighborhood);
g_cudaBuffer->contrastEnhancement(sigmas,medianNeighborhood);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void gaussianFilter( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, Vec<float> sigmas )
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.gaussianFilter(sigmas);
g_cudaBuffer->gaussianFilter(sigmas);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
size_t getGlobalMemoryAvailable()
{
CudaImageBuffer<unsigned char> cudaBuffer(1);
return cudaBuffer.getGlobalMemoryAvailable();
return g_cudaBuffer->getGlobalMemoryAvailable();
}
void maxFilter( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, Vec<unsigned int> neighborhood,
double* kernel/*=NULL*/)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.maxFilter(neighborhood,kernel,true);
g_cudaBuffer->maxFilter(neighborhood,kernel,true);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void maximumIntensityProjection( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims )
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.maximumIntensityProjection();
g_cudaBuffer->maximumIntensityProjection();
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void meanFilter( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, Vec<unsigned int> neighborhood )
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.meanFilter(neighborhood);
g_cudaBuffer->meanFilter(neighborhood);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void medianFilter( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, Vec<unsigned int> neighborhood )
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.medianFilter(neighborhood);
g_cudaBuffer->medianFilter(neighborhood);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void minFilter( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, Vec<unsigned int> neighborhood,
double* kernel/*=NULL*/)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.minFilter(neighborhood,kernel,true);
g_cudaBuffer->minFilter(neighborhood,kernel,true);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void multiplyImage( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, double factor )
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.multiplyImage(factor);
g_cudaBuffer->multiplyImage(factor);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void multiplyImageWith( const MexImagePixelType* image1, const MexImagePixelType* image2, MexImagePixelType* imageOut, Vec<unsigned int> imageDims )
{
CudaImageBuffer<unsigned char> cudaBuffer1(imageDims,true);
CudaImageBuffer<unsigned char> cudaBuffer2(imageDims,true);
cudaBuffer1.loadImage(image1,imageDims);
cudaBuffer2.loadImage(image2,imageDims);
set(imageDims);
set2(imageDims);
g_cudaBuffer->loadImage(image1,imageDims);
g_cudaBuffer2->loadImage(image2,imageDims);
cudaBuffer1.multiplyImageWith(&cudaBuffer2);
g_cudaBuffer->multiplyImageWith(g_cudaBuffer2);
cudaBuffer1.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
double normalizedCovariance(const MexImagePixelType* image1, const MexImagePixelType* image2, Vec<unsigned int> imageDims)
{
CudaImageBuffer<unsigned char> cudaBuffer1(imageDims,true);
CudaImageBuffer<unsigned char> cudaBuffer2(imageDims,true);
cudaBuffer1.loadImage(image1,imageDims);
cudaBuffer2.loadImage(image2,imageDims);
set(imageDims);
set2(imageDims);
g_cudaBuffer->loadImage(image1,imageDims);
g_cudaBuffer2->loadImage(image2,imageDims);
return cudaBuffer1.normalizedCovariance(&cudaBuffer2);
return g_cudaBuffer->normalizedCovariance(g_cudaBuffer2);
}
void otsuThresholdFilter(const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, double alpha)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.otsuThresholdFilter((float)alpha);
g_cudaBuffer->otsuThresholdFilter((float)alpha);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
MexImagePixelType otsuThesholdValue(const MexImagePixelType* image, Vec<unsigned int> imageDims)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
return cudaBuffer.otsuThresholdValue();
return g_cudaBuffer->otsuThresholdValue();
}
void imagePow( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, int p )
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.imagePow(p);
g_cudaBuffer->imagePow(p);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
double sumArray(const MexImagePixelType* image, Vec<unsigned int> imageDims)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
double sum;
cudaBuffer.sumArray(sum);
g_cudaBuffer->sumArray(sum);
return sum;
}
MexImagePixelType* reduceImage( const MexImagePixelType* image, Vec<unsigned int>& imageDims, Vec<double> reductions )
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.reduceImage(reductions);
g_cudaBuffer->reduceImage(reductions);
imageDims = cudaBuffer.getDimension();
return cudaBuffer.retrieveImage();
imageDims = g_cudaBuffer->getDimension();
return g_cudaBuffer->retrieveImage();
}
unsigned int* retrieveHistogram(const MexImagePixelType* image, Vec<unsigned int>& imageDims, int& returnSize)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
return cudaBuffer.retrieveHistogram(returnSize);
return g_cudaBuffer->retrieveHistogram(returnSize);
}
double* retrieveNormalizedHistogram(const MexImagePixelType* image, Vec<unsigned int>& imageDims, int& returnSize)
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
return cudaBuffer.retrieveNormalizedHistogram(returnSize);
return g_cudaBuffer->retrieveNormalizedHistogram(returnSize);
}
void thresholdFilter( const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, double threshold )
{
CudaImageBuffer<unsigned char> cudaBuffer(imageDims,true);
cudaBuffer.loadImage(image,imageDims);
set(imageDims);
g_cudaBuffer->loadImage(image,imageDims);
cudaBuffer.thresholdFilter(threshold);
g_cudaBuffer->thresholdFilter(threshold);
cudaBuffer.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
void unmix( const MexImagePixelType* image1, const MexImagePixelType* image2, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, Vec<unsigned int> neighborhood )
{
CudaImageBuffer<unsigned char> cudaBuffer1(imageDims,true);
CudaImageBuffer<unsigned char> cudaBuffer2(imageDims,true);
cudaBuffer1.loadImage(image1,imageDims);
cudaBuffer2.loadImage(image2,imageDims);
set(imageDims);
set2(imageDims);
g_cudaBuffer->loadImage(image1,imageDims);
g_cudaBuffer2->loadImage(image2,imageDims);
cudaBuffer1.unmix(&cudaBuffer2,neighborhood);
g_cudaBuffer->unmix(g_cudaBuffer2,neighborhood);
cudaBuffer1.retrieveImage(imageOut);
g_cudaBuffer->retrieveImage(imageOut);
}
\ No newline at end of file
......@@ -3,6 +3,7 @@
typedef unsigned char MexImagePixelType;
void clear();
void addConstant(const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, double additive);
void addImageWith(const MexImagePixelType* image1, const MexImagePixelType* image2, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, double factor);
void applyPolyTransformation(const MexImagePixelType* image, MexImagePixelType* imageOut, Vec<unsigned int> imageDims, double a, double b, double c, MexImagePixelType minValue, MexImagePixelType maxValue);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment