我有两个想要计算仿射运动模型参数的图像。我使用的模型是$$ x'= a_1x + a_2y + a_3 $$ $$ y'= a_4x + a_5y + a_6 $$为了计算这6个参数,我在两个图像之间选取了6个点(超定系统),并进行了计算这些参数使用MATLAB(A = X \ X_primes)。但是,当我应用转换时,即使我选择的点(X)也不会转换为指定的位置(X_prime)。我推断我的最小二乘解决方案应该是错误的,我正在寻找如何使其更好,即我应该在图像上选择什么样的点来获得更好的仿射运动模型参数?

X“= a1x + a2ÿ+ a3X“=一个1X+一个2ÿ+一个3

ÿ“= a4x + a五ÿ+ a6ÿ“=一个4X+一个五ÿ+一个6

为了计算这6个参数,我在两个图像之间选取了6个点(超定系统),并使用MATLAB(A = X \ X_primes)计算这些参数。但是,当我应用转换时,即使我选择的点(X)也不会转换为指定的位置(X_prime)。我推断我的最小二乘解决方案应该是错误的,我正在寻找如何使其更好,即我应该在图像上选择什么样的点来获得更好的仿射运动模型参数?

用线性最小二乘法求解仿射变换

\(\)

线性最小二乘法是一种将模型拟合到数据的方法,其中数据和未知参数之间的关系可以以线性形式表示。
\(Ax = b \) \(X ^ {*} = \ underset {x} {\ mathrm {argmin}} = \ | Ax-b \ | ^ {2} =(A ^ {T} A)^ { -1} A ^ {T} b \)A x = b
X*= a r g m i nX= ∥ 甲X - b ∥2= (A.ŤA )- 1一个Ťb

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

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

function M= affine_least_square(x0,y0, x1,y1, x2,y2, xp0,yp0, xp1,yp1, xp2,yp2)

% This function finds the affine transform between three points

% an affine transformation with a 3x3 affine transformation matrix:

%

% [M11 M12 M13]

% [M21 M22 M23]

% [M31 M32 M33]

%Since the third row is always [0 0 1] we can skip that.

% [x0 y0 1  0  0  0 ]     [M11]   [xp0]

% [0  0  0  x0 y0 1 ]     [M12]   [yp0]

% [x1 y1 1  0  0  0 ]     [M13]   [xp1]

% [0  0  0  x1 y1 1 ]  *  [M21] = [yp1]

% [x2 y2 1  0  0  0 ]     [M22]   [xp2]

% [0  0  0  x2 y2 1 ]     [M23]   [yp2]

%         A            *    X   =  B

%A -> 6x6

%X -> 6x1 in fact

%X=A\B

A=[x0 y0 1  0  0  0 ; 0  0  0  x0 y0 1 ; x1 y1 1  0  0  0 ; 0  0  0  x1 y1 1 ; x2 y2 1  0  0  0;0  0  0  x2 y2 1];

B=[xp0; yp0; xp1;  yp1; xp2 ; yp2 ];

% X=A\B;

% this is what we need but accroding to https://www.mathworks.com/matlabcentral/newsreader/view_thread/170201

%The following is better:

X=pinv(A)*B;

M11 =X(1,1);

M12 =X(2,1);

M13 =X(3,1);

M21 =X(4,1);

M22 =X(5,1);

M23 =X(6,1);

M=[ M11 M12 M13; M21 M22 M23; 0 0 1];

end

并测试代码:

MATLAB

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

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

clc;

clear all;

%This is a simple test that project 3 point with an affine trasnform and

%then tries to find the transformation:

% tform.T and M' should be equal

%Points are located at:

x0=0;

y0=0;

x1=1;

y1=0;

x2=0;

y2=1;

p1=[x0,y0; x1,y1; x2,y2];

%We rotate them (a roll-rotation around Z axes) theta degree, first

%building the rotation matrix

theta=24;

A11=cosd(theta);

A12=-sind(theta);

A21=sind(theta);

A22=cosd(theta);

%Translation part

Tx=1;

Ty=2;

tform = affine2d([A11 A12 0; A21 A22 0; Tx Ty 1]);

fprintf('3x3 transformation matrix:')

tform.T

[x,y]=transformPointsForward(tform,p1(:,1),p1(:,2));

fprintf('transformed points:')

[x,y]

xp0=x(1,1);

yp0=y(1,1);

xp1=x(2,1);

yp1=y(2,1);

xp2=x(3,1);

yp2=y(3,1);

%finding the tranformation matrix from set of points and their respective

%transformed points:

M=affine_least_square(x0,y0, x1,y1, x2,y2, xp0,yp0, xp1,yp1, xp2,yp2);

fprintf('3x3 affine transformation matrix from least_squares:')

M'

tform = affine2d(M');

[x,y]=transformPointsForward(tform,p1(:,1),p1(:,2));

在两幅图像之间获得正确(最小二乘意义)仿射变换参数affine points via least square method相关推荐

  1. Python 使用skimage实现求两幅图像之间的PSNR值

    前言 课程作业中需要对去噪图像与原图像之间的对比进行说明 这里选择的是利用PSNR值进行比较 借用Python中skimage库实现 peak_signal_noise_ratio(img_origi ...

  2. python双重直方图_Python 2.x中两幅图像的直方图匹配?

    我以前写过一个答案here解释如何在图像直方图上进行分段线性插值,以实现高光/中音/阴影的特定比率. 两幅图像之间histogram matching的基本原理相同.基本上,计算源图像和模板图像的累积 ...

  3. OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))

    Mat - 基本图像容器 目的 从真实世界中获取数字图像有很多方法,比如数码相机.扫描仪.CT或者磁共振成像.无论哪种方法,我们(人类)看到的是图像,而让数字设备来"看"的时候,则 ...

  4. 比较两幅图像的相似度

    现在以图搜图的功能比较火热,很好奇其原理. 简单的搜索学习得知,实现相似图片搜索的关键技术是"感知哈希算法",作用是对每一张图片按照某种规律生成一个对应的指纹字符串.比较不同图片之 ...

  5. 相机计算坐标公式_相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标...

    关键词:相机位姿估计,单目尺寸测量,环境探知 用途:基于相机的环境测量,SLAM,单目尺寸测量 文章类型:原理说明.Demo展示 @Author:VShawn @Date:2016-11-28 @La ...

  6. 计算两幅图像的PSNR和SSIM以及python代码实现

    欢迎关注博主的公众号:happyGirl的异想世界.有更多干货还有技术讨论群哦~ psnr是"Peak Signal to Noise Ratio"的缩写,即峰值信噪比,是一种评价 ...

  7. 如何计算两幅图像的相似度,计算两张图片相似度

    怎么对比两张图片的相似度 1.首先打开微信,选择底部"发现".如图所示.2.然后在点击进入"小程序".如图所示.3.然后输入"腾讯AI体验中心&quo ...

  8. 使用OpenCV计算两幅图像的协方差

    要计算协方差首先要知道协方差的数学原理. 定义 Cov(X,Y) = E{ [X-E(X)][Y-E(Y)] }为随机量X与Y的协方差. 其中E(X)为随机变量X的期望(均值),E(Y)为随机变量Y的 ...

  9. 【python图像处理】两幅图像的合成一幅图像(blending two images)

    将两幅图像合成一幅图像,是图像处理中常用的一种操作,python图像处理库PIL中提供了多种种将两幅图像合成一幅图像的接口. 下面我们通过不同的方式,将两图合并成一幅图像. 1.使用Image.ble ...

最新文章

  1. Ubuntu 划词翻译
  2. 2018-3-27 专家系统
  3. hdu 4513(manacher+dp)
  4. 解决链接模型的可见性问题
  5. Linux下CMAKE编译jsoncpp,使用CMake引入jsoncpp
  6. 洛谷 2719 搞笑世界杯
  7. 如何升级成鸿蒙,如何将自己的华为手机升级成鸿蒙系统
  8. HTML离线缓存( applicationCache)
  9. 二级考试c语言100题,国家计算机二级考试 C语言上机100题
  10. 使用数据模板自定义数据显示
  11. 空气培养皿采样后保存_六级撞击式微生物采样器是什么?用途有哪些?
  12. 一、RabbitMQ安装
  13. Windows移动开发(二)——闭关修炼
  14. 在线选课网站用什么服务器,高校网上选课系统 PC服务器替代小型机
  15. js 获取url参数_小总结 - JS获取页面URL信息
  16. 王道计算机网络 电子版,2021王道.考研复习指导.数据结构.操作系统.计算机组成原理.计算机网络.计算机考研PDF电子版无水印图...
  17. linux13:(1.0k)ISO映像文件,镜像文件
  18. 舱机器人尾巴毛茸茸_『新奇玩意』毛茸茸的机器人不仅可撸,还会摇尾巴
  19. linux权限 rwxr xr x,Linux 中的-rwxr-xr-x权限代表什么意思
  20. 基于阿里云LinkWAN实现设备上云(1) LinkWAN平台简析

热门文章

  1. 每隔一定时间执行一次函数_python — 轮询执行某函数的方法
  2. linux shell rman删除归档_Oracle备份恢复必会--rman迁移,附实验步骤介绍
  3. yum clean all之后出错_“之后”英语的4种表达方式?
  4. 从键盘输入一行字符,写入到string.txt文本文件中
  5. 函数实现十进制转二进制
  6. linux0.11内核编译,编译Linux-0.11内核
  7. Android端访问服务器核心代码
  8. gradle build connection reset or protocol_version build failure
  9. 搭建高可用web和数据库集群
  10. vue从创建到完整的饿了么(12)miste.vue