【MATLAB】【函数介绍】cp2tform函数从控制点对推断空间变换

2023-09-19 11:02:43

官方链接:https://ww2.mathworks.cn/help/images/ref/cp2tform.html?s_tid=doc_ta.

cp2tform函数的作用是根据传入的控制点对的坐标推断空间变换参数。

函数语法如下:

 从控制点对推断空间变换,并将此变换作为tform结构返回,有些转换类型具有可选的富家参数transformationType,比如下面的语法所示
tform = cp2tform(movingPoints, fixedPoints, transformationType)
 指定要使用的多项式的顺序进行空间变换
tform = cp2tform(movingPoints, fixedPoints, 'polynomial', degree)
 通过使用相邻控制点在每个控制点推断多项式来创建映射。任何位置的映射都取决于这些多项式的加权平均值,可以选择用于推断每个多项式的点数n,n个最接近的点用于推断每个控制点对的2阶多项式
tform = cp2tform(movingPoints, fixedPoints, 'lwm', n));
 创建固定控制点的Delaunay三角测量,并将相应的移动控制点映射到固定控制点。映射对于每个三角形是线性当设的,并且在控制点上是连续的,但由于每个三角形都有自己的映射,所以不连续可微
tform = cp2tform(movingPoints, fixedPoints, 'piecewise linear')
 在usedMP和usedFP中返回用于分段线性变换的控制点,还在badMP和badFP中返回被相处的控制点,因为它们是退化折叠三角形的重点顶点
[tform, usedMP, usedFP, badMP, badFP] = cp2tform(movingPoints, fixedPoints, 'piecewise linear')
 使用cpstruct结构来存储运动图像和固定运动图像的控制点坐标
tform = cp2tform(cpstruct, transformationType,____)
 在usedMP和usedFP中返回用于转换的控制点,不使用不匹配点和预测点。
[tform, usedMP, usedFP] = cp2tform(cpstruct, transformationType, ____)

参数说明:

输入参数:

  • movingPoints:要配准或运动图像中的控制点,指定为 m × 2 m \times 2 m×2矩阵,每一行指定一个控制点的[x y]坐标,数据类型为double类型。示例:[11 11; 41 71]
  • fixedPoints:基准或固定图像中的控制点,指定为 m × 2 m \times 2 m×2矩阵,每一行指定一个控制点的[x y]坐标,数据类型为double类型。示例:[14 44; 70 81]
  • tranformationType:转换类型,指定为以下类型之一,按复杂性增加的顺序列出。cp2tform函数需要最小数量的控制点对来推断每个变换类型的结构。

表1-转换类型及其说明

转换类型描述控制点对的最小数量
nonreflective similarity非反射相似性, 当运动图像中的形状不变时,但图像因平移、旋转和缩放的某些组合而失真时,请使用此变换。直线保持直线,平行线仍然平行2
similarity与添加可选反射的非反射性相似相同3
affine当输入图像中的形状展示出错效果使用本变换。变换后直线仍然是直线,平行线仍为平行线,但矩形变成了平行四边形3
projective当场景显得倾斜时使用本变换,变换后直线仍然为直线,但平行线不再平行4
polynomial当图像中的对象发生弯曲时使用本变换。拟合中选用的多项式的阶数越高,拟合效果越好,但配准后的图像比基准图像包含更多的曲线,同时也需要更多的基准点对6-二阶
10-三阶
15-四阶
piecewise linear当图像呈现分段变形现象时使用本变换4
lwm当图像中的变形具有局部化特点,并且分段线性条件不够充分时考虑使用本变换6,建议12
  • cpstruct:余弦选定的控制点,指定为一个结构,cpstruct中包含关于运动图像和固定图像中所有控制点的x和y做白哦的信息,包括未配对和预测的控制点。cpstruct2pairs函数消除不匹配和预测的控制点,并返回一组有效的控制点对。cpstruct是控制点选择工具在选择将点到处到工作区选项时生成的结构。
  • degree:多项式变换的次数,指定为整数2、3、4,可以是matlab支持的数值类型。
  • n:在局部加权平均值计算中使用的点数,指定为正整数,n可以小到6,但使n小有生成病态多项式的风险。

输出参数:

  • tform:TFORM结构,作为TFORM结构返回;
  • usedMP:用于推断空间变换的移动控制点,以 n × 2 n \times 2 n×2的矩阵的形式返回,不使用不匹配点和预测点;
  • usedFP:用于推断空间变换的固定控制点,以 n × 2 n \times 2 n×2的矩阵形式返回,不使用不匹配点和预测点;
  • badMP:由于被确定为异常值而被消除的移动控制点,以 p × 2 p \times 2 p×2的矩阵形式返回;
  • badFP:固定的控制点由于被确定为异常值而被消除,并以 p × 2 p \times 2 p×2的矩阵形式返回;

使用示例

使用控制点创建无反射相似性转换结构

%% cp2tform 函数获取图像转换结构
clc; close all; format compact;
I = checkerboard;  % 加载棋盘格图片
J = imrotate(I, 30);  % 逆时针旋转30°
figure; 
subplot(1,2,1); imshow(I, []); title('原始图片');
subplot(1,2,2); imshow(J, []); title('逆时针旋转30°');
fixedPoints = [11 11; 41 71];  % 固定控制点对
movingPoints  = [14 44; 70 81];  % 移动控制点对

