Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
diploma_0.0.2.pdf
Скачиваний:
19
Добавлен:
27.03.2016
Размер:
1.89 Mб
Скачать

3.2.3Подготовка данных

Рис. 3.3: Этап 0 - Подготовка данных

Перед тем, как приступить непосредственно к написанию программной части, следует рассмотреть структуру данных, с которыми предстоит работа. Здесь и далее, экспериментальные подразделы будет состоять из обсуждения структуры входящих данных, описания конечной, результирующей структуры данных, алгоритма обработки, решающего задачу обработки данных на заданном этапе, оценки вычислительных затрат, иллюстраций, таблиц и графиков.

Входными данными на этом этапе являются обыкновенные массивы данных размерности × , обернутые в NumPy интерфейс. Подобные массивы будем называть просто - изображения. Поскольку каждоый элемент изображения, пиксель, представлен одним единственным числом, то очевидно что речь идет о монохроматических изображениях. Однако впоследствии данные изображения возможно будут отображаться в некоторой цветовой гамме, исключительно с целью удобства восприятия и ранжирования изображенных значений.

Итак, на первом этапе работы программы компьютеру предстоит итера-

20

тивная обработка большого входного набора данных. Процедура вычисления корреляционного коэффициента между двумя отдельно взятыми паттернами { , } для заданного вектора углов { , , } состоит из следующих частей:

1.определение координат точек общей дуги для заданных углов ориентации паттерна

2.обращение к буфферу данных паттерна

3.интерполированный семплинг данных паттерна на точки дуги

4.вычисление коэффициента корреляции для выбранного метода оценки для двух -мерных векторов.

Значения углов , и берутся на интервалах [0, 1], [0, 1] и [0, 1] с шагом , и соответственно.

Поскольку одной из ключевых задач данной работы является оптимизация и распараллеливание вычислений, то кажется очевидным, что во всех возможных местах, где это применимо, данные, определяемые неполным набором входных переменных, можно заготовить заранее, просчитав их один раз и используя в дальнейшем из памяти. Этот классический подход называется Таблица Значений (Lookup Table), а выгода, извлекаемая из его применения, обуславливается тем фактом, что чтение значений из оперативной памяти происходит существенно раз быстрее, чем их вычисление на месте (in-place).

В приведенном выше списке можно выделись некоторые пункты, в которых искомые данные однозначно определяются неполным набором входных переменных, а именно:

Определение координат точек общей дуги для заданных углов ориентации паттерна.

Так как положения точек общей дуги на диффракционных паттернах однозначно определяются только лишь двумя углами ( { , } для паттерна и { , } для паттерна ), а все рассматриваемые угловые значения известны заранее, следовательно данные о форме общих дуг можно вычислить и записать один раз заранее, для таблицы значений углов { , }, где

21

принимает значения [ , ], а принимает значения [ , ]. В дальнейшем к этой таблице можно будет элементарно обращаться по запрашиваемым значениям углов. В случае же “нецелых” угловых значений, для которых положения точек не были просчитаны заранее, можно использовать приближенные, линейно интерполированные значения.

интерполированный семплинг данных паттерна на точки дуги.

Поскольку в ходе выполнения сравнений, каждый отдельный паннерн будет попарно сравниваться с других паттернов, это подразумевает многократное вычисление один и тех же данных, основываясь на данном паттерне. Вместе с тем фактом, что ни для каких других целей, кроме извлечения профилей интенсивностей общих дуг, данные паттернов не требуются, то достаточно очевидным будет решение преобразовать все исходные данные диффракционных паттернов в массивы профилей интенсивностей вдоль их общих дуг. Таким образом, массив интенсивностей дифракционного паттерна размера × примет вид массива векторов профилей интенсивностей размерности × Φ × Θ, где - размерность вектора данных для профиля интенсивностей вдоль общей дуги, Φ - количество рассматриваемых углов вращения , а Θ - количество рассматриваемых углов схождения сфер Эрвальда .

После того, как набор входных изображений был преобразован в набор массивов векторов, соответствующих профилям интенсивностей вдоль общих дуг, из приведенного выше список действий примет следующий вид:

1.обращение к буфферу общих дуг

2.вычисление коэффициента корреляции для выбранного метода оценки для двух -мерных векторов.

22

Таким образом этап поиска относительных ориентаций займет суще-

ственно меньше времени. Пример работы с заготовленным массивом дан-

ных и без него:

import math import numpy as np

import scipy.ndimage as ndimage import common_arc

import store_arc_points import store_img_arcs

#common arc resolution arc_steps = 200

#calculate common arc points

x,y = common_arc( angle=intersecton_angle, dir_angles=direction_angle, arc_steps=arc_steps )

# create look-up table for common arc points deg2rad = math.pi / 180.

intersecton_angles = np.arange( 90., 150., 3. ) * deg2rad direction_angles = np.arange( 0., 360., 3. ) * deg2rad

i_theta = 5

theta = direction_angles[i_theta] i_phi = 21

phi = direction_angles[i_phi]

arcs_LUT = store_arc_points( angles=intersecton_angles, dir_angles=direction_angles, arc_steps=arc_steps )

points = np.array([ arcs_LUT[ i_theta, i_phi, 0 ], arcs_LUT[ i_theta, i_phi, 1 ] ]).transpose()

img = np.fromfile(’./SIMULATED/data/0023.bin’, dtype=’float32’).reshape((1000, 1000))

# calculate common arc profile

common_arc = ndimage.interpolation.map_coordinates( img, points, order=2 )

# build look-up table for common arcs profiles img_arcs_LUT = store_img_arcs( img, image_arcs_LUT ) common_arc = img_arcs_LUT[ i_theta, i_phi ]

23

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]