Python:使用OpenCV返回图像中任意/齿形的位置和大小
我对图像处理和目标检测非常陌生。我想提取/识别下图中牙齿的位置和尺寸: 以下是我迄今为止使用OpenCV所做的尝试:Python:使用OpenCV返回图像中任意/齿形的位置和大小,python,opencv,image-processing,object-detection,scikit-image,Python,Opencv,Image Processing,Object Detection,Scikit Image,我对图像处理和目标检测非常陌生。我想提取/识别下图中牙齿的位置和尺寸: 以下是我迄今为止使用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,minRadiu
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()
这是我应用canny过滤器后得到的结果:
这是最终结果:
我不知道从这里到哪里去。我想确认一下所有的牙齿。我该怎么做
非常感谢您的帮助。请注意,牙齿结构或多或少是一条抛物线(倒置)。如果你能猜出那些斑点(牙齿)的质心的抛物线形状,那么你的问题可以简化到一个合理的程度。我已经显示了一条穿过牙齿中心的红线 我建议您采取以下方法:
结构\u质心
。请参见:李>
结构\u质心位置为中心。我已经展示了这样的极片(三角形半透明)的卡通图像。覆盖整个360度。请参见:李>
确定每个极性切片的非零像素的质心位置。请看这些:
- 李>
- 李>
包含这些质心的数组提供了牙齿平均位置的轨迹(路径)。称之为质心路径
李>
在能够检测到的最接近质心路径的圆上运行消除/选择算法。使用阈值距离删除异常值李>
这会给你们一个很好的圆齿近似值
我希望这能有所帮助。能给我一个代码示例吗?我还是个新手。。谢谢你,这些是步骤,这就是我能给你的。但是我为您制定的步骤,您可以对每一个步骤进行操作,并且应该能够找到有关stackoverflow的现有解决方案(最有可能)。但这样的解决方案可能需要几个小时。所以,祝你一切顺利。您可能还想考虑使用<代码> SkVase<代码>,以防您是新的<代码> OpenCV。您会发现另一个有用的库是sklearn
(可能:取决于用例)。@SolidSnake Ok。我添加了更多的链接,为您指出每个步骤可能存在的解决方案。但坦率地说,这可能是一个不错的项目,可能需要时间。在我看来,这超出了我的回答范围。最好。@ SolidSnake。如果你认为这个想法/答案有帮助,请考虑<代码>投票表决< /代码>和/或<代码>接受< /代码>。谢谢你。我试着听从你的建议,但不幸的是我一事无成。没有明显的答案,因为牙齿的形状不一致。此外,当我将图像转换为二进制/阈值或使用其他技术(如canny或edging)时,大多数情况下形状都是不完整的,因此它们看起来不像完整的圆形/水滴形状。我曾尝试使用轮廓和凸出来检测这些形状,但它们总是返回不完整的结果。我想知道有没有办法检测这些不完整的形状?