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

2023-11-15

官方链接: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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MATLAB】【函数介绍】cp2tform函数从控制点对推断空间变换 的相关文章

  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • 如何将数据传递给 MATLAB oncleanup 函数?

    我有一个编译好的 matlab 程序 可以自动调整机器参数 在调整周期结束时 我需要恢复一些原始设置 有时会发生意外错误 有时用户会发现调整算法未正常工作 因此应终止 使用 control C 如果发生可预测的错误 我可以使用 try ca
  • 将 kinect RGB 和深度值转换为 XYZ 坐标

    我正在寻找一种简单的方法将 kinect RGB 和深度值转换为 XYZ 坐标 使用 MATLAB 我的目标是一个输入为以下内容的函数 每个点的 RGB 和深度值Kinect相机 并输出 每个点的 x y 和 z 值 RGB 深度 RGB
  • MATLAB 除法...29/128 应该返回 0 吗?

    我真的不认为这是一个精度问题 答案应该是0 226左右 这是确切的代码 val I i j bucketSize pos val bucketSize I只是我从中获取值的矩阵 以下是 MATLAB 的输出 val 29 bucketSiz
  • 在 MATLAB 中绘图后恢复轴

    从文本文件绘制多种方法的输出后 未显示轴的右侧和上侧 我需要拥有它们并将它们加粗 就像当前的轴一样 绘制的数据来自存储每种方法数据的文件 每个数据文件都是一个 256x2 文件 包含 0 1 之间的值 第一列是精度 第二列是召回率 figu
  • 在 Matlab 中保存 Kinect 深度图像?

    通过使用 Kinect 我可以获得深度图像 其中每个深度图像像素存储相机和物体之间的距离 以毫米为单位 现在我想保存它们以便以后使用 最好的推荐是什么 我正在考虑将深度图像保存为图像 jpg png等 然而 该值通常是从50毫米到10000
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • 考虑预分配速度[重复]

    这个问题在这里已经有答案了 我正在做以下事情 for i 1 m index 0 for j 1 n index index values i j 2 j 1 if j 1 symbol chip chip values index 1 e
  • MATLAB问题:在图块中引用变量的值[重复]

    这个问题在这里已经有答案了 可能的重复 matlab 绘图标题中的变量 https stackoverflow com questions 5629458 matlab variable in plot title 我想在图中引用 m 文件
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image
  • MATLAB:图像角坐标和引用元胞数组

    我在比较不同元胞数组中的元素时遇到一些问题 这个问题的背景是我正在使用bwboundariesMATLAB 中的函数可追踪图像的轮廓 该图像是结构横截面 我试图找出整个部分是否具有连续性 即 只有一个轮廓由bwboundaries命令 完成
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • MATLAB 子图标题和轴标签

    我有以下脚本来最终绘制 4 x 2 子图 files getAllFiles preliminaries n size files cases cell 1 n m cell 1 n for i 1 1 n S load files i c
  • Matlab:如何读取以逗号作为小数分隔符的数字?

    我有很多 数十万 相当大 gt 0 5MB 的文件 其中数据是数字 但以逗号作为小数分隔符 使用像这样的外部工具对我来说是不切实际的sed s g 当分隔符是点时 我只使用textscan fid f f f 但我看不到更改小数点分隔符的选
  • 使用正常数据直方图与直接公式进行熵估计(matlab)

    假设我们已经绘制了n 10000标准正态分布的样本 现在我想使用直方图计算其熵来计算概率 1 计算概率 例如使用matlab p x hist samples binnumbers area x 2 x 1 sum p p p area b
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • UDP接收和发送Matlab

    我目前正在努力从外部设备接收数据包 然后将数据发送到另一个设备 我有一个工作 Simulink 模型 但我不知道如何在 Matlab 中对其进行编码 Matlab 中 UDP 接收块的参数如下图所示UDP 接收参数 https i stac
  • 当 MATLAB 变得非常非常忙时,如何中断它?

    我正在运行一个长时间的模拟MATLAB http en wikipedia org wiki MATLAB我意识到我需要停下来重新运行 然而 MATLAB 确实对这种计算很感兴趣 并且它停止了响应 如何在不终止 MATLAB 的情况下中断此
  • Python 中的 eig(a,b) 给出错误“需要 1 个位置参数,但给出了 2 个”

    根据https docs scipy org doc numpy 1 15 0 user numpy for matlab users html https docs scipy org doc numpy 1 15 0 user nump
  • OpenCV功能类似于matlab的“查找”

    我正在寻找 openCV 中的一个函数来帮助我制作图像蒙版 例如在 MATLAB 中 B A or B 零 大小 A B A 10 c 有些功能可以让你通过mask向他们提出论据 按照您描述的方式创建面具 我认为您正在追求Cmp 或 Cmp

