У меня есть набор данных (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]]
Есть ли способ, которым я могу получить функцию и центральную позицию круга?
Должен ли я сделать что-то с вычитанием фона, чтобы сделать круг более четким?
Я действительно не знаю, где я могу Начните. Нужна помощь. Большое спасибо !!!
Это код того, как я рисую фигуру.
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?
Это кодировка 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()