MATLAB: Am I unable to rotate an image object using the HGTRANSFORM function in MATLAB 7.0 (R14)

Image Processing Toolboxpicturerotaterotationtransformtransformation

I create an image in an hgtransform object. When I try to rotate the hgtransform object 90 degrees, I expect the image to rotate 90 degrees. Instead of rotating, the image is distorted as it translates across the axes. The following code reproduces the issue:
load clown
a = axes('XLim',[-150 150],'YLim',[-150 150]);
h = hgtransform('Parent',a);
colormap(map)
image('CData',X, ...
'Parent',h, ...
'XData',[0 100], ...
'YData',[100 0]);
for r = 0:1:90
T = makehgtform('zrotate',r*pi/180);
set(h,'Matrix',T);
pause(0.1);
drawnow
end

Best Answer

This enhancement has been incorporated in Release 2006a (R2006a). For previous product releases, read below for any possible workarounds:
Documentation on the HGTRANSFORM function is missing the following information:
The object within the hgtransform needs to be a true 3-dimensional object for the rotation transform to produce the desired effect. The image is not a true 3-dimensional object. If a 3-dimensional transform is applied, the image is resized to fit a 2-dimensional projection of the hgtransform.
Only a true 3-dimensional object (i.e. a surface object) can be transformed correctly in a hgtransform object:
load clown
a = axes('XLim',[-150 150],'YLim',[-150 150]);
h = hgtransform('Parent',a);
colormap(map)
surface(ones(100),flipud(X),...
'FaceColor','texturemap',...
'EdgeColor','none',...
'CDataMapping','direct',...
'Parent', h)
for r = 0:1:90
T = makehgtform('zrotate',r*pi/180);
set(h,'Matrix',T);
pause(0.1);
drawnow
end