在两幅图像之间获得正确(最小二乘意义)仿射变换参数affine points via least square method
我有两个想要计算仿射运动模型参数的图像。我使用的模型是$$ 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相关推荐
- Python 使用skimage实现求两幅图像之间的PSNR值
前言 课程作业中需要对去噪图像与原图像之间的对比进行说明 这里选择的是利用PSNR值进行比较 借用Python中skimage库实现 peak_signal_noise_ratio(img_origi ...
- python双重直方图_Python 2.x中两幅图像的直方图匹配?
我以前写过一个答案here解释如何在图像直方图上进行分段线性插值,以实现高光/中音/阴影的特定比率. 两幅图像之间histogram matching的基本原理相同.基本上,计算源图像和模板图像的累积 ...
- OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))
Mat - 基本图像容器 目的 从真实世界中获取数字图像有很多方法,比如数码相机.扫描仪.CT或者磁共振成像.无论哪种方法,我们(人类)看到的是图像,而让数字设备来"看"的时候,则 ...
- 比较两幅图像的相似度
现在以图搜图的功能比较火热,很好奇其原理. 简单的搜索学习得知,实现相似图片搜索的关键技术是"感知哈希算法",作用是对每一张图片按照某种规律生成一个对应的指纹字符串.比较不同图片之 ...
- 相机计算坐标公式_相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标...
关键词:相机位姿估计,单目尺寸测量,环境探知 用途:基于相机的环境测量,SLAM,单目尺寸测量 文章类型:原理说明.Demo展示 @Author:VShawn @Date:2016-11-28 @La ...
- 计算两幅图像的PSNR和SSIM以及python代码实现
欢迎关注博主的公众号:happyGirl的异想世界.有更多干货还有技术讨论群哦~ psnr是"Peak Signal to Noise Ratio"的缩写,即峰值信噪比,是一种评价 ...
- 如何计算两幅图像的相似度,计算两张图片相似度
怎么对比两张图片的相似度 1.首先打开微信,选择底部"发现".如图所示.2.然后在点击进入"小程序".如图所示.3.然后输入"腾讯AI体验中心&quo ...
- 使用OpenCV计算两幅图像的协方差
要计算协方差首先要知道协方差的数学原理. 定义 Cov(X,Y) = E{ [X-E(X)][Y-E(Y)] }为随机量X与Y的协方差. 其中E(X)为随机变量X的期望(均值),E(Y)为随机变量Y的 ...
- 【python图像处理】两幅图像的合成一幅图像(blending two images)
将两幅图像合成一幅图像,是图像处理中常用的一种操作,python图像处理库PIL中提供了多种种将两幅图像合成一幅图像的接口. 下面我们通过不同的方式,将两图合并成一幅图像. 1.使用Image.ble ...
最新文章
- Ubuntu 划词翻译
- 2018-3-27 专家系统
- hdu 4513(manacher+dp)
- 解决链接模型的可见性问题
- Linux下CMAKE编译jsoncpp,使用CMake引入jsoncpp
- 洛谷 2719 搞笑世界杯
- 如何升级成鸿蒙,如何将自己的华为手机升级成鸿蒙系统
- HTML离线缓存( applicationCache)
- 二级考试c语言100题,国家计算机二级考试 C语言上机100题
- 使用数据模板自定义数据显示
- 空气培养皿采样后保存_六级撞击式微生物采样器是什么?用途有哪些?
- 一、RabbitMQ安装
- Windows移动开发(二)——闭关修炼
- 在线选课网站用什么服务器,高校网上选课系统 PC服务器替代小型机
- js 获取url参数_小总结 - JS获取页面URL信息
- 王道计算机网络 电子版,2021王道.考研复习指导.数据结构.操作系统.计算机组成原理.计算机网络.计算机考研PDF电子版无水印图...
- linux13:(1.0k)ISO映像文件,镜像文件
- 舱机器人尾巴毛茸茸_『新奇玩意』毛茸茸的机器人不仅可撸,还会摇尾巴
- linux权限 rwxr xr x,Linux 中的-rwxr-xr-x权限代表什么意思
- 基于阿里云LinkWAN实现设备上云(1) LinkWAN平台简析
热门文章
- 每隔一定时间执行一次函数_python — 轮询执行某函数的方法
- linux shell rman删除归档_Oracle备份恢复必会--rman迁移,附实验步骤介绍
- yum clean all之后出错_“之后”英语的4种表达方式?
- 从键盘输入一行字符,写入到string.txt文本文件中
- 函数实现十进制转二进制
- linux0.11内核编译,编译Linux-0.11内核
- Android端访问服务器核心代码
- gradle build connection reset or protocol_version build failure
- 搭建高可用web和数据库集群
- vue从创建到完整的饿了么(12)miste.vue