Newer
Older
Eric Wait
committed
#include "MexCommand.h"
Eric Wait
committed
void MexNormalizedCovariance::execute( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[] )
Eric Wait
committed
{
int device = 0;
if (nrhs>2)
device = mat_to_c((int)mxGetScalar(prhs[2]));
Eric Wait
committed
Vec<size_t> imageDims1, imageDims2;
if (mxIsUint8(prhs[0]))
{
unsigned char* imageIn1,* imageIn2;
setupImagePointers(prhs[0],&imageIn1,&imageDims1);
setupImagePointers(prhs[1],&imageIn2,&imageDims2);
if (imageDims1!=imageDims2)
mexErrMsgTxt("Image Dimensions Must Match!\n");
normCoVar = normalizedCovariance(imageIn1,imageIn2,imageDims1,device);
setupImagePointers(prhs[0],&imageIn1,&imageDims1);
setupImagePointers(prhs[1],&imageIn2,&imageDims2);
if (imageDims1!=imageDims2)
mexErrMsgTxt("Image Dimensions Must Match!\n");
normCoVar = normalizedCovariance(imageIn1,imageIn2,imageDims1,device);
{
short* imageIn1,* imageIn2;
setupImagePointers(prhs[0],&imageIn1,&imageDims1);
setupImagePointers(prhs[1],&imageIn2,&imageDims2);
if (imageDims1!=imageDims2)
mexErrMsgTxt("Image Dimensions Must Match!\n");
normCoVar = normalizedCovariance(imageIn1,imageIn2,imageDims1,device);
}
else if (mxIsUint32(prhs[0]))
{
unsigned int* imageIn1,* imageIn2;
setupImagePointers(prhs[0],&imageIn1,&imageDims1);
setupImagePointers(prhs[1],&imageIn2,&imageDims2);
if (imageDims1!=imageDims2)
mexErrMsgTxt("Image Dimensions Must Match!\n");
normCoVar = normalizedCovariance(imageIn1,imageIn2,imageDims1,device);
{
int* imageIn1,* imageIn2;
setupImagePointers(prhs[0],&imageIn1,&imageDims1);
setupImagePointers(prhs[1],&imageIn2,&imageDims2);
if (imageDims1!=imageDims2)
mexErrMsgTxt("Image Dimensions Must Match!\n");
normCoVar = normalizedCovariance(imageIn1,imageIn2,imageDims1,device);
}
else if (mxIsSingle(prhs[0]))
{
float* imageIn1,* imageIn2;
setupImagePointers(prhs[0],&imageIn1,&imageDims1);
setupImagePointers(prhs[1],&imageIn2,&imageDims2);
if (imageDims1!=imageDims2)
mexErrMsgTxt("Image Dimensions Must Match!\n");
normCoVar = normalizedCovariance(imageIn1,imageIn2,imageDims1,device);
}
else if (mxIsDouble(prhs[0]))
{
double* imageIn1,* imageIn2;
setupImagePointers(prhs[0],&imageIn1,&imageDims1);
setupImagePointers(prhs[1],&imageIn2,&imageDims2);
Eric Wait
committed
if (imageDims1!=imageDims2)
mexErrMsgTxt("Image Dimensions Must Match!\n");
Eric Wait
committed
normCoVar = normalizedCovariance(imageIn1,imageIn2,imageDims1,device);
}
else
{
mexErrMsgTxt("Image type not supported!");
}
Eric Wait
committed
plhs[0] = mxCreateDoubleScalar(normCoVar);
}
std::string MexNormalizedCovariance::check( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[] )
Eric Wait
committed
{
if (nrhs!=3)
return "Incorrect number of inputs!";
if (nlhs!=1)
return "Requires one output!";
size_t numDims1 = mxGetNumberOfDimensions(prhs[0]);
if (numDims1>3)
return "Image can have a maximum of three dimensions!";
Eric Wait
committed
size_t numDims2= mxGetNumberOfDimensions(prhs[1]);
if (numDims2>3)
return "Image can have a maximum of three dimensions!";
Eric Wait
committed
if (numDims1!=numDims2)
return "Images must have the same dimensions!";
Eric Wait
committed
return "";
}
Eric Wait
committed
{
return "normalizedCovariance = CudaMex('NormalizedCovariance',imageIn1,imageIn2,[device]);";
}
Eric Wait
committed
{
std::string msg = "\tThis will calculate how similar the images are to one another.\n";
msg += "\tThe return value will be between [-1,1]. Where 1 is exactly the same and -1 is exactly the opposite.\n";
msg += "\tImages must match in dimension.\n";
msg += "\n";
return msg;
}