旋转高斯函数 - matlab

pow*_*er2 1 matlab gaussian

再会,

我有拉伸和旋转高斯二维 pdf 的代码,如下所示:

mu = [0 0];

Sigma = [1 0; 0 1];
Scale = [3 0; 0 1];
Theta = 10;
Rotate = [cosd(Theta) -sind(Theta); sind(Theta) cosd(Theta)];
Sigma = (Sigma*Scale)*Rotate

x1 = -100:1:100; x2 = -100:1:100;
[X1,X2] = meshgrid(x1,x2);
F = mvnpdf([X1(:) X2(:)],mu,Sigma);
F = reshape(F,length(x2),length(x1));

imshow(F*255)
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我将 Theta 更改为 0 以外的值时,它表示 SIGMA 必须是方形、对称、正定矩阵。我可以知道发生了什么事吗

ray*_*ica 5

如果您查阅维基百科上有关高斯二维 PDF 的一般椭圆版本的文章,您似乎没有正确旋转它。一般来说,方程是:

资料来源:维基百科

在哪里:

通常,A = 1我们将在这里采用它。该角度theta将使 PDF 逆时针旋转,因此我们可以在 上使用该方程的原始形式mvnpdf。使用您的定义和常量,它会变成这样:

x1 = -100:1:100; x2 = -100:1:100;
[X1,X2] = meshgrid(X1, X2);
sigma1 = 1;
sigma2 = 1;
scale1 = 3;
scale2 = 1;
sigma1 = scale1*sigma1;
sigma2 = scale2*sigma2;
Theta = 10;

a = ((cosd(Theta)^2) / (2*sigma1^2)) + ((sind(Theta)^2) / (2*sigma2^2));
b = -((sind(2*Theta)) / (4*sigma1^2)) + ((sind(2*Theta)) / (4*sigma2^2));
c = ((sind(Theta)^2) / (2*sigma1^2)) + ((cosd(Theta)^2) / (2*sigma2^2));

mu = [0 0];
A = 1;
F = A*exp(-(a*(X1 - mu(1)).^2 + 2*b*(X1 - mu(1)).*(X2 - mu(2)) + c*(X2 - mu(2)).^2));
imshow(F*255);
Run Code Online (Sandbox Code Playgroud)