Аффинные преобразования - математика

Обсуждение материалов сайта: вопросы, замечания, предложения
Ответить
updates-bot
Bot
Сообщения: 276
Зарегистрирован: 03 фев 2008, 23:13
Репутация: 3

Аффинные преобразования - математика

Сообщение updates-bot » 29 дек 2008, 00:24

Обсуждение статьи "Аффинные преобразования - математика"

http://gis-lab.info/qa/affine-math.html

Shasoft
Интересующийся
Сообщения: 37
Зарегистрирован: 24 июл 2009, 14:47
Репутация: 0

Re: Аффинные преобразования - математика

Сообщение Shasoft » 16 ноя 2009, 21:29

А нет ли формулы для получения обратных коофицентов по известным прямым коофицентам?
А то хранить лишних 6 коофицентов в БД не хочется.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Аффинные преобразования - математика

Сообщение AndreyL » 20 ноя 2009, 02:15

А в чем проблема? Сложно решить систему двух линейных уравнений? Ну ладно.

Если прямое преобразование

Код: Выделить всё

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: Аффинные преобразования - математика

Сообщение Донецков » 08 июл 2012, 11:15

Может кто выложит ссылку на готовую реализацию вычисления параметров аффинного преобразования в Excel?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Аффинные преобразования - математика

Сообщение Александр Мурый » 08 июл 2012, 11:36

Донецков писал(а):Может кто выложит ссылку на готовую реализацию вычисления параметров аффинного преобразования в Excel?
Насколько я понял, вот и ещё вот.
Редактор материалов, модератор форума

Донецков
Гуру
Сообщения: 3058
Зарегистрирован: 19 май 2010, 19:44
Репутация: 189

Re: Аффинные преобразования - математика

Сообщение Донецков » 08 июл 2012, 12:02

Спасибо...
Может кому будет интересно:
PC-AffineTrans

Аватара пользователя
asgs
Участник
Сообщения: 89
Зарегистрирован: 04 авг 2010, 06:35
Репутация: 1
Контактная информация:

Re: Аффинные преобразования - математика

Сообщение asgs » 20 дек 2012, 05:01

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

liri138
Новоприбывший
Сообщения: 1
Зарегистрирован: 06 апр 2018, 11:40
Репутация: 0
Откуда: UK

Re: Аффинные преобразования - математика

Сообщение liri138 » 06 апр 2018, 11:44

картинки с формулами на сайте отвалились :cry:

Worldmaster
Новоприбывший
Сообщения: 2
Зарегистрирован: 19 дек 2022, 12:53
Репутация: 0
Откуда: Россия

Re: Аффинные преобразования - математика

Сообщение Worldmaster » 19 дек 2022, 12:55

Здравствуйте. А есть у кого нибудь реализация или хотя бы описание варианта для количества точек больше 3?
Очень нужно.

gamm
Гуру
Сообщения: 4044
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1049
Ваше звание: программист
Откуда: Казань

Re: Аффинные преобразования - математика

Сообщение gamm » 19 дек 2022, 18:00

реализация есть в любой стат.системе, хоть в R, хоть в Python. А описание в любом учебнике по статистике, ищем метод наименьших квадратов решения переопределенных систем линейные уравнений, например тыц.

Worldmaster
Новоприбывший
Сообщения: 2
Зарегистрирован: 19 дек 2022, 12:53
Репутация: 0
Откуда: Россия

Re: Аффинные преобразования - математика

Сообщение Worldmaster » 20 дек 2022, 10:14

Спасибо. А может есть какой нибудь примерчик рабочий??

gamm
Гуру
Сообщения: 4044
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1049
Ваше звание: программист
Откуда: Казань

Re: Аффинные преобразования - математика

Сообщение gamm » 20 дек 2022, 14:59

Код: Выделить всё

> 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  

Ответить

Вернуться в «Материалы сайта»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей