Python:使用OpenCV返回图像中任意/牙齿形状的位置和大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:使用OpenCV返回图像中任意/牙齿形状的位置和大小相关的知识,希望对你有一定的参考价值。
我对图像处理和目标检测非常陌生。我想在下图中提取/识别牙齿的位置和尺寸:
这是到目前为止我使用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()
我不知道从这里去哪里。我想弄清楚所有牙齿。我该怎么办?
非常感谢您的帮助。
答案
请注意,牙齿结构或多或少是抛物线(上下颠倒)。如果您能以某种方式猜测定义这些斑点(齿)的质心的抛物线形状,那么您的问题就可以在一定程度上得到简化。我显示了一条穿过牙齿中心的红线。
我建议您按照以下方式进行处理:
- Binarize您的图像(背景= 0,否则为1)。
- 计算所有非零像素的质心。这是图像中的中心蓝色圆圈。将此称为
structure_centroid
。 - 以
structure_centroid
的位置为中心,制作整个图像的极片。我已经展示了这种极片的卡通图像(三角形半透明)。覆盖整个360度。 - 为这些极片中的每一个确定非零像素的质心的位置。
- 包含这些质心的数组为您提供了牙齿平均位置的轨迹。将此称为
centroid_path
。 - 在最接近
centroid_path
的圆上运行消除/选择算法。使用阈值距离降低异常值。
这应该使您的牙齿与圆圈很好地近似。
我希望这会有所帮助。
以上是关于Python:使用OpenCV返回图像中任意/牙齿形状的位置和大小的主要内容,如果未能解决你的问题,请参考以下文章