Еще немного про волновой фронт
May. 29th, 2013 04:14 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Продолжаю свои мучения с "полиномами Жао".
В упор не понимаю, как с ними работать: хорошие значения для коэффициентов Цернике получаются лишь для очень простых векторных полей, аппроксимирующихся полиномами максимум второй степени. При повышении степени получается какой-то фигвам.
Так как "полиномы Жао" состоят из линейной комбинации двух градиентов полиномов Цернике, преобразовывать коэффициенты Жао в коэффициенты Цернике надо хитро.
Для теста я взял простой "волновой фронт" вида
100.*(x-0.3)*y+200.*x*y²+300.*yy⁴
Вычислил градиенты и стал восстанавливать, ограничив предельную степень полиномов Цернике пятеркой.
В среднем отклонение восстановленного изображения от оригинала получилось около 2.5. Однако, при восстановлении нормалей длина отклонений получилась уже около 10.
При восстановлении коэффициентов Цернике получилось вот что. Если пользоваться коэффициентом sqrt((n+3)/(n+1)), получается вот что:
(первый столбец — номер в нотации Нолля, второй — коэффициент Цернике для "волнового фронта", третий — восстановленный из поля нормалей коэффициент, четвертый — соответствующий коэффициент Жао).
Если схитрить и заменить коэффициент у второго слагаемого в формуле для "полинома Жао" на sqrt((n+1)/n), получится красивей:
и отклонения восстановленного изображения от оригинала становятся меньше. Но все равно заметны сильные расхождения оригинальных и восстановленных коэффициентов. Да и непонятно, что такое sqrt((n+1)/n).
Надо разбираться дальше.
В упор не понимаю, как с ними работать: хорошие значения для коэффициентов Цернике получаются лишь для очень простых векторных полей, аппроксимирующихся полиномами максимум второй степени. При повышении степени получается какой-то фигвам.
Так как "полиномы Жао" состоят из линейной комбинации двух градиентов полиномов Цернике, преобразовывать коэффициенты Жао в коэффициенты Цернике надо хитро.
Для теста я взял простой "волновой фронт" вида
100.*(x-0.3)*y+200.*x*y²+300.*yy⁴
Вычислил градиенты и стал восстанавливать, ограничив предельную степень полиномов Цернике пятеркой.
В среднем отклонение восстановленного изображения от оригинала получилось около 2.5. Однако, при восстановлении нормалей длина отклонений получилась уже около 10.
При восстановлении коэффициентов Цернике получилось вот что. Если пользоваться коэффициентом sqrt((n+3)/(n+1)), получается вот что:
Coefficients for Zernike (sqrt((n+3)/(n+1)): i Z[i] gradZ[i] S[i] 0 63.0 0.0 0.0 1 -26.6 -26.6 -26.6 2 27.9 29.0 43.2 3 36.2 36.2 36.2 4 57.2 59.6 75.1 5 -80.2 -85.2 -106.2 6 0.0 0.0 0.0 7 0.0 0.0 0.0 8 8.7 10.1 10.0 9 -31.2 -31.3 -31.3 10 0.0 0.0 0.0 11 0.0 0.0 0.0 12 17.0 15.5 15.5 13 -21.0 -21.0 -21.0 14 20.9 21.0 21.0 15 0.0 0.0 0.0 16 0.0 0.0 0.0 17 0.0 0.0 0.0 18 -0.3 -0.0 -0.0 19 0.3 0.0 0.0 20 0.2 0.0 0.0
(первый столбец — номер в нотации Нолля, второй — коэффициент Цернике для "волнового фронта", третий — восстановленный из поля нормалей коэффициент, четвертый — соответствующий коэффициент Жао).
Если схитрить и заменить коэффициент у второго слагаемого в формуле для "полинома Жао" на sqrt((n+1)/n), получится красивей:
Coefficients for Zernike (sqrt((n+1)/n): i Z[i] gradZ[i] S[i] 0 63.0 0.0 0.0 1 -26.6 -26.6 -26.6 2 27.9 29.0 43.2 3 36.2 36.2 36.2 4 57.2 56.1 75.1 5 -80.2 -80.5 -106.2 6 0.0 0.0 0.0 7 0.0 0.0 0.0 8 8.7 10.1 10.0 9 -31.2 -31.3 -31.3 10 0.0 0.0 0.0 11 0.0 0.0 0.0 12 17.0 15.5 15.5 13 -21.0 -21.0 -21.0 14 20.9 21.0 21.0 15 0.0 0.0 0.0 16 0.0 0.0 0.0 17 0.0 0.0 0.0 18 -0.3 -0.0 -0.0 19 0.3 0.0 0.0 20 0.2 0.0 0.0
и отклонения восстановленного изображения от оригинала становятся меньше. Но все равно заметны сильные расхождения оригинальных и восстановленных коэффициентов. Да и непонятно, что такое sqrt((n+1)/n).
Надо разбираться дальше.