Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
52 / 47 / 19
Регистрация: 05.04.2015
Сообщений: 227

Проективное преобразование

10.12.2015, 11:56. Показов 2841. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны координаты звезд на изображении.
x = [45.1188302236819;163.457143440289;332.59 1621201628;383.566934253235;...
551.398180367260;622.330884552779;933.49 3777879770;932.539767051573;...
968.335265057283;1025.63261145780;1818.4 4291882599;1878.73778621040;...
1894.91682331570];
y = [1247.10765832060;1278.63134610476;708.90 0593626505;1628.05467385432;...
1111.49513826284;1085.05436048738;677.16 5122290554;1333.75675784094;...
1011.42760373481;2025.84921777301;1048.4 4482935552;1487.56467669089;...
865.854706709302];
Также даны координаты соответствующих им звезд из звездного каталога (так называемые касательные координаты)
ksi = [-0.00177125211232029;-0.00206322934695087;0.00473913399093646; ...
-0.00601749043634304;0.000157868220046978 ;0.000515608551338780;...
0.00551509964495512;-0.00219912745152696;0.00161263076682773; ...
-0.0102583777847377;0.00174325618484486;-0.00337220398854547;0.00393564842416236];
eta = [0.0106999031728756;0.00928980794269559;0 .00768190537828318;0.00647145128529888;. ..
0.00484543956364809;0.00403172402574688; 0.000649105938702624;0.00022072833958479 7;...
1.59288283345720e-05;-0.00133289445972328;-0.00999081627722155;-0.0109913799152086;...
-0.0107671275937988];

Эти две области связаны между собой через аффинные или проективные преобразования.
Коэффициенты аффинного преобразования я нахожу просто через МНК
https://www.cyberforum.ru/cgi-bin/latex.cgi?\xi = a1 + b1 * x + c1 * y; <br />
\eta = a2 + b2 * x + c2 * y.
Коэффициенты проективного преобразования тоже надо найти через МНК
https://www.cyberforum.ru/cgi-bin/latex.cgi?\xi = (a1 + b1 * x + c1 * y) / (1 + d * x + e * y);<br />
\eta = (a2 + b2 * x + c2 * y) / (1 + d * x + e * y),
но, пока никак не получается. Плиз, помогите
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2015, 11:56
Ответы с готовыми решениями:

Преобразование изображения по гистограмме. Гиперболическое преобразование гистограммы
Добрый день уважаемые пользователи. При изучении путей обработки и фильтрации изображений в Матлабе столкнулся с такой проблемой. Задание:...

Проективное преобразование изображения
Добрый день. Как правильно сделать простейшее проективное преобразование изображения? Например вот так: Нашел пару...

Проективное отображение прямой
Проективное отображение прямой x на прямую {x}^{'} задано тремя парами соответственных точек: A(1;1;2), B(0;2;1), C(-1;3;0),...

11
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
10.12.2015, 18:39
Цитата Сообщение от murzik07 Посмотреть сообщение
Коэффициенты аффинного преобразования я нахожу просто через МНК
Не понял, как вы нашли коэффициенты, если даны только два независимых вектора?
0
52 / 47 / 19
Регистрация: 05.04.2015
Сообщений: 227
11.12.2015, 10:11  [ТС]
возьмем первое уравнение
https://www.cyberforum.ru/cgi-bin/latex.cgi?\xi = a1 + b1 * x + c1 * y
если подставить xi, x и y то получится
https://www.cyberforum.ru/cgi-bin/latex.cgi?\xi1 = a1 + b1 * x1 + c1 * y1;<br />
\xi2 = a1 + b1 * x2 + c1 * y2;<br />
.............................<br />
\xi13 = a1 + b1 * x13 + c1 * y13.
13 уравнений с тремя неизвестными. Система переопределена и надо использовать МНК.
Либо можно сразу решить в матричном виде, либо найти производные и использовать метод Крамера и т.д.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
11.12.2015, 21:42
Цитата Сообщение от murzik07 Посмотреть сообщение
Либо можно сразу решить в матричном виде, либо найти производные и использовать метод Крамера и т.д.
Либо воспользоваться CurveFittingToolbox.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
p1=fit([x,y],ksi,'poly11')
 
     Linear model Poly11:
     p1(x,y) = p00 + p10*x + p01*y
     Coefficients (with 95% confidence bounds):
       p00 =     0.01284  (0.01284, 0.01284)
       p10 =   6.663e-07  (6.647e-07, 6.679e-07)
       p01 =  -1.174e-05  (-1.174e-05, -1.174e-05)
 
q1=fit([x,y],eta,'poly11')
 
     Linear model Poly11:
     q1(x,y) = p00 + p10*x + p01*y
     Coefficients (with 95% confidence bounds):
       p00 =     0.01206  (0.01206, 0.01206)
       p10 =  -1.174e-05  (-1.174e-05, -1.174e-05)
       p01 =  -6.668e-07  (-6.681e-07, -6.654e-07)
 
P=fittype('(a1+b1*x+c1*y)/(1+d1*x+e1*y)',...
'dependent',{'z'},'independent',{'x','y'},...
'coefficients',{'a1','b1','c1','d1','e1'});
p2=fit([x,y],ksi,P)
 
     General model:
     p2(x,y) = (a1+b1*x+c1*y)/(1+d1*x+e1*y)
     Coefficients (with 95% confidence bounds):
       a1 =      0.0127  (0.01239, 0.01301)
       b1 =   6.569e-07  (6.099e-07, 7.039e-07)
       c1 =   -1.16e-05  (-1.189e-05, -1.132e-05)
       d1 =  -6.416e-06  (-2.092e-05, 8.086e-06)
       e1 =  -8.071e-06  (-2.286e-05, 6.719e-06)
 
q2=fit([x,y],eta,P)
 
     General model:
     p2(x,y) = (a2+b2*x+c2*y)/(1+d2*x+e2*y)
     Coefficients (with 95% confidence bounds):
       a2 =      0.0127  (0.01239, 0.01301)
       b2 =   6.569e-07  (6.099e-07, 7.039e-07)
       c2 =   -1.16e-05  (-1.189e-05, -1.132e-05)
       d2 =  -6.416e-06  (-2.092e-05, 8.086e-06)
       e2 =  -8.071e-06  (-2.286e-05, 6.719e-06)
0
52 / 47 / 19
Регистрация: 05.04.2015
Сообщений: 227
14.12.2015, 10:42  [ТС]
Centurio, спасибо.
Но возникают пара вопросов:
1. Как сделать так, чтобы извлечь значения коэффициентов? Модель аппроксимации и т.п. инфо не нужно. Мне нужно на выходе а1 =..., в1 = ..., с1 = ...
2. При запуске проективного преобразования выдается сообщение 'Warning: Start point not provided, choosing random start point' и каждый раз при запуске коэффициенты разные!!! Это естественно не годится.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
14.12.2015, 11:23
Цитата Сообщение от murzik07 Посмотреть сообщение
Как сделать так, чтобы извлечь значения коэффициентов?
Функция coeffvalues(p1) (или q1, p2, q2 в зависимости от имени приближения).
Цитата Сообщение от murzik07 Посмотреть сообщение
При запуске проективного преобразования выдается сообщение 'Warning: Start point not provided, choosing random start point' и каждый раз при запуске коэффициенты разные!!! Это естественно не годится.
Задайте первоначальные приближения для коэффициентов, например, для всех коэффициентов взять 0:
Matlab M
1
p2=fit([x,y],ksi,P,'StartPoint',zeros(1,5))
0
52 / 47 / 19
Регистрация: 05.04.2015
Сообщений: 227
14.12.2015, 11:52  [ТС]
Теперь самый главный вопрос, который никак не получается. Как было сказано вначале, проективное преобразование - это преобразование с 8 параметрами.
Matlab M
1
2
3
4
5
6
7
8
9
P = fittype('(a1 + b1 * x + c1 * y) / (1 + d * x + e * y)',...
'dependent', {'z'}, 'independent', {'x', 'y'},...
'coefficients', {'a1', 'b1', 'c1', 'd', 'e'});
p2 = fit([x, y], ksi, P, 'StartPoint', zeros(1, 5));
 
 P1 = fittype('(a2 + b2 * x + c2 * y) / (1 + d * x + e * y)',...
'dependent', {'z'}, 'independent', {'x', 'y'},...
'coefficients', {'a2', 'b2', 'c2', 'd', 'e'});
q2 = fit([x, y], eta, P1, 'StartPoint', zeros(1, 5));
если я вот так делаю коэффициенты d и e в обоих случаях получаются разные! Тогда уже не 8 параметров определяются, а 10! Можно ли во втором случае учесть уже найденные d и e из первого уравнения?

Добавлено через 10 минут
добавлю еще следующее... Кроме приведенных выше двух преобразований, есть еще третье преобразование - преобразование Гельмерта (4 параметра).
https://www.cyberforum.ru/cgi-bin/latex.cgi?\xi = a1 + b1 * x - c1 * y;  <br />
\eta = a2 + c1 * x + b1 * y.
Здесь та же самая проблема. Коэффициенты b1 и c1 определенные из двух уравнений - разные! Поэтому, как учесть найденные коэффициенты b1 и c1 для второго уравнения?
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
14.12.2015, 12:02
Цитата Сообщение от murzik07 Посмотреть сообщение
Можно ли во втором случае учесть уже найденные d и e из первого уравнения?
Конечно, можно. Для этого значения d и e, найденные из первого уравнения поставьте вместо d и e при задании fittype второй функции. Естественно, надо там же убрать имена этих коэффициентов из списка, а в функции fit оставить первоначальные приближения только для трёх коэффициентов (zeros(1,3)).
То же действует и для 4-й функции.
0
52 / 47 / 19
Регистрация: 05.04.2015
Сообщений: 227
14.12.2015, 12:14  [ТС]
вот я все вроде правильно делаю, но...
Matlab M
1
2
3
4
5
6
7
8
9
10
11
P = fittype('(a1 + b1 * x + c1 * y) / (1 + d * x + e * y)',...
'dependent', {'z'}, 'independent', {'x', 'y'},...
'coefficients', {'a1', 'b1', 'c1', 'd', 'e'});
p2 = fit([x, y], ksi, P, 'StartPoint', zeros(1, 5));
 
d = p2.d; % можно и так извлечь коэффициенты
e = p2.e;
 P1 = fittype('(a2 + b2 * x + c2 * y) / (1 + d * x + e * y)',...
'dependent', {'z'}, 'independent', {'x', 'y'},...
'coefficients', {'a2', 'b2', 'c2'});
q2 = fit([x, y], eta, P1, 'StartPoint', zeros(1, 3));
выдает какую то мегаошибку(
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
14.12.2015, 15:09
murzik07, вы в формуле задания fittype для Р1 оставили коэффициенты d и e в виде буквенных обозначений, а надо было подставить полученные численные значения.
0
52 / 47 / 19
Регистрация: 05.04.2015
Сообщений: 227
14.12.2015, 17:26  [ТС]
спасибо, все работает. Но, возникает небольшая проблема. Дело в том, что значения d и e я ввожу вручную. И это скажем так не очень хорошо, так как входные данные для другого случая будут отличаться и соответственно d и e будут другие. А каждый раз их менять вручную - это совсем не хорошо...
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
14.12.2015, 18:44
Лучший ответ Сообщение было отмечено murzik07 как решение

Решение

murzik07,
Matlab M
1
2
3
4
P1 = fittype('(a2 + b2 * x + c2 * y) / (1 + d * x + e * y)',...
'problem',{'d','e'},'dependent', {'z'}, 'independent', {'x', 'y'},...
'coefficients', {'a2', 'b2', 'c2'});
q2 = fit([x, y], eta, P1,'problem',{d,e},'StartPoint', zeros(1, 3));
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.12.2015, 18:44
Помогаю со студенческими работами здесь

Символическое дифференцирование-ввод формулы в связный список, преобразование в ПОЛИЗ, обратное преобразование
Прошу помогите мне. Символическое дифференцирование-ввод формулы в связный список, преобразование в ПОЛИЗ, обратное преобразование в...

Преобразование звукового сигнала в спектр (Фурье-преобразование)
Доброго времени суток! Мне необходимо преобразовать звуковой файл в спектр, а как и с чего начать я не понимаю

Нормальное преобразование/ортогональное преобразование
Добрый день. Немного запутался в обозначениях в процессе изучения алгебры и хотел бы задать такие вопросы: ...

Быстрое преобразование Фурье и ошибка "Неявное преобразование типа"
А подскажите еще по одной прблемке: Есть программа реализующая БПФ (ну должна по крайней мере это делать) using System; using...

Z-преобразование и преобразование Фурье
Здравствуйте Изучаю цифровую обработку сигналов по учебнику. В одной из глав посвященной связи между z преобразованием и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru