Как получить топологию поверхности из рисунка полос в 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

Но я не знаю, как поступить после этого шага. Какие-либо предложения?

Спасибо!

0 ответов

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