Определить параметры эллипса по заданной эллиптической маске - PullRequest
0 голосов
/ 27 апреля 2020

Я следую учебному пособию на веб-сайте skimage , чтобы определить края маски и затем получить периметры эллипса.

enter image description here

Однако, когда я запускаю этот код, я получаю следующее:

this

Я уменьшил порог в hough_ellipse функционирует до 100, потому что это наибольшее значение, которое работает (которое иногда не работает с другими масками) и min_size до 10 (по той же причине). У меня нет опыта работы с изображениями или компьютерным зрением, и я не нашел другого способа получить периметры от большого количества масок.

1 Ответ

0 голосов
/ 04 мая 2020

Вот как это сделать с подгонкой к эллипсу в Python / OpenCV.

  • Чтение ввода
  • Преобразование в серый
  • Порог
  • Установить эллипс по форме
  • Нарисовать эллипс на входном изображении
  • Сохранить результаты

Ввод:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('ellipse_shape.png')
hh, ww = img.shape[:2]

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

# threshold to binary and invert
thresh = cv2.threshold(gray, 252, 255, cv2.THRESH_BINARY)[1]

# fit ellipse
# note: transpose needed to convert y,x points from numpy to x,y for opencv
points = np.column_stack(np.where(thresh.transpose() > 0))
hull = cv2.convexHull(points)
((centx,centy), (width,height), angle) = cv2.fitEllipse(hull)
print("center x,y:",centx,centy)
print("diameters:",width,height)
print("orientation angle:",angle)

# draw ellipse on input image
result = img.copy()
cv2.ellipse(result, (int(centx),int(centy)), (int(width/2),int(height/2)), angle, 0, 360, (0,0,255), 2)

# show results
cv2.imshow('image', img)
cv2.imshow('thresh', thresh)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save results
cv2.imwrite('ellipse_shape_fitted.png', result)

Полученный эллипс:

enter image description here

Данные эллипса:

center x,y: 291.0881042480469 337.10638427734375
diameters: 176.3456573486328 207.72769165039062
orientation angle: 125.05526733398438


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...