1

Matlab で一連の楕円をプロットしようとしています。基本的に、私は顕微鏡写真を持っており、それを ImageJ で処理して、各楕円の一連のデータ (面積、中心、長軸、短軸) を取得します。これらの楕円を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;

プライベートで写真を送ることはできますが、アップロードは許可されていないようです。しかし、楕円ではなく適切な場所に円が表示されます。私の方程式は正しいですか?最高のドリアン

4

1 に答える 1

1

あなたは実際にはかなり近いです。data(i,8)x 値の定義に小さな誤りがあり、単純に と交換する必要があり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;

出力:

ここに画像の説明を入力

わーい!

編集:

楕円にテキストでラベルを付けるコード行を追加しました。ランダムな色を使用し、テキストを楕円の中心に配置しますが、各楕円の色に合わせて好きなように変更できます。

于 2015-03-06T16:06:16.290 に答える