Аффинные преобразования - математика
- 
				updates-bot
- Bot
- Сообщения: 276
- Зарегистрирован: 03 фев 2008, 23:13
- Репутация: 3
- 
				Shasoft
- Интересующийся
- Сообщения: 37
- Зарегистрирован: 24 июл 2009, 14:47
- Репутация: 0
Re: Аффинные преобразования - математика
А нет ли формулы для получения обратных коофицентов по известным прямым коофицентам?
А то хранить лишних 6 коофицентов в БД не хочется.
			
			
									
						
										
						А то хранить лишних 6 коофицентов в БД не хочется.
- 
				AndreyL
- Завсегдатай
- Сообщения: 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: Аффинные преобразования - математика
Небольшое дополнение - для растров лучше использовать обратное трансформирование, т.е. для каждого пиксела результирующего изображения вычислять положение пиксела на исходном изображении и копировать цвет. Тогда гарантированно не будет пробелов и прочих наложений.
			
			
									
						
							Злобный йожег
			
						- 
				liri138
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 06 апр 2018, 11:40
- Репутация: 0
- Откуда: UK
Re: Аффинные преобразования - математика
картинки с формулами на сайте отвалились  
			
			
									
						
										
						
- 
				Worldmaster
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 19 дек 2022, 12:53
- Репутация: 0
- Откуда: Россия
Re: Аффинные преобразования - математика
Здравствуйте. А есть у кого нибудь реализация или хотя бы описание варианта для количества точек больше 3?
Очень нужно.
			
			
									
						
										
						Очень нужно.
- 
				gamm
- Гуру
- Сообщения: 4177
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Аффинные преобразования - математика
реализация есть в любой стат.системе, хоть в R, хоть в Python. А описание в любом учебнике по статистике, ищем метод наименьших квадратов решения переопределенных систем линейные уравнений, например тыц.
			
			
									
						
										
						- 
				Worldmaster
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 19 дек 2022, 12:53
- Репутация: 0
- Откуда: Россия
Re: Аффинные преобразования - математика
Спасибо. А может есть какой нибудь примерчик рабочий??
			
			
									
						
										
						- 
				gamm
- Гуру
- Сообщения: 4177
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
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  
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей
