Нахождение круговой функции и центра в Python - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть набор данных (512 X 512), который является 2D-массивом. Это график, который я строю на основе этого набора данных.

Данные выглядят так:

[[239 247 214 ... 466 511 415]
 [257 283 254 ... 460 474 474]
 [219 251 268 ... 458 475 496]
 ...
 [372 382 428 ... 641 615 707]
 [394 369 408 ... 681 592 706]
 [357 377 358 ... 696 566 708]]

enter image description here

Есть ли способ, которым я могу получить функцию и центральную позицию круга?

Должен ли я сделать что-то с вычитанием фона, чтобы сделать круг более четким?

Я действительно не знаю, где я могу Начните. Нужна помощь. Большое спасибо !!!

Это код того, как я рисую фигуру.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

data = pd.read_csv('D:/data set.csv', header=None)


# create data
data = np.array(data)

#plot data
fig, ax = plt.subplots(figsize=(5, 5)) 
side = np.linspace(0,512,513)
X,Y = np.meshgrid(side,side)
Z = [[data[i][j] for j in range(len(data[0]))]for i in range(len(data))]
plt.pcolormesh(X,Y,Z, cmap=plt.cm.get_cmap('Greys'))

ax = plt.gca()
ax.set_aspect('equal', 'box')

plt.colorbar(fraction=0.0455)

plt.show()

Теперь я обнаружил, что могу использовать HoughCircle, чтобы обнаружить круг на моем графике. Но есть ли какой-нибудь способ, которым я могу получить уравнение зеленого круга и красного центра, обнаруженного HoughCircle?

enter image description here

Это кодировка HoughCircle:

import cv2
import numpy as np
import matplotlib.pyplot as plt

bfp = cv2.imread('D:/circle.png')
gray_img = cv2.cvtColor(bfp, cv2.COLOR_BGR2GRAY)
img = cv2.medianBlur(gray_img, 5)   
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) 

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,120,

                           param1=80,param2=40,minRadius=0,maxRadius=0)

circles = np.uint16(np.around(circles))

for i in circles[0,:]:
   # draw the outer circle
   cv2.circle(bfp,(i[0],i[1]),i[2],(0,255,0),2)
   # draw the center of the circle
   cv2.circle(bfp,(i[0],i[1]),2,(0,0,255),3)
   print(cv2.circle(bfp,(i[0],i[1]),2,(0,0,255),3))

cv2.imshow("bfp_HoughCirlces", bfp)
cv2.waitKey()
cv2.destroyAllWindows()

1 Ответ

1 голос
/ 18 февраля 2020

(Извините, я не смог прокомментировать это сообщение) Вы можете получить максимум и минимум каждого измерения. Координаты центра будут средним значением максимума и минимума каждого измерения.

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