实现动态描画圆的问题

sosoben 2012-09-21 08:07:17
现在已有另外一个过程帮我不断地获取一些坐标点(基本上是在一个圆周上,但有时可能有错误的点)

现在我想每隔N个点就用这N个点计算它们围成的圆的圆心座标位置,并排除一些偏移太大的点,求算法,有程序函数的加分!!

再理想点,其实我想获取N+1个点后 , 第一个点的数据自动排除,在从2到N+1计算,如此类推,就像一个先入先出的队列
...全文
212 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
sosoben 2012-09-25
  • 打赏
  • 举报
回复
最后一顶 没有更好的设想就结了 抓紧机会哦
sosoben 2012-09-24
  • 打赏
  • 举报
回复
是啊,我在收集多方意见啊,其实我自己也有想法的啊,我现在二值化是左右X个像素与中间像素差异较大的时候才变为白色,可以简单地把背景的光斑去掉
Trent1985 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

引用 17 楼 的回复:

引用 16 楼 的回复:

引用 15 楼 的回复:
上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点……
[/Quote]
如果你想通过CSDN提问的方式就搞出来一个很实用很N的算法来,这个未免对工作有点太不负责任,对CSDN有点期望过高了,一个复杂的算法,不是一言一行就可以搞出来的,你要多看技术论文,结合实践才行!
Trent1985 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

引用 17 楼 的回复:

引用 16 楼 的回复:

引用 15 楼 的回复:
上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点……
[/Quote]对于视频监控之类而言,背景维护是一个相当重要的难题,你可以在谷歌学术上搜一下,肯定是一大堆!
Trent1985 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

引用 17 楼 的回复:

引用 16 楼 的回复:

引用 15 楼 的回复:
上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点……
[/Quote]高斯分布在你这里应该是对监控区域背景进行建模用的吧,相关性系数一般是用来计算图像相似程度的!
sosoben 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

引用 16 楼 的回复:

引用 15 楼 的回复:
上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点的位置,就是你要找的圆心位置;
……
[/Quote]

主要是我现在接触到的日本人的代码实在太复杂了(什么高斯分布啊,Cramer法则啊,相关系数啊),如果我想得太简单,那显得太弱了
对于实际应用也不够通用性,对于每个图像要重新设计算法…………

Trent1985 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

引用 15 楼 的回复:
上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点的位置,就是你要找的圆心位置;
5,如果你有几个点的误差,那么求和……
[/Quote]呵呵,楼主这么爱学,顶一个!
sosoben 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点的位置,就是你要找的圆心位置;
5,如果你有几个点的误差,那么求和之后完全不影响结果,而黄色区域的……
[/Quote]
1、如果干扰点偏离得比较远,那画的红色矩形会比较大,黄色矩形也必然画错了啊
2、根据微积分,圆内任一点到圆周各点距离之和都相等,等于圆的面积吧。
但是,这的确可以排除偏离于圆外的干扰点

我现在是打算用三点求圆心的数学方法来求圆心,每三点求一次圆心后,用你的方法排除干扰点

如果没有更新的回答,那就要结贴了~~~
sosoben 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]

引用 18 楼 的回复:

高斯分布在你这里应该是对监控区域背景进行建模用的吧,相关性系数一般是用来计算图像相似程度的!

[/Quote]

其实也是为了找光点用的,因为通过聚焦得到的图像的线条从清晰到不清晰基本上合乎高斯分布,即正态分布 相关我就不清楚,从那里开始看不明白了
sosoben 2012-09-22
  • 打赏
  • 举报
回复
突然想到, n个点求平均之后,还是不能把偏离得比较大的点给找出来啊,求算法!!
Trent1985 2012-09-22
  • 打赏
  • 举报
回复

上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点的位置,就是你要找的圆心位置;
5,如果你有几个点的误差,那么求和之后完全不影响结果,而黄色区域的选择则是为了减少计算量!!
Trent1985 2012-09-22
  • 打赏
  • 举报
回复
这个太简单了 !!!
sosoben 2012-09-21
  • 打赏
  • 举报
回复
难点那里可以加分啊!! 设各点坐标x1,y1 ………… xn,yn
求近似圆的圆心。有点像最小二乘法求一条直线与各点相关,但现在是求一个圆啊
sosoben 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

偏移太大的点 就是与其他正常的点组成的圆的距离相差太大 设阈值为 R吧 大于R就不行

我是要先把N个点的大致圆心求出来? (这是重点,也是我最想问的)
然后比较有没有点离这圆心的距离大于R?有就移除 得到N-1个点再计算
循环上面的步骤
得出最后圆心?

这样的思路正确吗??
[/Quote]

我是要先把N个点的大致圆心求出来? (这是重点,也是我最想问的)

怎么求啊??
美丽的鸡翅膀 2012-09-21
  • 打赏
  • 举报
回复
你去看了就知道,List功能强大但是占用内存多谢,而IList功能稍弱,程序要求不高的话用List<>就好
sosoben 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:
IList<Point> listpoint = new IList<Point>();
怎么我这句就有错误呢?
无法创建抽象类或接口“System.Collections.Generic.IList<System.Drawing.……

应该为IList<Point> listpoint = new List<Point>();
百度一下IList<>和……
[/Quote]

那对于我这个程序, 用
IList<Point> listpoint = new List<Point>(); 还是
List<Point > listpoints = new List <Point >();
更有效率呢? 我知道最终结果都一样Ilist只是个接口,实际都是list
美丽的鸡翅膀 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
IList<Point> listpoint = new IList<Point>();
怎么我这句就有错误呢?
无法创建抽象类或接口“System.Collections.Generic.IList<System.Drawing.……
[/Quote]
应该为IList<Point> listpoint = new List<Point>();
百度一下IList<>和List的区别,你就明白了
http://wenku.baidu.com/view/523d73355a8102d276a22f64.html
sosoben 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

什么叫偏大的点,拟制定好一个标准,自己删除就是了
数据放到列表中,如果到了N个,那么来一个就RemoveAt(0)
[/Quote]
IList<Point> listpoint = new IList<Point>();
怎么我这句就有错误呢?
无法创建抽象类或接口“System.Collections.Generic.IList<System.Drawing.Point>”的实例
sosoben 2012-09-21
  • 打赏
  • 举报
回复
偏移太大的点 就是与其他正常的点组成的圆的距离相差太大 设阈值为 R吧 大于R就不行

我是要先把N个点的大致圆心求出来? (这是重点,也是我最想问的)
然后比较有没有点离这圆心的距离大于R?有就移除 得到N-1个点再计算
循环上面的步骤
得出最后圆心?

这样的思路正确吗??
bdmh 2012-09-21
  • 打赏
  • 举报
回复
什么叫偏大的点,拟制定好一个标准,自己删除就是了
数据放到列表中,如果到了N个,那么来一个就RemoveAt(0)
加载更多回复(2)

110,822

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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