Matlab 椭圆抛物面水平集函数的生成
我目前正在从事图像处理工作,希望生成一个椭圆抛物面水平集函数 方程式如下所示:Matlab 椭圆抛物面水平集函数的生成,matlab,image-processing,Matlab,Image Processing,我目前正在从事图像处理工作,希望生成一个椭圆抛物面水平集函数 方程式如下所示: P(x;y;x0;y0;z0;theta;ro) = xm^2 +ro*ym^2 + z0; where, xm = (x-x0)*cos(theta) - (y-y0)*sin(theta); ym = (x-x0)*sin(theta) + (y-y0)*sin(theta); 如何生成这种级别集 我所做的编程如下: clc;clear all;close all; x0 = 0; y0 = 0; z0 = 0
P(x;y;x0;y0;z0;theta;ro) = xm^2 +ro*ym^2 + z0;
where,
xm = (x-x0)*cos(theta) - (y-y0)*sin(theta);
ym = (x-x0)*sin(theta) + (y-y0)*sin(theta);
如何生成这种级别集
我所做的编程如下:
clc;clear all;close all;
x0 = 0;
y0 = 0;
z0 = 0;
theta = pi/4;
ro = 1;
tic
I = ones(128,128);
for i=1:128
for j=1:128
xm = (i-x0).*cos(theta) - (j-y0).*sin(theta);
ym = (i-x0).*sin(theta) + (j-y0).*sin(theta);
I(i,j) = xm^2 + ro.*(ym^2) + z0;
end
end
toc
contour(I,'DisplayName','I');figure(gcf)
我得到的轮廓是:
我所困惑的是:-我知道水平集是这样创建的:在水平集之外,值应该大于轮廓内的0,小于轮廓内的0,反之亦然。水平集的零水平轮廓是值为0的位置
我检查了这个:
>> min(I(:))
ans =
2.0000
>> max(I(:))
ans =
3.2768e+04
很明显,这不是一个水平集
请澄清以下几点
1.我的方程式错了吗?
2.我的代码错了吗
任何建议都会很有帮助。我正在试图理解你所说的水平是什么意思。轮廓函数的级别来自于函数的值(在您的例子中是I),并且函数中没有非正值。级别集是一个数学工具或函数,用于演化轮廓曲面。例如,二维演化轮廓嵌入到称为水平集的高维(3D)中。这个水平集现在由数学方程演变而来。横截面平面可以在任意高度切割,以在任意时间t给出演化轮廓。我希望我现在明白了。请考虑一下这些链接。