画像があり、画像内の極大値fits
の座標を見つけようとしていますが、これまでのところうまくいきませんでした。私の画像はここにあります。私がこれまでに持っているのは
import numpy as np
import scipy.nimage as ndimage
from astropy.wcs import WCS
from astropy import units as u
from astropy import coordinates as coord
from astropy.io import fits
import scipy.ndimage.filters as filters
from scipy.ndimage.filters import maximum_filter
hdulist=fits.open("MapSNR.fits")
#reading a two dimensional array from fits file
d=hdulist[0].data
w=WCS("MapSNR.fits")
idx,idy=np.where(d==np.max(d))
rr,dd=w.all_pix2word(idx,idy,o)
c=coord.SkyCoord(ra=rr*u.degree, dec=dd*u.degree)
#The sky coordinate of the image maximum
print c.ra
print c.dec
それが画像のグローバル最大値を見つける方法ですが、3より大きいという意味を持つローカル最大値の座標を取得したいと思います。
ウェブで調べて見つけたのは、私の場合は正しく機能しない 次の回答でした。更新:この機能を使用しました
def detect_peaks(data, threshold=1.5, neighborhood_size=5):
data_max = filters.maximum_filter(data, neighborhood_size)
maxima = (data == data_max)
data_min = filters.minimum_filter(data, neighborhood_size)
diff = ((data_max - data_min) > threshold)
maxima[diff == 0] = 0 # sets values <= threshold as background
labeled, num_objects = ndimage.label(maxima)
slices = ndimage.find_objects(labeled)
x,y=[],[]
for dy,dx in slices:
x_center = (dx.start + dx.stop - 1)/2
y_center = (dy.start + dy.stop - 1)/2
x.append(x_center)
y.append(y_center)
return x,y
配列の導関数や分割統治法など、より良いアプローチを使用した方法を見つけたいと思います。私はより良い推奨ソリューションを適切に扱います。