% % % Send Image to Imaris % % Copyright Bitplane AG 2006 % % % Description: % % Change the Imaris DataSet. % This function can be used as utility for other functions; It is not % called directly by Imaris. % % function BPSetImarisImage(aImarisApplication, aImage, aTimeIndex, aChannelIndex) vImarisDataSet = aImarisApplication.mDataSet.Clone; if vImarisDataSet.mSizeX ~= size(aImage,1) || vImarisDataSet.mSizeY ~= size(aImage,2) || vImarisDataSet.mSizeZ ~= size(aImage,3) vImarisDataSet.Resize(0,size(aImage,1), 0,size(aImage,2), 0, size(aImage,3), 0, vImarisDataSet.mSizeC, 0, vImarisDataSet.mSizeT); end if size(aImage,1) == vImarisDataSet.mSizeX && ... size(aImage,2) == vImarisDataSet.mSizeY && ... size(aImage,3) == vImarisDataSet.mSizeZ if strcmp(vImarisDataSet.mType,'eTypeUInt8') vMin = min(reshape(aImage,[1,numel(aImage)])); if vMin < 0 aImage = aImage + vMin; end vMax = max(reshape(aImage,[1,numel(aImage)])); if vMax > (2^8-1) aImage = aImage*(2^8-1)/vMax; end vImarisDataSet.SetDataVolume(uint8(aImage), aChannelIndex-1, aTimeIndex-1); elseif strcmp(vImarisDataSet.mType,'eTypeUInt16') vMin = min(reshape(aImage,[1,numel(aImage)])); if vMin < 0 aImage = aImage + vMin; end vMax = max(reshape(aImage,[1,numel(aImage)])); if vMax > (2^16-1) aImage = aImage*(2^16-1)/vMax; end vImarisDataSet.SetDataVolume(uint16(aImage), aChannelIndex-1, aTimeIndex-1); elseif strcmp(vImarisDataSet.mType,'eTypeFloat') vImarisDataSet.SetDataVolume(single(aImage), aChannelIndex-1, aTimeIndex-1); end end aImarisApplication.mDataSet = vImarisDataSet;