matlab 三维图像配准,[转载]Matlab实现多种图像配准(转)

本文讲述如何利用Matlab Image Processing Toolbox中的图像配准工具实现线性正投影、仿射、投影、多项式、分段线性、局部加权平均配准的过程。

实验平台

X86 PC,Windows XP sp2, Matlab 7.1

资源的获取

matlab工具的使用方法:查看帮助mage Processing Toolbox User's Guide——Image registration。

涉及配准方法简介

该工具箱提供的配准方法均需手工选择图像间的匹配点对(control points pair),均属于交互配准方法。其基本过程为:读入图像数据->在两副图像上选择足够匹配点->选择配准算法,计算变换参数->变换图像。

假设input image(输入图像)为欲进行配准的图像,base image为配准是的参考图像。以下是我参考matlab帮助给出了简介。

1.线性正投影(linear conformal):最简单。平面映射成平面。

当输入输入图像与参考图像对比,只是存在全局的平移、旋转、缩放或其三者组合的差别时(正方形仍对应正方形),选择此配准方法。此方法至少需要2对匹配点。

2.仿射(affine):将平行线转换成平行线。

当输入图像形状存在切变现象(正方形对应平行四边形),选此法。至少需3对匹配点。

3.投影(projective):将直线映射成直线。

如果输入图像呈现倾斜,翘起现象,选此法。至少需4对匹配点。

4.多项式(polynomial):将直线映射成曲线。

如果输入图像出现不规则曲变,采用此法。Matlab中提供有2、3、4次幂的实现,分别至少需要6,10,10对匹配点。

5.分段线性(piecewise linear)

如果输入图像的各个局部之间的退化模式明显不一样,选此法。至少需要4对匹配点。

6.局部加权平均(local weighted mean)

与分段线性一致,但效果较之好。至少需要6对(推荐12对)匹配点。

实验步骤

1.读取图像数据。

因为源图像以矩阵形式存在一个二进制的文件里,用fread可将其读取到变量矩阵中。将读取文件编制成一个子函数(RTIread.m),源代码如下:

function imMatrix=RTIread(FILENAME,SIZE)

%RTIreadRead the image matrix from binary "Registration Test Image" file.

%imMatrix=RTIread(FILENAME,SIZE) opens the file FILENAME, and reads the

%number of elements specified by SIZE.

%

%FILENAME is a string containing the name of the file to be opened.

%Valid entries for SIZE are:

%Nread N elements into a column vector.

%infread to the end of the file.

%[M,N]read elements to fill an M-by-N matrix, in column order.

%N can be inf, but M can't.

%

%It returns the image matrix.

fid=fopen(FILENAME,'r');

imMatrix=fread(fid,SIZE,'uint8=>uint8');

fclose(fid);

%image(imMatrix);

这里我们选取了两张600×600的图片,文件名为“casitas84”和“casitas86”。运行以下代码读取图像矩阵:

% 1. Read the images into the MATLAB

workspace.

base=RTIread('casitas84',[600,600]);

input=RTIread('casitas86',[600,600]);

2.选取匹配点(control points)。

根据预定的配准方法,选定足够的匹配点对。运行下列代码:

% 2.Specify control point pairs n the images and

save.

cpselect(input,base);%please

select 15 points for test.

出现GUI界面。

a4c26d1e5885305701be709a3d33442f.png

操作很简单,只需注意选点要均匀布开,以增加其代表性。选定完毕,File-> Save Points to

Workspace将数据保存到工作区中。Workspace立刻多出两个N×2的数组(其中N为选定的匹配点对数),分别为input_points和base_points,如:

input_points =

119.5185193.5926

168.9012242.9753

105.9383140.5062

459.0247131.8642

313.3457257.7901

292.3580165.1975

276.308633.0988

283.7160380.0123

76.3086297.2963

135.567983.7160

360.2593313.3457

94.8272446.6790

70.1358354.0864

181.2469361.4938

381.2469460.2593

252.8519433.0988

3.利用十字相关法调整选定了的匹配点。

这步可选。运行代码:

% 3.Fine-tune the control points using

cross-correlation.

input_points_corr =

cpcorr(input_points,base_points,input,base); %optimism the

points

input_points_corr为优化后在输入图片的对应匹配点。

4.计算变换公式的参数。

利用cp2tform,选定变换类型(即配准方法),计算变换参数。以下只需选定一种即可。

% 4.Specify the type of transformation to be used

and infer its parameters

% (1) not Fine-tune points

Tlinear =

cp2tform(input_points,base_points,'linear conformal');

Taffine =

cp2tform(input_points,base_points,'affine');

Tprojective =

cp2tform(input_points,base_points,'projective');

Tpolynomial2 =

