2017-02-26 77 views
0

我正在尝试旋转一个名为axes1的整个轴。在Matlab指南中旋转整个轴

   imr=imrotate(img,30); 
       axes(this.gui_h.axes1); 
       imshow(imr,'Parent',this.gui_h.axes1); 

上面的代码启动30度的旋转。但是,图像是旋转的,但不是整个轴1。我已经测试了诸如rotate3D之类的指南工具,但是rotate3D无法成功地用于2D图像。我也试过set(handles.axes1,'Rotation',-25);,这没有效果。它只是忽略了陈述,并继续进行其他任务。有没有办法旋转整个轴?

+0

可以使用:'I = imrotate(frame2im(的getFrame(GCA)),30);',但是旋转只是可视的(结果是图像,而不是功能轴)。 – Rotem

+0

它似乎只是旋转轴而不是轴的图像。除此之外,图像被表示为具有黑色背景的白色正方形 – Sade

+0

我想旋转整个轴而不仅仅是轴内图像的原因是因为旋转轴不会在图像旋转时改变图像的大小。在一个轴上旋转图像会改变尺寸。如果有办法解决这个问题,它也可以是一个选项? – Sade

回答

2

可以使用view载体作用旋转轴。

imshow('Jupiter_New_Horizons.jpg') 
xlabel('X axis') 
ylabel('Y axis') 
camzoom(.8) 

% Rotate the axes changing the Azimuth value 
for i=0:-3:-180 
    view([i 90]); 
    pause(.3) 
end 

enter image description here

这也适用于标准样:

t=0:.1:2*pi; 
x=sin(t) 
plot(t,x); 
grid minor 
xlabel('X axis') 
ylabel('Y axis') 
camzoom(.8) 
for i=0:-3:-180 
    view([i 90]); 
    pause(.3) 
end 

enter image description here

编辑以下

我已经创建了一个评论简单的GUI具有两个axes和两个pushbutton具有以下tag

  • 轴#1:axes1
  • 轴#2:axes2
  • 按钮#1:pushbutton1
  • 按钮#2:pushbutton2

callback按钮1轴上加载图像1,转动轴。

的的callbackpushbutton2地块在axes2的曲线,所述转动轴。

的GUI工作正常,axers旋转预期。

这是GUI的.m;您可以测试它是如何创建GUI并使用上面指定的tag

function varargout = fbdfi(varargin) 
% FBDFI MATLAB code for fbdfi.fig 
%  FBDFI, by itself, creates a new FBDFI or raises the existing 
%  singleton*. 
% 
%  H = FBDFI returns the handle to a new FBDFI or the handle to 
%  the existing singleton*. 
% 
%  FBDFI('CALLBACK',hObject,eventData,handles,...) calls the local 
%  function named CALLBACK in FBDFI.M with the given input arguments. 
% 
%  FBDFI('Property','Value',...) creates a new FBDFI or raises the 
%  existing singleton*. Starting from the left, property value pairs are 
%  applied to the GUI before fbdfi_OpeningFcn gets called. An 
%  unrecognized property name or invalid value makes property application 
%  stop. All inputs are passed to fbdfi_OpeningFcn via varargin. 
% 
%  *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one 
%  instance to run (singleton)". 
% 
% See also: GUIDE, GUIDATA, GUIHANDLES 

% Edit the above text to modify the response to help fbdfi 

% Last Modified by GUIDE v2.5 26-Feb-2017 20:56:22 

% Begin initialization code - DO NOT EDIT 
gui_Singleton = 1; 
gui_State = struct('gui_Name',  mfilename, ... 
        'gui_Singleton', gui_Singleton, ... 
        'gui_OpeningFcn', @fbdfi_OpeningFcn, ... 
        'gui_OutputFcn', @fbdfi_OutputFcn, ... 
        'gui_LayoutFcn', [] , ... 
        'gui_Callback', []); 
if nargin && ischar(varargin{1}) 
    gui_State.gui_Callback = str2func(varargin{1}); 
end 

if nargout 
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 
else 
    gui_mainfcn(gui_State, varargin{:}); 
end 
% End initialization code - DO NOT EDIT 


% --- Executes just before fbdfi is made visible. 
function fbdfi_OpeningFcn(hObject, eventdata, handles, varargin) 
% This function has no output args, see OutputFcn. 
% hObject handle to figure 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
% varargin command line arguments to fbdfi (see VARARGIN) 

% Choose default command line output for fbdfi 
handles.output = hObject; 

% Update handles structure 
guidata(hObject, handles); 

% UIWAIT makes fbdfi wait for user response (see UIRESUME) 
% uiwait(handles.figure1); 


% --- Outputs from this function are returned to the command line. 
function varargout = fbdfi_OutputFcn(hObject, eventdata, handles) 
% varargout cell array for returning output args (see VARARGOUT); 
% hObject handle to figure 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

% Get default command line output from handles structure 
varargout{1} = handles.output; 


% --- Executes on button press in pushbutton1. 
function pushbutton1_Callback(hObject, eventdata, handles) 
% hObject handle to pushbutton1 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

imshow('Jupiter_New_Horizons.jpg','parent',handles.axes1) 
xlabel(handles.axes1,'X axis') 
ylabel(handles.axes1,'Y axis') 
camzoom(handles.axes1,.8) 

for i=0:-10:-180 
    view(handles.axes1,[i 90]); 
    pause(.3) 

end 

% --- Executes on button press in pushbutton2. 
function pushbutton2_Callback(hObject, eventdata, handles) 
% hObject handle to pushbutton2 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

t=0:.1:2*pi; 
x=sin(t) 
plot(handles.axes2,t,x); 
grid minor 
xlabel(handles.axes2,'X axis') 
ylabel(handles.axes2,'Y axis') 
camzoom(handles.axes2,.8) 
for i=0:-10:-180 
    view(handles.axes2,[i 90]); 
    pause(.3) 
end 

enter image description here

希望这有助于

Qapla”

+0

谢谢你它旋转。但是,我在图中显示了两个轴。 '[a,b] = uigetfile(['*。*','所有文件']); img = imread([b a]); (img) img = rgb2gray(img); imshow(img,'Parent',this.gui_h.axes1); camzoom(.8) %旋转轴改变方位角值 (i = 0:-3:-180) view([i 90]); 暂停(.3) 结束# – Sade

+0

代码旋转下一个没有图像的轴。当我尝试在axis2中加载图像时,它不加载。是否有一种方法来指定坐标轴,例如:handles.axes1或handles.axes2 – Sade

+0

您可以尝试在调用'view'时指定要旋转的轴的柄(例如'view(axes_handle,[i 90]) '。 –