2015-03-06 2 views
1

Я пытаюсь построить серию эллипсов на Matlab. В основном у меня есть микроскопическая картина, и я обрабатываю ее с помощью ImageJ, чтобы получить серию данных (площадь, центральная, основная и малая оси) для каждого эллипса. Я пытаюсь повторить эти эллипсы на Matlab, чтобы добавить градиентный цвет, чтобы отобразить изображение, чтобы я мог рассказать по эллипсу, в каком направлении находится волокно. Это мой кодНарисовать потянутые эллипсы на Matlab

clearvars -except data colheaders %Clear everything but the original data 

data(:,9)=data(:,9)*pi/180; %Transform my 9th colomn (rotation angle) in rad 
data(:,6)=1196-data(:,6); %Recalibrate the y axis (different coordinate system) 

for i=1:29 %29 ellipses to plot 
theta = 0 : 0.01 : 2*pi; 
x = data(i,7)/2 * cos(theta) * cos(data(i,9)) - data(i,8)/2 * sin(theta) * sin(data(i,9)) + data(i,5); 
y = data(i,7)/2 * sin(theta) * cos(data(i,9)) + data(i,8)/2 * cos(theta) * sin(data(i,9)) + data(i,6); 
plot(x, y, 'LineWidth', 1); 
hold on 
end 
% Columns (5,6) are the centre (x,y) of the ellipse 
% Columns (7,8) are the major and minor axes (a,b) 
% Column 9 is the rotation angle with the x axis 

axis equal; % Keep axis same size as sample picture 
xlim([0 1592]); 
ylim([0 1196]); 
grid on; 

Я могу отправить картинку на приватное, кажется, они не позволяют мне загружать ее. Но я получаю круги в нужном месте вместо эллипсов. Правильно ли мои уравнения? Лучший Dorian

+0

Какая у вас конкретная проблема? –

ответ

1

Вы на самом деле довольно близко; вы сделали небольшую ошибку в определении значения x и просто должны поменять data(i,8) на data(i,7).

т.е. изменить эту строку:

x = data(i,7)/2 * cos(theta) * cos(data(i,9)) - data(i,8)/2 * sin(theta) * sin(data(i,9)) + data(i,5); 

для этого один:

x = data(i,8)/2 * cos(theta) * cos(data(i,9)) - data(i,7)/2 * sin(theta) * sin(data(i,9)) + data(i,5); 

Вот тест с фиктивными данными:

clear 
clc 

%// Define dummy data 
data = zeros(4,9); 

data(:,5) = [1 ;2 ;3; 4]; 
data(:,6) = [1; 2 ;3; 4]; 
data(:,7) = [6 ;7;8;9]; 
data(:,8) = [2;3;4;5]; 

data(:,9) = [10;30;45;90]; 

data(:,9)=data(:,9)*pi/180; 

%// You can put that outside the loop. 
theta = 0 : 0.01 : 2*pi; 

hold all 
for i=1:size(data,1) 

x = data(i,8)/2 * cos(theta) * cos(data(i,9)) - data(i,7)/2 * sin(theta) * sin(data(i,9)) + data(i,5); 
y = data(i,7)/2 * sin(theta) * cos(data(i,9)) + data(i,8)/2 * cos(theta) * sin(data(i,9)) + data(i,6); 


plot(x, y, 'LineWidth', 1); 

%// NEW to add text 
text(data(i,5),data(i,6),['Ellipse' num2str(i)],'Color',rand(1,3)) 


end 
axis equal; 
grid on; 

Выход:

enter image description here

yay!

EDIT:

Я добавил строку кода для обозначения эллипсы с текстом. Я использую случайные цвета и размещаю текст в центре эллипса, но вы можете изменить его так, как вам нравится, чтобы он соответствовал цвету каждого эллипса.