等值线难题

速马 2005-04-22 12:27:51
第一次来这个版提问 :-)

我这有个项目的一个功能和等值线有关,除了需要绘制出等值线/等值面,还要能方便的求出平面上每个点的值

我现在有三种思路:
1、根据每个点的值,找到一个最接近的曲线方程,比如贝塞尔曲面
这样所有问题都不在话下
但是方程如何得到,关键是如何保证这个曲面经过每个控制点(这里需要的不仅仅是一条平滑的曲线)

2、在平面上作栅格,插值求出每个栅格顶点的值,再用二次或者三次样条插值
这样问题也都都能解决,平面上每个点的值可以通过找到栅格再求均值的方法求出
问题是平面上每个部分的精度要求并不一定一样,这样的方法可能会漏掉很多细节

3、按照传统的方法连接三角形,在其边找到等值点,再用二次或者三次样条插值
这样等值线可以绘制的很精确,程序实现也方便,但是如何求平面上任意点的值?

请达人指点一二。
...全文
308 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwu 2005-05-03
  • 打赏
  • 举报
回复
修改一句:
* 如果H的大小位于E的2个端点值之间,则在E上插入一个等于H的点
zzwu 2005-05-03
  • 打赏
  • 举报
回复
而你的情况由于数据由测量获得,没有覆盖整个平面区间而变得复杂化。

主要问题是如何寻找尽可能多的等值点来画出等位线。我想到的一个解决方案是:

-----------------------------------------------------------------
0. 利用已有数据的点集构作volonoi图;

1. 从已有数据,统计出值的大小分布;

2. 从最小值-最大值间,递增定出n个值:H1,H2,..Hn,

3. 令H=H1,构作H-等值线:
a) 从所有volonoi图的边E上,寻找值=H的点:
* 如果H间于E的2个端点值,则在E上插入一个等于H的点
* 否则就认为以H为高度的等位线不与E相交;
b) 利用上述大量H点,按照邻近相连原则,构作H-等位线

4. 对H2,H3,...Hn重复步骤3
---------------------------------------------------------------
zzwu 2005-05-03
  • 打赏
  • 举报
回复
而你的情况由于数据由测量获得,没有覆盖整个平面区间而变得复杂化。

主要问题是如何寻找尽可能多的等值点来画出等位线。我想到的一个解决方案是:

-----------------------------------------------------------------
0. 利用已有数据的点集构作volonoi图;

1. 从已有数据,统计出值的大小分布;

2. 从最小值-最大值间,递增定出n个值:H1,H2,..Hn,

3. 令H=H1,构作H-等值线:
a) 从所有volonoi图的边E上,寻找值=H的点:
* 如果H间于E的2个端点值,则在E上插入一个等于H的点
* 否则就认为以H为高度的等位线不与E相交;
b) 利用上述大量H点,按照邻近相连原则,构作H-等位线

4. 对H2,H3,...Hn重复步骤3
---------------------------------------------------------------
zzwu 2005-05-03
  • 打赏
  • 举报
回复
通常,为了画n个等值(等位,等高)线,简单的做法是

1. 扫描一次图像,统计出值的分布,
2. 从最小值-最大值间,递增定出n个值:H1,H2,..Hn,
3. 以H=H1为阈值,用跟踪法扫描整个平面上,
立刻可以搜索出所有H1,并得到以H1为相同值的所有等位线。
4. 对H2,H3,...Hn重复步骤3。
syy64 2005-05-02
  • 打赏
  • 举报
回复
有了三角形,三角形的三个顶点可以决定一个空间平面,空间平面的坐标应该很容易求啊;
如果用opengl看看帖子:
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=199172
速马 2005-04-30
  • 打赏
  • 举报
回复
楼上的cool~
蒋晟 2005-04-30
  • 打赏
  • 举报
回复
《计算机应用》2005年第4期 三维空间散乱点集快速曲面重建的研究与实现
蒋晟 2005-04-30
  • 打赏
  • 举报
回复
http://www.gotoread.com/2002/mymag/article.asp?NewID=0465579C-CF11-4533-8A56-992EBCD78C05
stonesky 2005-04-26
  • 打赏
  • 举报
回复
是做三维图形处理吗?那我介绍的“蛛网”不合适,好像OpenGL有相关的东东,不过我不熟悉
Xcoder 2005-04-26
  • 打赏
  • 举报
回复
这东西matlab就能做,搜曲面拟合也会有好多资料的。
速马 2005-04-24
  • 打赏
  • 举报
回复
>>> 如果已经有了每一点代表高度的灰阶图,为什么还有"求平面上每个点的值"的问题

因为给的点只是一些实际测量值,不可能覆盖所有平面的点的
速马 2005-04-24
  • 打赏
  • 举报
回复
多谢二位回复
原始数据可以看作一个三维坐标数组

我现在也觉得求出曲面方程的难度可能太大,基本上放弃了
也多谢stonesky(流星雨)的建议,但是搞成蛛网的样子可能不太好吧...

顺便问一下,opengl和d3d有没有内置的相关功能?客户说原来的系统是opengl做的很方便,但是我没有查到相关的api
zzwu 2005-04-24
  • 打赏
  • 举报
回复
如果已经有了每一点代表高度的灰阶图,为什么还有"求平面上每个点的值"的问题?
zzwu 2005-04-24
  • 打赏
  • 举报
回复
是一个每一点代表高度的灰阶图像吗?
zzwu 2005-04-24
  • 打赏
  • 举报
回复
原始数据是什么? 是一个像吗?
stonesky 2005-04-22
  • 打赏
  • 举报
回复
刚才那方法可能不适合你,你还是把问题尽可能说具体一点

你列出的三个方法中,1是不可行的,除非等值线本来就是某曲线,或近似某曲线,而且计算量很大
2 是可行的,但是要找一种做栅格的方法
3 计算量很大
stonesky 2005-04-22
  • 打赏
  • 举报
回复
这个合适
“在平面上作栅格,插值求出每个栅格顶点的值,再用二次或者三次样条插值
这样问题也都都能解决,平面上每个点的值可以通过找到栅格再求均值的方法求出”

如果外边界等值,只有一个极点的话,且一阶导连续,可以用这种方法:
栅格的生成方法:外边界、中间极值点或曲线,作为栅格的边界。从内边界到外边界连接N条径向线,取径向线的10%距离(或其他值),连接成一条周线,再取90%连接周线。迭代计算,使得径向线和生成的两条周线夹角近似90度,大约迭代几次就够了,再通过简单差值可以绘制整个栅格。
那么周向线就是等值线,径向线就是梯度线,精度完全可以满足你的要求
zhang_jiang 2005-04-22
  • 打赏
  • 举报
回复
如果是画出等值线的话, 等值线的位置至少有一个像素的偏差.

设等值线画在值为:[x(1), x(2), x(3), ...]处
那么可以这样, 遍历平面, 对于每个像素判断:
它的左边或上面的点是否处于[x(i), x(i+1)], 而它自身的值在[x(i+1), x(i+2)]之间.
当然反过来也是一样. 若答案是肯定的, 则这个点处在等值线上.

4,449

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