opencv里面霍夫圆变换只能找圆吗,椭圆该怎么找,请老师们指点一下

u010947001 2015-05-25 07:32:36
像下面这张图,我拍的时候有一定角度,它变成了椭圆,我试过用霍夫圆变换去找,但我发现同心圆一个都找不到,
参数改了很多遍,试了很多还是三个圆里面一个都找不出来,霍夫圆变换是不是只能找圆,偏一点成椭圆都不行,那我该
如何找下面的三个同心圆,请老师们指导一下行吗

...全文
10369 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jackery_Shh 2018-01-11
  • 打赏
  • 举报
回复
谢谢各位,上面的回答确实有问题;误导了大家,抱歉;上面的图,确实有问题;在此纠正一下;其实如果能够检测出点,找椭圆圆心,就不是问题了,最直接的方式,就是直接计算椭圆圆形两点间的最大值;取当最大值时候两点的中心,就是椭圆圆心吧,很久不做这一块了,谢谢大家的纠正!!!!!!
weixin_40744076 2017-10-23
  • 打赏
  • 举报
回复
引用 楼主 u010947001 的回复:
像下面这张图,我拍的时候有一定角度,它变成了椭圆,我试过用霍夫圆变换去找,但我发现同心圆一个都找不到, 参数改了很多遍,试了很多还是三个圆里面一个都找不出来,霍夫圆变换是不是只能找圆,偏一点成椭圆都不行,那我该 如何找下面的三个同心圆,请老师们指导一下行吗
请问楼主是如何实现圆检测的
xjtuyin 2017-07-27
  • 打赏
  • 举报
回复
如果循环的话,可以嵌套循环,先找出每一个点距离最大的点,记录对应的坐标点和距离,然后在找出所有距离里面最大的,以及其对应的两个点,就可以求出中心了。
Jackery_Shh 2017-07-11
  • 打赏
  • 举报
回复
@asonle,同学你好,有什么问题,你可以说出来。不要进行人身攻击。这对自己的技术提升毫无意义。
Kaam 2017-07-02
  • 打赏
  • 举报
回复
引用 5 楼 gggg_ggg 的回复:
如你所说,如果你找到圆的大概轮廓,提取了圆的边缘点,暂且假设圆边缘点放在容器vector<point>中,如图所以: 红色矩形代表源图像,椭圆代表已提取到的边缘点。随机找一点A,然后利用一个循环,计算出距离A的最大距离的点A'。同理可以计算出距离B点最大距离的B'点。这样你可以拟合出两条直线,求出交点就是所在位置O,此处不论是椭圆还是标准圆都适用!
误人子弟,不要瞎讲好不好,距离A点最远的点是A'???你求证好了再说
u010947001 2015-05-30
  • 打赏
  • 举报
回复
@Jackery_Shh 谢谢老师的指导,学习了
Jackery_Shh 2015-05-29
  • 打赏
  • 举报
回复

如你所说,如果你找到圆的大概轮廓,提取了圆的边缘点,暂且假设圆边缘点放在容器vector<point>中,如图所以:

红色矩形代表源图像,椭圆代表已提取到的边缘点。随机找一点A,然后利用一个循环,计算出距离A的最大距离的点A'。同理可以计算出距离B点最大距离的B'点。这样你可以拟合出两条直线,求出交点就是所在位置O,此处不论是椭圆还是标准圆都适用!
u010947001 2015-05-29
  • 打赏
  • 举报
回复
@Jackery_Shh 谢谢老师,能再问一个问题么,假如我边缘检测做的比较好,找到圆的大概轮廓,但是我还没想到如何从这个边缘去找圆心,以前我是考虑霍夫圆,因为它能找到圆心,但是这不是个标准园,该如何找圆心呢?能再指导下么,真是不好意思了
u010947001 2015-05-26
  • 打赏
  • 举报
回复
@Jackery_Shh 谢谢老师,也就是说霍夫圆只能找标准圆?像我这种拍摄角度造成不是标准圆的问题,该如何去找同心圆的圆心好呢?我这里做同心圆是为了找共同圆心,防止一个找不到还有另外一个,保证圆心是找到的,能指点我一下吗
Jackery_Shh 2015-05-26
  • 打赏
  • 举报
回复
[b][b]建议你去OpenCV官方网站先弄明白HoughCircles()的实现原理,这样你才会明白你的问题所在: 首先,在霍夫梯度法中,使用Sobel导数来计算局部梯度,那么随之而来的假设是,其可以视作等同于一条局部切线,并这个不是一个数值稳定的做法。在大多数情况下,这样做会得到正确的结果,但或许会在输出中产生一些噪声。 其实,在边缘图像中的整个非0像素集被看做每个中心的候选部分。因此,如果把累加器的阈值设置偏低,算法将要消耗比较长的时间。第三,因为每一个中心只选择一个圆,如果有同心圆,就只能选择其中的一个;根据你所给图像,最外层圆的边缘被杂草覆盖,这导致最外边的那个同心圆边缘检测failed;对于中间那个同心圆,由于拍摄角度问题,图中圆不是标准的圆,所以也导致中间那个同心圆检测错误。 最关键的是,因为中心是按照其关联的累加器值的升序排列的,并且如果新的中心过于接近之前已经接受的中心的话,就不会被保留下来。且当有许多同心圆或者是近似的同心圆时,霍夫梯度法的倾向是保留最大的一个圆,这是你检测失败的原因。可以说这是一种比较极端的做法,因为在这里默认Sobel导数会产生噪声,若是对于无穷分辨率的平滑图像而言的话,这才是必须的。 基于以上原因,霍夫曼圆算法不适合你的图像,即使你所拍图像中的圆是标准的圆,由于其边缘被遮挡,对最外层的同心圆检测也会是失败的。
Jackery_Shh 2015-05-26
  • 打赏
  • 举报
回复
建议你还是按照边缘检测 >>获取边缘,然后对图像进行分割后,识别出image中的圆,然后应该可以找到圆心。由于不知道你的具体要求,只是说大体上我的思路,不一定合适你所做的项目。开始的提取边缘的算法很重要,你可以研究一下,哪个算法适合你的图像,能够精确求出你说需要的结果,这是需要你去做的

4,445

社区成员

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

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