Home > Back-end >  Get Edges/boundary for overlapping image
Get Edges/boundary for overlapping image

Time:02-22

I have a mask for a dental x-ray enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread("teeth.png")

# convert img to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold gray image
#thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU)[1]

# Get contours
cntrs = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cntrs = cntrs[0] if len(cntrs) == 2 else cntrs[1]
result = img.copy()
for c in cntrs:
    cv2.drawContours(result, [c], -1, (0,0,255), 1)

count = len(cntrs)
print("")
print("count =",count)

print("")

# write results to disk
cv2.imwrite("teeth_thresh.png", thresh)
cv2.imwrite("tide_contours.png", result)

# display it
cv2.imshow("thresh", thresh)
cv2.imshow("result", result)
cv2.waitKey(0)

Contours:

enter image description here

Resulting Count:

count = 32

CodePudding user response:

Without knowledge of the exact layout of teeth in a mouth, this task is impossible. No image processing technique can help.

Because in case of touching teeth, you can't tell two touching teeth from a two-rooted tooth.

  • Related