-2

X、Y座標に回転行列を適用し、それをmatlabでメッシュとしてプロットすることにより、ガウスの導関数(または元のガウス)を回転させようとしていますが、問題が発生していますプロットは毎回 90 度だけ回転し、すべての n*pi ポイントに対してメッシュはまったく表示されません。私は何が間違っているのか疑問に思っています。誰かが私のエラーを見つけてくれることを願っています。私は matlab にかなり慣れていないので、コードがきれいでない場合はご容赦ください。ありがとうございました!

これは私が持っているコードです:

sigma = 4;
[x,y] = deal(-3*sigma:.5:3*sigma);
[X,Y] = meshgrid(x,y);
B = [transpose(x) transpose(y)];

for i=1:1:16
figure(i);
theta = i*pi/8;
rotation = [cos(theta) sin(theta); -sin(theta) cos(theta)];
A = B * rotation;
[x_new, y_new] = meshgrid(A(:,1)', A(:,2)');
mesh(x_new, y_new, dgauss_x(x_new, y_new, sigma));
end

function f = dgauss_x(x, y, sigma)
%first order derivative of Gaussian
f = -x .* gaussian(x, y, sigma) ./ sigma^2;

function f = gaussian(x, y, sigma)
f = exp(-(x .^ 2 + y .^ 2)/(2*sigma^2)) / (sqrt(2*pi*(sigma^2)));
4

1 に答える 1

0

私はそれを理解します。ばかげたエラーでした。基本的に、X と Y のメッシュ グリッドを作成し、それを X と Y の Nx2 マトリックスに再形成する必要がありました。回転マトリックスを適用し、再形成してガウス分布を適用します。コードは次のようになります (クリーンアップできます)。

for i=1:1:16
figure(i);
theta = i*pi/8;
rotation = [cos(theta) -sin(theta); sin(theta) cos(theta)];
X1 = reshape(X, length(x)*length(x), 1);
Y1 = reshape(Y, length(y)*length(y), 1);
B2 = [X1 Y1];
A = B2 * rotation;
X1 = A(:,1);
X1 = reshape(X1, length(x), length(x));
Y1 = A(:,2);
Y1 = reshape(Y1, length(y), length(y));
mesh(X1, Y1, dgauss_x(X1, Y1, sigma));
end
于 2013-10-25T14:44:19.443 に答える