import matplotlib.pyplot as plt
from astropy.convolution import convolve
from astropy.visualization import simple_norm
from photutils.background import Background2D, MedianBackground
from photutils.datasets import make_100gaussians_image
from photutils.segmentation import (SourceCatalog, SourceFinder,
                                    make_2dgaussian_kernel)

data = make_100gaussians_image()

bkg_estimator = MedianBackground()
bkg = Background2D(data, (50, 50), filter_size=(3, 3),
                   bkg_estimator=bkg_estimator)
data -= bkg.background  # subtract the background

threshold = 1.5 * bkg.background_rms

kernel = make_2dgaussian_kernel(3.0, size=5)
convolved_data = convolve(data, kernel)

n_pixels = 10
finder = SourceFinder(n_pixels=n_pixels, progress_bar=False)
segment_map = finder(convolved_data, threshold)

cat = SourceCatalog(data, segment_map, convolved_data=convolved_data)
fig, (ax1, ax2) = plt.subplots(nrows=2, figsize=(10, 12.5))
norm = simple_norm(data, 'sqrt', percent=99.5)
ax1.imshow(data, norm=norm, origin='lower')
ax1.set_title('Data with Kron apertures')
segment_map.imshow(ax=ax2)
ax2.set_title('Segmentation Image with Kron apertures')
cat.plot_kron_apertures(ax=ax1, color='white', lw=1.5)
cat.plot_kron_apertures(ax=ax2, color='white', lw=1.5)
fig.tight_layout()