Newer
Older
% ContrastEnhancement - This attempts to increase contrast by removing noise as proposed by Michel et al. This starts with subtracting off a highly smoothed version of imageIn followed by median filter.
Eric Wait
committed
% imageOut = ImProc.ContrastEnhancement(imageIn,sigma,MedianNeighborhood);
% ImageIn -- can be an image up to three dimensions and of type (uint8,int8,uint16,int16,uint32,int32,single,double).
% Sigma -- these values will create a n-dimensional Gaussian kernel to get a smoothed image that will be subtracted of the original.
% N is the number of dimensions of imageIn
% The larger the sigma the more object preserving the high pass filter will be (e.g. sigma > 35)
% MedianNeighborhood -- this is the neighborhood size in each dimension that will be evaluated for the median neighborhood filter.
% ImageOut -- will have the same dimensions and type as imageIn.
Eric Wait
committed
function imageOut = ContrastEnhancement(imageIn,sigma,MedianNeighborhood)
% check for Cuda capable devices
Eric Wait
committed
curPath = which('ImProc.Cuda');
Eric Wait
committed
curPath = fileparts(curPath);
devStats = ImProc.Cuda.DeviceStats();
n = length(devStats);
% if there are devices find the availble one and grab the mutex
if (n>0)
foundDevice = false;
device = -1;
while(~foundDevice)
for deviceIdx=1:n
mutexfile = fullfile(curPath,sprintf('device%02d.txt',deviceIdx));
if (~exist(mutexfile,'file'))
try
fclose(fopen(mutexfile,'wt'));
catch errMsg
continue;
end
foundDevice = true;
f = fopen(mutexfile,'at');
fprintf(f,'%s',devStats(deviceIdx).name);
fclose(f);
device = deviceIdx;
break;
end
end
if (~foundDevice)
pause(2);
end
end
try
imageOut = ImProc.Cuda.ContrastEnhancement(imageIn,sigma,MedianNeighborhood,device);
catch errMsg
delete(mutexfile);
throw(errMsg);
end
delete(mutexfile);
else
imageOut = lclContrastEnhancement(imageIn,sigma,MedianNeighborhood);
Eric Wait
committed
end
end