LINUX.ORG.RU
ФорумTalks

[математикам] Восстановление поверхности по нормалям


0

4

Не знаю, в какой раздел такое поместить, поэтому в talks.

Проблема такая: получаю я в своей злополучной программке координаты точек. Получаю уравнения световых лучей, откуда вычисляю нормали к поверхности зеркала.

А вот как по нормалям восстановить поверхность - ума не приложу. Всякие фурье-методы не годятся, т.к. сетка неравномерная. Линейная аппроксимация дает уж очень грубое и неоднозначное приближение.

Может кто с такими задачами сталкивался? (например, уточнение формы поверхности по отклонению нормалей в контрольных точках от теоретического значения).

☆☆☆☆☆

а линейное приближение ты как строишь? его сгладить потом не проще?

alpha ★★★★★
()

может просто суммой экспоненциальных функций аппроксимировать?

взять столько функций, сколько точек

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Формулирую задачу точнее: восстановить профиль параболического зеркала «урезанным» методом Гартмана. В сходящемся пучке на некотором расстоянии от фокуса устанавливается диафрагма, пропускающая свет только от 256 участков зеркала. Размещая светоприемник перед и за фокусом мы делаем серию снимков. На снимках распознаем координаты световых пятен, нумеруем их, а затем, зная координаты двух точек для каждого пучка света, прошедшего через соответствующее отверстие диафрагмы, получаем уравнение прямой. Из него легко получается уравнение нормали. Примерное положение нормали можно узнать из уравнения пересечения идеальной параболы и прямой. В этой же точке из уравнения параболы рассчитывается идеальная нормаль - получаем отклонение реальной нормали от идеальной.

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

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

Eddy_Em ☆☆☆☆☆
() автор топика

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

unanimous ★★★★★
()
Ответ на: комментарий от unanimous

ну вообще нормаль - это градиент функции уровня, при большом количестве точек можно поинтегрировать чего-нибудь

alpha ★★★★★
()
Ответ на: комментарий от alpha

Вот «нахрапом» и не получается найти, как бы попроще так проинтегрировать. Завтра еще покумекаю, может, как-нибудь получится сплайны туда таки прикрутить.

Уж очень не хочется слишком страшную математику использовать.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от unanimous

>По нормали можно восстановить только плоскость, т.е. в простейшем случае ты получишь представление твоей поверхности в виде системы пересекающихся плоскостей

Если заранее знать примерную форму функции, то вполне можно восстановить.

dikiy ★★☆☆☆
()

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

Если же задача в том, чтобы установить отклонения от идеального параболоида в виде прогибов и перекосов даже без осевой симметрии, то тогда все труднее.

mclaudt
()
Ответ на: комментарий от Eddy_Em

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

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

имею в виду есессно проекцию на пространство нормалей к градиенту функции.

dikiy ★★☆☆☆
()
Ответ на: комментарий от mclaudt

Задача как раз в том, чтобы определить «ямы» и «холмы», имеющие высоту меньше микрометра, на параболе диаметром 6 метров.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

Зная характер повреждений можно специальным образом параметризовать множество всех функций-кандидатов и также итерационно найти оптимальные значения параметров (например, угловые координаты и высота гауссовой выбоины).

mclaudt
()
Ответ на: комментарий от Eddy_Em

По аналогии с обычной аппроксимацией. Например, чтобы провести аппроксимационную параболу через f(x)=|x|, надо спроецировать функцию |x| на пространство квадратных полиномов, используя интеграл от произведения двух функций в качестве нормы. Получившаяся проекция даст нужные коеффициенты многочлена.

В твоем случае можно аналогично.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Хм. Можно, по идее, попробовать использовать GSL-евский алгоритм аппроксимации методом наименьших квадратов, используя координату z в качестве свободного параметра, а градиенты к искомой функции получать из найденных нормалей.

Надо будет помоделировать разные варианты, поискать наиболее жизнеспособный. Правда, не знаю, сколько времени у меня на это уйдет...

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от mclaudt

С подобными итерациями можно легко напороться на расходимость. Хотя, конечно, наиболее идеальным вариантом было бы взять плоскость, расположенную на заданном расстоянии от фокуса, и постепенно подгонять ее под искомую поверхность.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

> Задача как раз в том, чтобы определить «ямы» и «холмы», имеющие высоту меньше микрометра, на параболе диаметром 6 метров.

А зачем тебе вообще моделировать поверхность формулой? Если ты на ЛЗОС работаешь, то для исправления формы зеркала у тебя уже достаточно информации. Если в обсерватории, то участки зеркала с большими ошибками закрываются черной бумагой, все равно в полевых условиях уже ничего не исправишь. Это зеркало на заводе было меряно перемеряно, все результаты измерений сохранились, да они все у тебя в шкафчике лежат.

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

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

ansky ★★★★★
()
Ответ на: комментарий от Eddy_Em

а если надо найти мелкие дефекты при большом объеме данных, то может проще спроектировать просто все нормали единичной длины на идеальную параболу, получить на ней векторное поле и считать для него «Ротор поля наподобие дивергенции»

дефекты будут соответствовать неоднородностям такого поля

alpha ★★★★★
()
Ответ на: комментарий от Eddy_Em

> уточнение формы поверхности по отклонению нормалей в контрольных точках от теоретического значения

Чисто с технологической точки зрения — далеко не факт, что реальные точки поверхности зеркала совпадают с теоретическими „контрольными“, координаты-то неизвестны. В самом общем случае, afaik, задача аналитически не решаема, ибо для этого нужно знать хотя бы вид и характер дефектов поверхности.

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

Если подгонять, то за начальное приближение лучше брать идеально-параболическую поверхность. Регуляризовать подгоночную модель можно, например, по максимуму энтропии, чтобы не уйти слишком далеко от требуемой параболы.

В принципе, если задача — просто изготовление качественного зеркала, то знание реальной формы поверхности для коррекции ошибок вообще не требуется. Если известны аберрации рабочих параметров изделия и технологический режим травления/напыления, ошибки можно править итерационно по мере формирования зеркала.

k336184
()
Ответ на: комментарий от dikiy

Если заранее знать примерную форму функции, то вполне можно восстановить.

Причему для каждого класса поверхности существует вполне конкретное минимальное количество точек :-)

no-dashi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.