cp2tform(input_points,base_points,'polynomial',2);

Tpolynomial3 =

cp2tform(input_points,base_points,'polynomial',3);

Tpolynomial4 =

cp2tform(input_points,base_points,'polynomial',4);

Tpiecewise =

cp2tform(input_points,base_points,'piecewise linear');

Tlwm =

cp2tform(input_points,base_points,'lwm');

% (2)Fine-tune points

fTlinear =

cp2tform(input_points_corr,base_points,'linear

conformal');

fTaffine =

cp2tform(input_points_corr,base_points,'affine');

fTprojective =

cp2tform(input_points_corr,base_points,'projective');

fTpolynomial2 =

cp2tform(input_points_corr,base_points,'polynomial',2);

fTpolynomial3 =

cp2tform(input_points_corr,base_points,'polynomial',3);

fTpolynomial4 =

cp2tform(input_points_corr,base_points,'polynomial',4);

fTpiecewise =

cp2tform(input_points_corr,base_points,'piecewise

linear');

fTlwm =

cp2tform(input_points_corr,base_points,'lwm');

诸如Tlinear的变量为一个称为TFORM的数据结构,尚没做仔细研究:

Tlinear =

ndims_in:

2

ndims_out:

2

forward_fcn:

@fwd_affine

inverse_fcn:

@inv_affine

tdata:

[1x1 struct]

5.变换图像。

% 5.Transform the unregistered image to bring it

into alignment.

title('image registration polynomial

method');

subplot(2,2,1);

imshow(base);

title('Base image');

subplot(2,2,2);

imshow(input);

title('Input image');

subplot(2,2,3);

imshow(imtransform(input,Tpolynomial2));

title('registered image');

subplot(2,2,4);

imshow(imtransform(input,fTpolynomial2));

title('registered image(fine-tune

points)');

结果如下:

a4c26d1e5885305701be709a3d33442f.png

总结

1.image和imshow区别。前者视base,input此类二维图片矩阵为索引图像,在系统的index库中选取颜色。

2.选择适当的方法来建立转换参数,并非算法越复杂越好,应参考成像因素(退化因素)。

3.尚没有看出十字相关法的好处。

4.

利用cpselect选择匹配点,cpselect可以返回一个GUI句柄。欲实现如下功能:当打开cpselect GUI

时,m文件程序暂停运行,关闭之后继续执行。因为对GUI编程不懂, 使用了waitfor,pause函数都没法实现。尝试中……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oauth2和jwt_OAuth2,JWT,Open-ID Connect和其他令人困惑的事物

oauth2和jwt免责声明 如果觉得我必须从一个重要的免责声明开始这篇文章: 不要太相信我要说的话。 我之所以这样说,是因为我们正在讨论安全性。 而且, 当您谈论安全性时,除了100%正确的陈述外,还有冒任何其他…

matlab的exec程序,C++调用Matlab画图的一段程序

劳动节闲来无事,写了一天程序,just for fun.看,这是C调用Matlab画图的一段程序。暂时不想多解释了,有兴趣的话,看看下面的代码吧。以下几段代码由上到下,越来越旧。最上面的是最新更新的版本。#include#inc…

java args_Java命令行界面(第2部分):args4j

java args在上一篇文章中 ,我研究了使用Apache Commons CLI在Java应用程序中解析命令行参数。 在本文中,我将使用另一个库args4j进行相同的操作。 args4j采用了一种不同于Commons CLI的方式来指定Java应用程序应期望的命令行参数。 尽管Commons CLI期望…

apache camel_Apache Camel中的短重试与长重试

apache camel《骆驼设计模式》一书介绍了20种模式以及用于设计基于Apache Camel的集成解决方案的众多技巧和最佳实践。 每种模式都基于真实的用例,并提供了Camel特定的实现细节和最佳实践。 为了让您有这本书的感觉,以下是该书的重试模式摘录&#xff0c…

mega5安装包_[MEGA DEAL] 2017年完全Java捆绑包(95%折扣)

mega5安装包深入了解编程奥德赛(58小时!),进入最常用的编程语言 嘿,怪胎, 本周,在我们的JCG Deals商店中 ,我们提供了一个极端的报价 。 我们提供的2017 Complete Java Bundle 仅…

matlab计算微分ppt,matlab-ch013(数值计算-微积分)20090923.ppt

matlab-ch013(数值计算-微积分)20090923.ppt 第13讲 数值计算 —微积分,张建瓴,13.1 数值积分,在工程教学和应用中,除了进行数据逼近外,还要求逼近曲线下面的面积,这就是积分问题。,一、数值积分方法,典型的数值积分方法有:用常数…

JDK 9中不推荐使用Java的Observer和Observable

在博客文章《 应用JDK 9 Deprecated增强功能》中 ,我讨论了JDK 9中 Deprecated批注中对forRemoval()和since()可选元素(方法)的添加 。 我在那篇文章中说:“在Java SE API上应用新的…

WorkPlus一站式协同解决方案,助力企业降本增效

在企业数字化转型的过程中,很多企业都会遇到一个共同问题:重复建设基础功能,耗费大量时间和资源。为解决这一难题,WorkPlus已经将一些通用、基础且有技术门槛的功能进行了集成与开发,如IM(即时通讯&#xf…

linux在oracle新建表,Oracle创建表及管理表

1. Oracle表的创建及管理创建表包括三个要素,表名,列名,数据类型。每个表都有对应不同的列,每个列都有唯一对应的数据类型。常用数据类型简介:数据类型描述CHARACTER(n)字符/字符串。固定长度 n。INTEGER(p)整数值(没有…

Linux 命令之 top -- 实时显示进程动态/查看进程信息

文章目录介绍常用选项交互命令参考示例示例 1:直接输入命令 top 就可以动态显示进程信息统计参数信息详解进程属性说明(即进程列表的字段说明)其它1.在 top 基本视图中,按键盘数字 1 可以监控每个逻辑 CPU 的状况2.敲击键盘 b&…

oracle同步恢复目录,Oracle创建恢复目录(catalog)

Oracle创建恢复目录(catalog),在catalog数据库上创建cat用户的表空间。Oracle创建恢复目录1.在catalog数据库上创建cat用户的表空间SQL> create tablespace cat datafile /home/oracle/oradata/orcl/cat.dbf size 512M;2.创建cat用户SQL> Create user cat ide…

java登录界面命令_Java命令行界面(第3部分):jbock

java登录界面命令在本系列中有关使用Java进行命令行分析的前两篇文章中,我介绍了Apache Commons CLI和args4j库。 在本系列的第三篇文章中,我介绍了jbock ,它是自我描述的“非常简单的CLI解析器”。 我在Java命令行解析中的帖子使用了一些示…

java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧

java中转json字符串在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON。 这是在Java中测试和学习解析JSON字符串的最快方法,但…

COLLATE oracle,Sql 中Collate用法

今天查询sqlite的时候需要不区分大小写,查了下文档,需要使用collate nocase.顺便学习下collate的用法。collate在sql中是用来定义排序规则的。排序规则其实就是当比较两个字符串时,根据某种规则来确定哪个比较大,是否相等。各个数…

jdeps_JDeps入门–分析项目的依赖关系

jdepsJDeps是Java依赖关系分析工具 ,这是一个命令行工具,它处理Java字节码(意味着.class文件或包含它们的JAR),并分析类之间静态声明的依赖关系。 可以用各种方式过滤结果,并可以将其汇总到包或JAR级别。 J…

要多大内存才满足_什么是延迟满足能力?“延迟满足”能力对孩子有多重要家长要清楚...

文丨饭饭妈记得去年过春节的时候,家里来了两个亲戚,他们分别有一个小孩,当时大家都在准备年夜饭。其中一份糯米团子准备好放在桌子上之后,亲戚家的两个小孩都非常想要吃,亲戚对孩子说:“你们现在不能吃&…

java端到端_Java应用程序性能监控:复杂分布式应用程序的端到端性能

java端到端通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控。 参加AppDynamics APM导览! 在最复杂和分布式环境中端到端监视Java应用程序性能-专注于业务事务。 自动发现的业务交易,动态基准,代码级诊断…

java jvm虚拟机_Java虚拟机(JVM)简介

java jvm虚拟机什么是JVM Java虚拟机(JVM)是使计算机能够运行Java程序的抽象计算机。 JVM有三个概念: 1.规格 2.实施 3.实例。 该规范是正式描述JVM实现要求的文档。 具有单一规范可确保所有实现都可互操作。 JVM实现是满足JVM规范要求的…

linux系统引导分区,揭秘Linux(二)——操作系统引导与硬盘分区

通过前面的介绍想必大家对Linux有了个基础的了解,那么各位肯定该说是不是要装操作系统了,对不起让各位失望了,这次所讲解的是Linux运行原理与硬盘分区,这是重中之重啊!请一定要细细品读。为了更好地了解Linux系统的运行…

HTTP协议简介_请求消息/请求数据包/请求报文_响应消息/响应数据包/响应报文

文章目录HTTP 介绍请求数据包/请求消息/请求报文请求数据包解析响应数据包/响应消息/响应报文HTTP 介绍 概念:Hyper Text Transfer Protocol 超文本传输协议 传输协议:定义了客户端和服务器端通信时发送数据的格式 特点: 1.基于TCP/IP的高级协议 2.默认…