【问题标题】:Python: Return position and size of arbitrary/teeth shapes in image using OpenCVPython:使用 OpenCV 返回图像中任意/牙齿形状的位置和大小
【发布时间】:2020-03-01 09:42:47
【问题描述】:

我对图像处理和对象检测非常陌生。我想提取/识别下图中牙齿的位置和尺寸:

这是我迄今为止使用 OpenCV 尝试过的:

import cv2
import numpy as np

planets = cv2.imread('model.png', 0)
canny = cv2.Canny(planets, 70, 150)
circles = cv2.HoughCircles(canny,cv2.HOUGH_GRADIENT,1,40, param1=10,param2=16,minRadius=10,maxRadius=80)

circles = np.uint16(np.around(circles))

for i in circles[0,:]:
   # draw the outer circle
   cv2.circle(planets,(i[0],i[1]),i[2],(255,0,0),2)

   # draw the center of the circle
   cv2.circle(planets,(i[0],i[1]),2,(255,0,0),3)

cv2.imshow("HoughCirlces", planets)
cv2.waitKey()
cv2.destroyAllWindows()

这是我应用精明过滤器后得到的:

这是最终结果:

我不知道从这里去哪里。我想把所有的牙齿都鉴定出来。我该怎么做?

非常感谢任何帮助..

【问题讨论】:

    标签: python opencv image-processing object-detection scikit-image


    【解决方案1】:

    请注意,牙齿结构或多或少是抛物线(倒置)。如果您能以某种方式猜测定义这些斑点(牙齿)质心的抛物线形状,那么您的问题可以在合理的程度上简化。我展示了一条穿过牙齿中心的红线。

    我建议您按以下方式处理它:

    1. 二值化您的图像(背景=0,否则为 1)。你可以使用sklearn.preprocessing.binarize
    2. 计算所有非零像素的质心。这是图像中的中心蓝色圆圈。打电话给structure_centroid。看到这个:How to center the nonzero values within 2D numpy array?
    3. 制作整个图像的极坐标切片,以structure_centroid 的位置为中心。我已经展示了这种极片的卡通图像(三角形半透明)。覆盖完整的 360 度。看到这个:polarTransform library
    4. 确定每个极坐标切片的非零像素的质心位置。见这些:
    5. 包含这些质心的阵列为您提供牙齿平均位置的轨迹(路径)。打电话给centroid_path
    6. 对您能够检测到的最接近centroid_path 的圆圈运行消除/选择算法。使用阈值距离删除异常值。

    这应该可以让您很好地近似牙齿与圆圈。

    我希望这会有所帮助。

    【讨论】:

    • 可以给我一个代码示例吗?我还是新手..谢谢
    • 对不起,这些是步骤,我只能在这里给你。但是我为您制定的步骤,您可以处理其中的每一个,并且应该能够在 stackoverflow 上找到现有的解决方案(很可能)。但像这样的解决方案可能需要几个小时。所以,一切顺利。如果您不熟悉OpenCV,您可能还需要考虑使用skimage。另一个您会发现有用的库是 sklearn(也许:取决于用例)。
    • @SolidSnake 好的。我添加了更多链接,为您指出每个步骤可能存在的解决方案。但坦率地说,这可能是一个不错的项目,可能需要时间。在我看来,这超出了 stackoverflow 答案的范围。最好的。
    • @SolidSnake 如果您认为这个想法/答案有帮助,请考虑 upvoting 和/或 accepting。谢谢。
    • 我已尝试听从您的建议,但不幸的是,我无处可去。由于牙齿的形状不一致,因此没有明显的答案。此外,当我将图像转换为二进制/阈值或使用其他技术(如精明或边缘)时,大多数时候形状是不完整的,因此它们看起来不像完整的圆形/斑点形状。我尝试使用轮廓和凸包来检测这些形状,但它们总是返回不完整的结果。我想知道有没有办法检测这些不完整的形状?
    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2019-08-12
    • 2018-10-07
    相关资源
    最近更新 更多