簡體   English   中英

Python:使用 OpenCV 返回 position 和圖像中任意/牙齒形狀的大小

[英]Python: Return position and size of arbitrary/teeth shapes in image using OpenCV

我對圖像處理和 object 檢測非常陌生。 我想在下圖中提取/識別 position 和牙齒尺寸:

圖像處理

這是我到目前為止使用 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()

這是我應用精明過濾器后得到的: 應用精明過濾器

這是最終結果: 檢測到的牙齒

我不知道 go 從這里到哪里。 我想把所有的牙齒都鑒定出來。 我怎樣才能做到這一點?

我真的很感激任何幫助..

請注意,牙齒結構或多或少是拋物線(倒置)。 如果您能以某種方式猜測定義這些斑點(牙齒)質心的拋物線形狀,那么您的問題可以在合理的程度上簡化。 我展示了一條穿過牙齒中心的紅線。

在此處輸入圖像描述

我建議您按以下方式處理它:

  1. 二值化圖像(背景=0,否則為 1)。 您可以使用sklearn.preprocessing.binarize
  2. 計算所有非零像素的質心。 這是圖像中的中心藍色圓圈。 調用這個structure_centroid 看到這個: 如何在二維 numpy 數組中居中非零值? .
  3. 制作整個圖像的極坐標切片,以structure_centroid的位置為中心。 我已經展示了這種極片的卡通圖像(三角形半透明)。 覆蓋完整的 360 度。 請參閱: polarTransform
  4. 確定每個極片的非零像素質心的 position。 見這些:
  5. 包含這些質心的數組為您提供牙齒平均位置的軌跡(路徑)。 調用這個centroid_path
  6. 在您能夠檢測到的最接近centroid_path的圓圈上運行消除/選擇算法。 使用閾值距離刪除異常值。

這應該給你一個很好的與圓圈的牙齒近似值。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM