2-й участок поверхности в 3-м. Построение индексов пика на графике (возможно, путем определения пиков?). питон

Я пытаюсь построить 2D-графики поверхности в 3d с помощью модуля mplot3d.

Я знаю, как "вручную" найти максимальное значение и его положение (с точки зрения строки и столбца), что очень важно в том, что я делаю. Есть ли способ вывести эту информацию на вершину? То есть писать (max val, row, col) рядом с пиком?

PS пока я это спрашиваю. Может быть, есть простой способ определить второй пик (или любые другие пики в этом отношении?). В настоящее время я использую маску, чтобы замаскировать первый пик и найти второй, но я должен быть очень осторожен в выборе сторон, потому что, если мне случится замаскировать слишком мало, некоторые непиковые вещи будут определены в качестве пика, и реальный второй пик не будет идентифицирован, что испортит измерение, называемое отношением сигнал / шум "пик к пику".

Земельный участок

Код, который я сейчас использую:

frame_a = gdal.Open( "frame_{0:05d}.tif".format(274) ).ReadAsArray()
# in case this helps, this is how the images are read, they are 16-bit GS tiffs.    
frame_b = gdal.Open( "frame_{0:05d}.tif".format(287) ).ReadAsArray()


#this does some clever stuff but basically it returns a 2-D 32x32 array.
corr = correlate_windows( windows_a[99], windows_b[99], corr_method = corr_method, nfftx=nfftx, nffty=nffty )

#this is how I find the position of max value.
column = np.argmax(np.max(corr, axis=0))
row = np.argmax(np.max(corr, axis=1))
maximum = corr.max()
print 'column = ' + str(column)
print 'row = ' +str(row)
print 'peak_1 = ' + str(maximum)



import matplotlib.cm as cmps
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import LinearLocator, FormatStrFormatter

fig = pl.figure()

ax = Axes3D(fig)

# window size is 32 in this case

nx, ny = window_size*2, window_size*2

xx = range(nx)

yy = range(ny)

X, Y = np.meshgrid(xx, yy)

ax.plot_surface(X , Y , corr , rstride = 1, cstride = 1 )

pl.show()

1 ответ

Что касается вашего второго вопроса, вы можете найти следующий пост полезным

Алгоритм поиска пиков для Python/SciPy

В некоторой работе, которую я проделал, мы использовали простое приближение производной, когда это меняет знак, что у вас есть пик (в данных 1D), затем можно добавить некоторые параметры, чтобы удалить пики из-за шума. Чтобы расширить это до 2D, я прочитал об алгоритмах, которые следуют градиенту (вверх или вниз), пока он не достигнет максимума. Это может быть довольно сложно, так как легко застрять в локальных минимумах / максимумах. Если вы разместите продолжение этого, пожалуйста, ссылку здесь, как я хотел бы видеть, что люди придумали.

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