Аффинные преобразования - математика
-
- Bot
- Сообщения: 276
- Зарегистрирован: 03 фев 2008, 23:13
- Репутация: 3
-
- Интересующийся
- Сообщения: 37
- Зарегистрирован: 24 июл 2009, 14:47
- Репутация: 0
Re: Аффинные преобразования - математика
А нет ли формулы для получения обратных коофицентов по известным прямым коофицентам?
А то хранить лишних 6 коофицентов в БД не хочется.
А то хранить лишних 6 коофицентов в БД не хочется.
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: Аффинные преобразования - математика
А в чем проблема? Сложно решить систему двух линейных уравнений? Ну ладно.
Если прямое преобразование
то обратное
или
Коэффициенты, надеюсь, очевидны.
Если прямое преобразование
Код: Выделить всё
X = a0 + a1 x + a2 y
Y = b0 + b1 x + b2 y
Код: Выделить всё
x = -((a2*b0 - a0*b2 + b2*X - a2*Y)/(a2*b1 - a1*b2))
y = -((-(a1*b0) + a0*b1 - b1*X + a1*Y)/(a2*b1 - a1*b2))
Код: Выделить всё
x = -((a2*b0 - a0*b2)/(a2*b1 - a1*b2)) - X*b2/(a2*b1 - a1*b2) + Y*a2/(a2*b1 - a1*b2)
y = -((-(a1*b0) + a0*b1)/(a2*b1 - a1*b2)) + X*b1/(a2*b1 - a1*b2) - Y*a1/(a2*b1 - a1*b2)
-
- Гуру
- Сообщения: 3058
- Зарегистрирован: 19 май 2010, 19:44
- Репутация: 189
Re: Аффинные преобразования - математика
Может кто выложит ссылку на готовую реализацию вычисления параметров аффинного преобразования в Excel?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Аффинные преобразования - математика
Насколько я понял, вот и ещё вот.Донецков писал(а):Может кто выложит ссылку на готовую реализацию вычисления параметров аффинного преобразования в Excel?
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 3058
- Зарегистрирован: 19 май 2010, 19:44
- Репутация: 189
- asgs
- Участник
- Сообщения: 89
- Зарегистрирован: 04 авг 2010, 06:35
- Репутация: 1
- Контактная информация:
Re: Аффинные преобразования - математика
Небольшое дополнение - для растров лучше использовать обратное трансформирование, т.е. для каждого пиксела результирующего изображения вычислять положение пиксела на исходном изображении и копировать цвет. Тогда гарантированно не будет пробелов и прочих наложений.
Злобный йожег
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 06 апр 2018, 11:40
- Репутация: 0
- Откуда: UK
Re: Аффинные преобразования - математика
картинки с формулами на сайте отвалились
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 19 дек 2022, 12:53
- Репутация: 0
- Откуда: Россия
Re: Аффинные преобразования - математика
Здравствуйте. А есть у кого нибудь реализация или хотя бы описание варианта для количества точек больше 3?
Очень нужно.
Очень нужно.
-
- Гуру
- Сообщения: 4141
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1101
- Ваше звание: программист
- Откуда: Казань
Re: Аффинные преобразования - математика
реализация есть в любой стат.системе, хоть в R, хоть в Python. А описание в любом учебнике по статистике, ищем метод наименьших квадратов решения переопределенных систем линейные уравнений, например тыц.
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 19 дек 2022, 12:53
- Репутация: 0
- Откуда: Россия
Re: Аффинные преобразования - математика
Спасибо. А может есть какой нибудь примерчик рабочий??
-
- Гуру
- Сообщения: 4141
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1101
- Ваше звание: программист
- Откуда: Казань
Re: Аффинные преобразования - математика
Код: Выделить всё
> x.old = runif(20,1000,2000)
> y.old = runif(20,3000,7000)
> a10= 330; a11= 1.3; a12=-0.5;
> a20=-567; a21=-0.7; a22= 0.3;
>
> mtr = rbind(c(a10,a20),
+ c(a11,a21),
+ c(a12,a22) )
> print(mtr)
[,1] [,2]
[1,] 330.0 -567.0
[2,] 1.3 -0.7
[3,] -0.5 0.3
>
> coord.old = cbind(rep(1,length(x.old)),x.old,y.old)
> coord.new = coord.old %*% mtr
>
> x.new = coord.new[,1]
> y.new = coord.new[,2]
>
> coef.x.forw = coef(lm(x.new~1+x.old+y.old))
> coef.y.forw = coef(lm(y.new~1+x.old+y.old))
> print(rbind(coef.x.forw,coef.y.forw))
(Intercept) x.old y.old
coef.x.forw 330 1.3 -0.5
coef.y.forw -567 -0.7 0.3
>
> coef.x.back = coef(lm(x.old~1+x.new+y.new))
> coef.y.back = coef(lm(y.old~1+x.new+y.new))
> print(rbind(coef.x.back,coef.y.back))
(Intercept) x.new y.new
coef.x.back 4612.5 7.5 12.5
coef.y.back 12652.5 17.5 32.5
>
> mtr.back = cbind(coef.x.back,coef.y.back)
> coord.tst = cbind(rep(1,length(x.old)),coord.new) %*% mtr.back
>
> summary(coord.tst - cbind(x.old,y.old))
coef.x.back coef.y.back
Min. :-2.728e-12 Min. :-3.638e-12
1st Qu.:-1.364e-12 1st Qu.:-3.638e-12
Median :-9.095e-13 Median :-2.728e-12
Mean :-9.095e-13 Mean :-2.592e-12
3rd Qu.:-4.547e-13 3rd Qu.:-1.819e-12
Max. : 0.000e+00 Max. : 0.000e+00
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя