我目前正致力于图像处理,并希望生成椭圆抛物面水平集功能
方程式如下:
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 < / strong>且小于 0 在轮廓内,反之亦然。级别集的零级轮廓是值 0 的位置。
我查了一下:
>> min(I(:))
ans =
2.0000
>> max(I(:))
ans =
3.2768e+04
很明显,这不是一个水平集。
请澄清以下几点 我的方程式错了吗? 2.我的代码错了吗?
任何建议都会有所帮助。