Как разместить эллипсы вокруг источников на изображении

Я хотел бы подогнать эллипсы к источникам на данном спутниковом изображении:

Первое изображение - это исходное изображение, а второе - результат работы функции photutils.detect_sources (). Я хотел бы разместить эллипсы вокруг источников на втором изображении, и мое исследование подсказывает мне, что мне, вероятно, придется использовать это , но я не уверен, как это сделать.

Мой подход прямо сейчас заключается в использовании функции photutils.find_peaks() для получения таблицы координат x, y источников. Затем используйте photutils.isophote для подгонки эллипса. Итак, мой код до сих пор:

      from photutils.segmentation import detect_sources, deblend_sources, SourceCatalog, source_properties

# find sources in image
segm = detect_sources(data, threshold=916.725674757175, npixels=4, connectivity=4) 
# cat = source_properties(data, segm)
print(segm, '\n', cat)

# plot the image and the segmentation image
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 8))
ax1.imshow(data, origin='lower', interpolation='nearest')
ax2.imshow(segm.data, origin='lower', interpolation='nearest')

# use find_peaks on segmentation data from detect_sources()

source_data = segm.data
source_peaks_tbl = find_peaks(source_data, threshold=0, box_size=3)
source_peaks_tbl['peak_value'].info.format = '%.8g'  # for consistent table output  
print(source_peaks_tbl)  

# Attempt to get x, y coords of sources

from photutils.isophote import Ellipse, EllipseGeometry, EllipseSample, EllipseFitter

x_corrs = [] # center pos
y_corrs = [] # center pos
sma = 20. #semimajor axis length in pixels
eps = 0.2 # ellipticity
pa = 35. / 180 * np.pi

ellipses = [] # store for ellipses
geometries = [] # store for ellipse geometries

for i in source_peaks_tbl:
    x_corrs.append(i[0])
    y_corrs.append(i[1])
    
    
for x, y in zip(x_corrs, y_corrs):
    
    g = EllipseGeometry(x,y, sma, eps, pa) # create geometries
    
    ellipse = Ellipse(data, geometry=g) # create ellipses
    
    #isophote = ellipse.fit_isophote(sma=20.)
    
    ellipses.append(ellipse)
    
    geometries.append(g)
    
print([i.y0 for i in geometries[:5]]) # test, should be same as x_corrs[:5]
print(x_corrs[:5])
print(y_corrs[:5])

На этом этапе, я думаю, я бы использовал photutils.aperture.EllipticalAperture, но я хотел бы получить некоторые сведения, если я буду поступать правильно, поскольку раньше я никогда не устанавливал эллипсы для источников.

0 ответов

Другие вопросы по тегам