cpselect(J, I, movingPoints, fixedPoints);
% 获取非反射相似性变换,使用cp2tform函数返回变换,
% 并将tform的角度和和比例与原始变换的角度和规模进行比较
t = cp2tform(movingPoints, fixedPoints, 'nonreflective similarity');
% 使用一组有效的移动和固定控制点对启动控制点选择工具,可以以交互式添加控制点

% 通过检查平行于x轴的单位向量的旋转和拉伸方式,恢复角度和比例
u = [0 1];
v = [0 0];
[x y] = tformfwd(t, u, v); % 将t中的空间变换作用于u和v,将结果返回给x和y
dx = x(2) - x(1);
dy = y(2) - y(1);
angle = (180 / pi) * atan2(dy, dx)
scale = 1 / sqrt(dx ^2 + dy^2)

显示结果:

angle =
   29.9816
scale =
    1.0006

在这里插入图片描述

更多推荐

Solid框架节点级响应性

前言随着组件化、响应式、虚拟DOM等技术思想引领着前端开发的潮流,相关的技术框架大行其道,就以目前主流的Vue、React框架来说,它们都基于组件化、响应式、虚拟DOM等技术思想的实现,但是具有不同开发使用方式以及实现原理,这里就不再赘述了相关内容,这里关注的焦点在于虚拟DOM。无论是Vue还是React都应用虚拟DO

matlab检索相似图像

在Matlab中检索相似图像通常需要使用图像处理和计算机视觉技术。以下是一种常见的方法,可以帮助您在Matlab中进行相似图像检索:准备图像数据库:首先,您需要有一个包含待检索图像的图像数据库。这些图像应该经过预处理,例如调整大小和标准化,以确保它们具有一致的特征。提取图像特征:对于每张图像,使用Matlab的图像处理

进销存ERP系统源码 基于springboot+vue开发

进销存ERP系统源码基于springboot+vue开发技术框架Springboot2.2.2.RELEASEMyBatis-plus3.4.2Spring-session-data-redis2.2.0.RELEASEHuTool5.7.17Lombok1.18.10EasyExcel2.2.10JDK1.8Mysq

【cmake开发(6)】Cmakelists 使用 gcc/g++指定版本,find_package 基本原理

我们在《【cmake开发(5)】cmake设置常规变量、环境变量、内置变量;cmake带参数编译和-D选项;c++源码通过-D选项的宏定义进行条件编译》中提到了变量。文章目录回顾一、指定编译器二、find_package基本原理2.1如果不使用find_package2.2如果使用find_package2.3find

Dubbo学习(二)——dubbo环境搭建

文章目录dubbo核心简介SpringCloud与Dubbo的区别Dubbo的架构说明dubbo和Feign远程调用的差异共同点:区别:基于SpringBoot开发微服务应用项目介绍1.启动注册中心2.新建一个springboot项目3.添加Maven依赖4.定义服务接口5.定义服务端的实现实现接口配置服务端Yaml配

搭建Android自动化python+appium环境

一.需要软件JDK:JAVA安装后配置JDK环境SDK:SDK下载后配置adb环境Python:pyhton语言Pycharm:python脚本编译工具Appium-python-client:pyhton中的库Appium客户端二.搭建步骤1.配置JDK环境①.下载安装java:https://www.oracle.

【vue2第十八章】VueRouter 路由嵌套 与 keep-alive缓存组件(activated,deactivated)

VueRouter路由嵌套在使用vue开发中,可能会碰到使用多层级别的路由。比如:其中就包含了两个主要页面,首页,详情,但是首页的下面又包含了列表,喜欢,收藏,我的四个子路由。此时就需要配置子路由通过使用children:importVuefrom'vue'importAppfrom'./App.vue'importM

【数据结构】单值二叉树 & 相同的树 & 翻转二叉树(五)

目录一,单值二叉树题目详情:解法:父子比较法解题思路:思路实现:源代码:二,相同的树题目详情:解法:比较法解题思路:思路实现:源代码:三,翻转二叉树解法:替换法解题思路:思路实现:源代码:一,单值二叉树题目详情:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树;只有给定的树是单值二叉树时返回true;否则返

小白的入门二叉树(C语言实现)

前言:二叉树属于数据结构的一个重要组成部分,很多小白可能被其复杂的外表所吓退,但我要告诉你的是“世上无难事,只怕有心人”,我将认真的对待这篇博客,我相信只要大家敢于思考,肯定会有所收获的,当我们攀过一座山,回头看去,可能当初畏惧的大山也不过如此。目录前言:一,树的基本知识1树的概念2,树相关概念二,二叉树的基本知识1,

黄金代理如何选择平台?窍门在这儿

作为一个黄金代理平台,什么才是最重要的呢?笔者认为以下三个方面是最重要的,一个是资质,第二个是口碑,第三个是平台的软件。这三者是成为黄金代理要考虑的最重要的三个因素,也直接关系大黄金代理的职业生涯能不能持续,能不能实现可持续发展。首先来看第一个重要的因素,这个就是现货黄金平台,这是重中之重。现货黄金平台是黄金代理的重要

网站有反爬机制就爬不了数据?那是你不会【反】反爬

目录前言一、什么是代理IP二、使用代理IP反反爬1.获取代理IP2.设置代理IP3.验证代理IP4.设置代理池5.定时更新代理IP三、反反爬案例1.分析目标网站2.爬取目标网站四、总结前言爬虫技术的不断发展,使得许多网站都采取了反爬机制,以保护自己的数据和用户隐私。常见的反爬手段包括设置验证码、IP封锁、限制访问频率等

热文推荐