Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

Определяем положение фокальной плоскости

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

Итак, возьмем две гартманнограммы: предфокальную
и зафокальную:

Ее я обработал в своей fitsview для определения параметров пятен. Т.к. fitsview у меня еще сильно недопиленная, дальнейшие вычисления делаю в Octave.
Считываем X и Y предфокального (textread работает через задницу, поэтому делаем так):

> [id0 X0 Y0 a b c d e f g h] = textread('f0.93_0003.spotlist');
Считываем X и Y зафокального:

> [id1 X1 Y1 a b c d e f g h] = textread('f198.57_0003.spotlist');
Выкидываем маркеры и внешнее кольцо:

> idx0 = find(id0 != 299 & id0 < 700);
проверяем, все ли точки попали в наш список:

> 32*7
ans =  224

> size(idx0)
ans =

   224     1
То же самое делаем с зафокальным:

> idx1 = find(id1 != 299 & id1 < 700);
> size(idx1)
ans =

   224     1
Все ОК, ничего лишнего и ничего пропущенного.
Теперь нам надо найти центр гартманограммы. Среднее значение и медианное значение по всем точкам довольно прилично отличаются:

> X0Cm = median(X0)
X0Cm =  1876.5
> Y0Cm = median(Y0)
Y0Cm =  1867.5
> X0Ca = mean(X0)
X0Ca =  1900.6
> Y0Ca = mean(Y0)
Y0Ca =  1837.3
Попробуем по-другому: будем искать центр тяжести для каждой противоположной пары пятен:

function [Xc Yc] = getcenters(X, Y)
	Xc = []; Yc = [];
	for ring = [0:6]*32
		for point = [1:16]
			xx = (X(ring+point)+X(ring+point+16)) / 2;
			yy = (Y(ring+point)+Y(ring+point+16)) / 2;
			Xc = [Xc; xx]; Yc  = [Yc; yy];
		endfor
	endfor
endfunction
Пробуем:

[Xc0 Yc0] = getcenters(X0, Y0);
> std(Xc0)
ans =  12.199
>std(Yc0)
ans =  6.0896
> mean(Xc0)
ans =  1910.4
> mean(Yc0)
ans =  1830.9
> median(Xc0)
ans =  1911.8
> median(Yc0)
ans =  1831.5
Отлично: теперь у нас среднее и медиана почти совпадают, а среднеквадратическое отклонение хоть и не 1..2, но все-таки более-менее нормальное (не стоит забывать, что у нас и зеркало не идеальное, и погода мягко говоря плохонькая была).
Добавляем теперь в нашу функцию поиска центров "усреднялку":

	sx = std(Xc); sy = std(Yc);
	printf("sigma(Xc) = %g, sigma(Yc) = %g\n", sx, sy);
	Xc = median(Xc);
	Yc = median(Yc);
И вычисляем координаты центров обеих гартманограмм:

[Xc0 Yc0] = getcenters(X0, Y0)
sigma(Xc) = 12.1989, sigma(Yc) = 6.08961
Xc0 =  1911.8
Yc0 =  1831.5
> [Xc1 Yc1] = getcenters(X1, Y1)
sigma(Xc) = 15.8502, sigma(Yc) = 8.59652
Xc1 =  1889
Yc1 =  1837.5
Координаты центров по X разошлись почти на две сигмы. Но судить о том, произошло ли это по вине кривой посадки матрицы или же из-за статистики, рано: надо было сделать несколько гартманограмм с разными углами вращения поворотного стола.
Теперь определяем средние радиусы каждого кольца:

function [R err] = getR(Xc, Yc, X, Y)
	R = []; err = [];
	for ring = [0:6]*32
		idx = [1:32] + ring;
		radii = sqrt((X(idx)-Xc).^2+(Y(idx)-Yc).^2);
		R = [R; median(radii)];
		err = [err; std(radii)];
	endfor
endfunction

> [R0 err0] = getR(Xc0, Yc0, X0, Y0);
> [R1 err1] = getR(Xc1, Yc1, X1, Y1);
Итак, радиусы мы вычислили. Теперь посмотрим, сильно ли отличаются их отношения:

> R1./R0
ans =

   1.2787
   1.3226
   1.3203
   1.3381
   1.3318
   1.3366
   1.3334
Все более-менее прилично, определяем медиану:

> ratio = median(R1./R0)
ratio =  1.3318
Итак, габариты зафокальной гартманнограммы примерно в 1.33 раз больше габаритов предфокальной.
Пусть расстояние между снимками равно L, расстояние от фокальной плоскости до предфокальной гартманнограммы равно d0, до зафокальной - d1 (L=d0+d1). Характерные размеры гартманограмм обозначим как h0 и h1. Тогда элементарная пропорция h1/d1=h0/d0 даст нам выражение для вычисления положения фокуса относительно положения предфокального снимка:
d0 = (L*h0)/(h0+h1) = L/(1+r),
где r = h1/h0.
F = f0+d0 где F - искомая величина перемещения привода фокуса, f0 - отсчет привода фокуса для предфокального изображения.
Получаем:

> L = 198.57 - 0.93
L =  197.64
> d0 = L / (1+ratio)
d0 =  84.760
> F = 0.93 + d0
F =  85.690
Итак, значение F=85.69мм соответствует положению фокальной плоскости для нашей камеры.
Для того, чтобы это положение соответствовало ровно середине диапазона перемещения стола, нам надо укоротить крепеж камеры на

100 - F
ans =  14.310
В итоге получили, что нам надо отрезать 14мм от стоек крепления светоприемника. Отрежем, а на следующую техническую ночь проведем повторные измерения. Если все будет ОК, сделаем уже нормальный прибор, с турелью фильтров. И будем раз в месяц-два проводить позиционные измерения и снимать гартманнограммы. Правда, еще бы найти время, чтобы довести до ума восстановление профиля зеркала по гартманнограмме + автоматизировать позиционные измерения.
Tags: octave, гартманнограмма, обработка изображений
Subscribe

  • Хеши строковых команд для МК

    Долго я к этому шел, но, похоже, пора уже: однобуквенные команды сложно запоминать (особенно если команд толпа, и большая часть с этими буквами…

  • OBS studio

    В общем, надоумили меня попробовать трансляцию в youtube. Напрямую скринкасты он писать не умеет, но может забирать поток с промежуточного…

  • M$ teams…

    Начал с сегодняшнего дня студентам ЮФУ удаленно лекции читать. У них все завязано на различные корпорации зла. И базовая работа - через teams. ОК,…

promo eddy_em september 3, 12:13 8
Buy for 10 tokens
Уже больше полугода занимаюсь разработкой, вот, наконец-то в мастерских взялись за меня и начали выдавать первые детали. Сегодня сделал тестовую сборку (как обычно, местами пришлось "доработать напильником"): Пока прибор без названия (да и как-то не лезет в голову ничего, у меня нет…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 4 comments