Below is the some MATLAB code that will make a sequence even by appending a mirror image section. The function will mirror image one, two and three dimensional data.
function DataMirrorImage = MirrorImageData(Data)
% This function mirror images one, two and three dimensional data in all
% in one, two or three dimensions.
%
% INPUT:
% Data3D................The data to be mirror imaged.
%
% OUTPUT:
% DataMirrorImage.....The mirror image data.
% Get the dimensions of the data.
[xLen, yLen, zLen] = size(Data);
% Mirror image the data in 1D or 2D.
for zNdx = 1:zLen
Data2D = squeeze(Data(:,:,zNdx));
Data2D = [ Data2D fliplr(Data2D(:,2:yLen))];
Data2DMirrorImage = [ Data2D; flipud(Data2D(2:xLen,:))];
DataMirrorImage(:,:,zNdx) = Data2DMirrorImage;
end
% If data is 3D , mirror image the data in 3D.
if zLen > 1
Data3DMirrorImage(:,:,1:zLen) = DataMirrorImage;
Data3DMirrorImage(:,:,(zLen+1):(2*zLen-1)) = flipdim(DataMirrorImage(:,:,2:zLen),3);
DataMirrorImage = Data3DMirrorImage;
end
Example:
>> x = randn(1,9)
x =
1.4172 0.6715 -1.2075 0.7172 1.6302 0.4889 1.0347 0.7269 -0.3034
>> xMi = MirrorImageData(x)
xMi =
Columns 1 through 10
1.4172 0.6715 -1.2075 0.7172 1.6302 0.4889 1.0347 0.7269 -0.3034 -0.3034
Columns 11 through 17
0.7269 1.0347 0.4889 1.6302 0.7172 -1.2075 0.6715
>> x = randn(9);
>> imagesc(x)
>> imagesc(MirrorImageData(x))
No comments:
Post a Comment