Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 椭圆抛物面水平集函数的生成_Matlab_Image Processing - Fatal编程技术网

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给出演化轮廓。我希望我现在明白了。请考虑一下这些链接。