from astropy.io import fits
from astropy.utils.data import download_file

url = 'https://github.com/astropy/photutils-datasets/raw/master/data/isophote/M51.fits'
path = download_file(url)
hdu = fits.open(path)
data = hdu[0].data
hdu.close()

from photutils.isophote import Ellipse
ellipse = Ellipse(data)
isolist = ellipse.fit_image(sclip=2., nclip=3, maxsma=90)
print(isolist.to_table())
isolist_wide_outer = ellipse.fit_image(minsma=90., maxsma=210., sclip=2.0, nclip=3)
print(isolist_wide_outer.to_table())

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['image.origin'] = 'lower'

fig, ax = plt.subplots(figsize=(8, 8))
ax.imshow(data, vmin=0, vmax=1000)
plt.axis([0, 511, 0, 511])

isos = []
smas = [20., 50., 90.]
for sma in smas:
    iso = isolist.get_closest(sma)
    isos.append(iso)
    x, y, = iso.sampled_coordinates()
    plt.plot(x, y, color='white')
smas = [120., 150., 180., 210.]
for sma in smas:
    iso = isolist_wide_outer.get_closest(sma)
    isos.append(iso)
    x, y, = iso.sampled_coordinates()
    plt.plot(x, y, color='white')  
plt.show()