Как получить топологию поверхности из рисунка полос в Python
Я пытаюсь восстановить форму поверхности тела по рисунку бахромы. На тело установлен интерферометр, проецирующий круговые полосы. Камера фотографирует отражение этих полос. Я изучал некоторые статьи, делающие это с разворачиванием фазы бахромчатого узора. К сожалению, они не углубляются, поэтому я не уловил связи между развернутой фазой и полученной топологией.
Сначала я создал функцию тестового шаблона:
def create_pattern_rings(dim, count_rings):
pattern = np.zeros((dim[0], dim[1]))
pix_per_ring = int((dim[1] / 2) / count_rings)
for ring in range(0, count_rings):
radii_out = (dim[1] / 2) - ring*pix_per_ring*2
radii_in = radii_out - pix_per_ring
for y in range(0, dim[0]):
for x in range(0, dim[1]):
if (np.sqrt((x-dim[1]/2)**2 + (y-dim[1]/2)**2)) < radii_out and (np.sqrt((x-dim[1]/2)**2 + (y-dim[1]/2)**2)) > radii_in:
pattern[y][x] = 1
С помощью этого шаблона я делаю 2D FFT, чтобы получить фазу с помощьюnumpy.angle()
. Эту фазу можно развернуть с помощьюnumpy.unwrap()
:
def calc_fft(data, shift):
data_fft = np.fft.fft2(data)
if shift:
data_fft = np.fft.fftshift(data_fft)
return data_fft
def phase_unwrap(data_fft):
data_unwraped = np.unwrap(np.angle(data_fft))
return data_unwraped
Но я не знаю, как поступить после этого шага. Какие-либо предложения?
Спасибо!