У меня есть такой сюжет:
который я рисую, используя
ax.imshow(sf, origin = 'lower', extent=[-2,2,2,4])
ax.scatter(xxx,yyy,s=1,marker = 'o')
но поскольку я хочу, чтобы все на этом графике обрабатывалось как изображение, я снимаю ось xy и сохраняю ее с помощью fig.savefig('*path*/img.png', bbox_inches='tight', dpi=300,pad_inches = 0):
Теперь, как только я загружаю изображение обратно для обработки sf_img = io.imread('*path*/img.png'), я обрабатываю его (я хочу обнаружить края и найти круглые формы с наиболее вероятным центром), я получаю изображение размером (1108,893,3) этого типа:
и, как вы можете видеть, изменился масштаб, а также изменился размер кадра (вы этого не видите, потому что он белый).
Я, конечно, мог бы построить новое изображение с помощью plt.imshow(process_img, extent = [-2,2,-1,4]), НО, проблема в том, что я не могу разбросать значение этой фиолетовой точки, поскольку она принимает значение в исходной шкале ... и я хочу знать значение этой точки, которое я знаю в исходный масштаб [246,905], но не в том масштабе, который мне нужен [-2,2, -1,4]
Не могли бы вы помочь мне в решении этой проблемы? Это действительно важно, спасибо!
Обновлено:
import numpy as np
import matplotlib.pyplot as plt
from skimage import data, color, io
from skimage.transform import hough_circle, hough_circle_peaks
from skimage.feature import canny
from skimage.draw import circle_perimeter
from skimage.util import img_as_ubyte
sf_img = io.imread('*path*/img.png')
image = color.rgb2gray(sf_img[:,:,0:3])
image = img_as_ubyte(image)
plt.imshow(image,cmap = "gray", extent = [-2,2,-1,4])
plt.show()
edges = canny(image, sigma=5, low_threshold=10, high_threshold=20)
plt.imshow(edges, extent = [-2,2,-1,4])
plt.show()
# Detect two radii
hough_radii = np.arange(880, 900, 2)
hough_res = hough_circle(edges, hough_radii,full_output=False)
# Select the most prominent 13 circles
accums, cx, cy, radii = hough_circle_peaks(hough_res, hough_radii,
total_num_peaks=13, normalize = False)
# Draw them
fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(10, 4))
image = color.gray2rgb(image)
for center_y, center_x, radius in zip(cy, cx, radii):
circy, circx = circle_perimeter(center_y, center_x, radius,
shape=image.shape)
image[circy, circx] = (220, 20, 20)
ax.imshow(image, cmap=plt.cm.gray) #in this way it's not in the scale I want
ax.scatter(cx[0],cy[0],c=255, marker= 'o') # cx[0] and cy[0] are the coordinate I'm looking for in the [-2,2,-1,4] scale
plt.show()
@abdulsamad Привет, я отредактировал вопрос, если вам все еще интересно :)






Можете ли вы предоставить полный код для своего примера?