如何找到圆的直径

时间:2016-06-19 12:05:15

标签: c++ opencv image-processing geometry

我有一个圆圈的图像,但我的圆圈并不完美 首先我找到了过渡坐标 Detecting Circles without using Hough Circles 而且ı使用这个公式https://math.stackexchange.com/questions/675203/calculating-centre-of-rotation-given-point-coordinates-at-different-positions/1414344#1414344 最后,我有最长和最短的四个半径 现在我有这个图像: enter image description here

BUt他们是半径我需要找到直径如何从图像中找到直径? 或者如何在圆圈中找到相互/对称/点

2 个答案:

答案 0 :(得分:2)

对于这张图片,提到的方法是矫枉过正。只需找到非黑色像素的边界框。由于采样伪像,水平和垂直边长可能相差一或两个像素。

如果我是对的,外圈是277 x 273像素。如果你认为差异是显着的,那么这是一个椭圆,而不是一个圆圈。

答案 1 :(得分:0)

3种方法:

  1. 我认为你需要从图像中测量它: 所以使用边缘检测(蓝色线宽从左到右= 蓝色像素边界框的宽度)然后计算像素。
    如果您需要,然后转换为您想要的任何单位英寸(使用每英寸像素数) 如果您的圆圈不是完美的圆形(拉伸)测量,那么您也可以找到它的偏差。

  2. 还有另一种名为蒙特卡罗方法的方法: 首先生成随机xy(内部正方形)然后评估该点(x, y)是否在圆圈内并计算内部出现次数,然后您可以计算圆的面积使用内部count/total的比率(因此直径)。

  3. 不使用随机数:
    填充(颜色)圈内,然后简单地计数黑色像素这是=圈外的区域=>总面积(正方形面积) - 黑色像素面积= 圆形面积 =>计算直径。