随机推荐

  • 计算机网络实验报告 静态路由的配置

    实验名称 静态路由的配置 一 实验目的 1 掌握路由器的配置 2 学会配置静态路由 3 实现静态路由的不同网络间的互通 二 实验内容 1 搭建拓扑图 2 网络拓扑节点IP配置 3 静态路由配置实现不同网络的通信 三 实验环境 GNS3是一款
  • 七大排序之归并排序

    文章目录 什么是归并排序 归并排序代码 归并排序相关习题 148 排序链表 剑指 Offer 51 数组中的逆序对 总结 什么是归并排序 归并排序的思想 将原数组不断拆分 一直拆到每个子数组只有一个元素时 第一阶段结束 然后开始 并 将相邻
  • Databend 开源周报第 110 期

    Databend 是一款现代云数仓 专为弹性和高效设计 为您的大规模分析需求保驾护航 自由且开源 即刻体验云服务 https app databend cn What s On In Databend 探索 Databend 本周新进展 遇
  • 踩坑日记(一)

    1 Vue 错误 Uncaught TypeError Object is not a function at eval vue router esm bundler js vue router版本太高了 需降低版本 降为 3 5 3 可参
  • VUE3 之 条件渲染

    目录 1 概述 2 条件渲染 3 综述 4 个人公众号 1 概述 老话说的好 要锻炼逆向思维 人取我弃 人弃我取 言归正传 今天我们来聊聊 VUE3 的条件渲染 2 条件渲染 2 1 v if div div
  • 全手工杂拌面——韩国才有的中华料理 冬至餐桌上的25道家常手工主食

    这是一道韩国特有的中餐 全手工海鲜杂拌面 面条以鸡蛋 面粉和成 不加一滴水 汤则由鸡骨头经过数小时熬制而成的汤底制作而成 从汤到面一律手工打造 彻底抛弃了现成的面条 速食的鸡汤 符合眼下反对快餐食品 提倡有个性及营养均衡的传统美食的慢食文化
  • MySQL-高级处理

    第五章 SQL高级处理 5 1 窗口函数 5 1 1 窗口函数概念及基本的使用方法 窗口函数也称为OLAP函数 OLAP 是 OnLine AnalyticalProcessing 的简称 意思是对数据库数据进行实时分析处理 为了便于理解
  • QT--收发数据代码

    1 pro QT core gui QT serialport QT widgets QT core 2 h ifndef JTLTESTTOOL H define JTLTESTTOOL H include
  • 【半监督学习】2、Soft Teacher

    文章目录 一 背景 二 方法 2 1 End to End Pseudo Labeling Framework 2 2 Soft teacher 2 3 Box Jittering 三 实验 论文 End to End Semi Super
  • python3+robotframework3+selenium3分层设计和截图及注意事项

    再说一下目前的主要环境信息和版本 操作系统 win10 64位 python版本 3 9 0 RIDE版本 v2 0b2 dev1 robotframework seleniumlibrary 3 141 0 selenium 3 141
  • C语言的数据类型大全,整型数据在内存中的存储方式

    一 数据类型 通过长时间的学习C语言以及代码的编写 我掌握了很多很多的数据类型 下面就给大家罗列一下 1 内置数据类型 char 字符数据类型 所占内存空间1字节 short 短整型 所占内存空间2字节 int 整形 所占内存空间4字节
  • java 超市购物程序设计

    编写一个超市购物程序 在一家超市有以下商品 牙刷 8 8元 毛巾 10 0元 水杯 18 8元 苹果 12 5元 香蕉 15 5元 用户通过输入商品序列号进行商品购买 用户输入购买数量后计算所需花费的钱 一次购买后 按Y继续购买 N购买结束
  • shell脚本学习笔记 (sed的高级用法----模式空间和保持空间)

    前段时间在学习shell脚本 上次有提到sed的模式空间和保持空间概念 但是一直没有研究好 这两天研究了一下 所以将它发出来 不是很全面 仅仅供大家参考一下 保持空间sed在正常情况下 将处理的行读入模式空间 脚本中的 sed comman
  • ES词典热加载-通过修改ik分词器源码实现热加载自定义词典

    逻辑 自定义词典的数据从mysql加载 只需要重启一次ES即可 后续热加载 实现 在自定义词典的init方法中实现每隔一定时间读取mysql并写入自定义词典的逻辑
  • 【微信小程序】小程序之滚动页面的某个元素位置

    这种效果基本上都是在文章详情页面才会出现 用于点击按钮页面滚动到文章的评论位置 但是不排除可以用于别的功能 首先我们需要用到的是在小程序里面获取某一个元素的位置高度 var that this var flag that data flag
  • java基础之 IO 流(InputStream/OutputStream)

    基流 上图中有句话写错了 应该是 字节流的根类 文件输出 入字节流 代码示例 心得 读写文件流 关心 读的时候读多少 写的时候写多少 它没有限制一次只能读 写多少 文件流的创建 到 文件流的关闭 为一个周期 package IOTest i
  • 肝2022世界杯,怒写企业级镜像私仓Docker+Harbor实践

    2022 12 09 揭幕2022卡塔尔世界杯4强角逐的第一天 越来越精彩了 同时记录程序猿的成长 1 背景 由于期望搭建一个企业级CICD的环境 开始尝试常规的gitlab jenkins k8s docker harbor spring
  • 997. 找到小镇的法官

    题目描述 小镇里有 n 个人 按从 1 到 n 的顺序编号 传言称 这些人中有一个暗地里是小镇法官 如果小镇法官真的存在 那么 小镇法官不会信任任何人 每个人 除了小镇法官 都信任这位小镇法官 只有一个人同时满足属性 1 和属性 2 给你一
  • 从0开始的 TypeScriptの十四:内置工具类型

    序 在之前的 从0开始的TypeScript 十三 中 已经对typescript的工具类型中的关键字infer extends keyof typeof in这些有所了解了 那么接下来为了使用更加方便 可以对typescript中内置的工
  • 【MATLAB】【函数介绍】cp2tform函数从控制点对推断空间变换

    官方链接 https ww2 mathworks cn help images ref cp2tform html s tid doc ta cp2tform函数的作用是根据传入的控制点对的坐标推断空间变换参数 函数语法如下 从控制点对推断