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,一经查实,立即删除!

相关文章

Linux 命令之 pstree -- 以树状图显示进程/查看进程信息

文章目录介绍常用选项命令示例介绍 Linux 系统中 pstree 命令的英文全称是“process tree”,即将所有进程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本进程为根 (root),如果有指定使用者 id,则树状图会只显…

totolinkn200up怎么设置_totolinkN200R无线路由器如何设置啊,求高人指点

展开全部totolinkN200R无线路e68a84e8a2ad3231313335323631343130323136353331333337393532由器设置方法:【设置无线路由器方法】【家庭网络环境布线】:1、有猫(modem):猫(modem)----路由器wan口;路由器lan口----电脑。2、没有猫(…

jersey 入门示例_Jersey Web Service Hello World Java示例

jersey 入门示例在Restlet之后, Jersey是另一个流行的开源框架,可以用Java创建RESTful Web服务 。 Jersey符合JAX-RS规范,实际上它是JAX-RS(JSR 311)(http://jsr311.java.net/nonav/releases/1.1/index.htm…

php domdocument getelementbyid,PHP DOMDocument- getElementByID添加Â代替空

PHP DOMDocument-> getElementByID添加代替空(PHP DOMDocument->getElementByID adding in place of empty )我正在使用PHP的DOMDocument对象来解析一些HTML(使用cURL获取)。 当我按ID获取元素并输出它时,任何空的 标记都会获得一个额外的字符并变为 。代码…

Linux 命令之 whois 命令-用于查找并显示用户信息

文章目录介绍参考示例介绍 whois指令会去查找并显示指定帐号的用户相关信息,因为它是到Network Solutions的WHOIS数据库去查找,所以该帐号名称必须在上面注册方能寻获,且名称没有大小写的差别。 参考示例 [rootlocalhost www]# whois root…

gptuefi优势_UEFI+GPT的区别,有啥不同?写的很详细易懂

搜索相关知识时看到的好文章,由于百度空间挂了,在此注明出处作者QQ:407647406以表谢意,原地址戳我其实楼主早就知道UEFI,曾经也一直关注并试图了解,无奈限于当时国内有关资料匮乏,实在找不到什么使用有效能…

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

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

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

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

Linux 命令之 iwconfig 命令-配置无线网络接口

文章目录介绍常用选项参考文档介绍 使用iwconfig命令可以为无线接口显示或设置网络接口的参数,它可以用来配置无线网络接口,是非常好用的。 常用选项 选项说明essid设置无线网卡的ESSID(Extension Service Set ID)。通过ESSID来区分不同的无线网络&am…

java gc cms_Java垃圾收集器:G1GC何时将CMS强制退出?

java gc cms在针对JDK 9(2017/4/4)提出的JEP中 , Mark Reinhold写道JEP 291 (“弃用并发标记扫描(CMS)垃圾收集器”)是“已被放置在在讨论和审查后,由所有者将其定位为目标”。 如果…

ios 高德地图加载瓦片地图_IOS 高德地图 API 加载 WMS 服务

IOS 高德地图 API 加载 WMS 服务本文主要介绍通过自定义高德地图 MATileOverlay 接口,添加 WMS 服务到地图上。废话少说,先贴代码。代码自定义类 WMSTileOverlayUtil,继承自高德地图接口 MATileOverlay,主要重载函数:-…

Linux 命令之 iwlist 命令-从无线网卡获取更详细的无线信息

文章目录介绍常用选项命令示例介绍 iwlist 命令用于对 /proc/net/wireless 文件进行分析,得出无线网卡相关信息。 常用选项 选项说明scanning搜索当前无线网络frequen显示频道信息rate显示连接速度power显示电源模式txpower显示功耗retry显示重试连接次数(网络不…

drools dmn_DMN 1.1 XML:从建模到使用Drools 7.0的自动化

drools dmn我是一名自由顾问,但今天我是一名博士生。 本文的全球背景是企业架构(EA),它需要对企业进行建模。 由于EA的一个方面是业务流程建模,所以我使用BPMN已有数年之久,但是这种表示法并不十分适合表示…

矩阵期望 matlab,matlab中矩阵元素求和、求期望和均方差

在matlab中求一个矩阵中元素的和可以自己编写for循环来完成,这样比较方便,想求那些数据的和都可以做到,然而效率比较低,如果数据量大程序会跑好长时间。所以我们可以转而用matlab提供的sum函数。设M为一个矩阵,那么&am…

python默认字体大小_python – 如何设置PIL加载的默认字体的大小,使其适合我的8×8矩阵?...

我正在努力在88矩阵显示器上显示文本,而且我没有在我的BeagleBone上知道的.ttf文件.根据示例here,我应该能够说font ImageFont.load_default()而不是加载.ttf,但是,这显然不是指定字体的尺寸!有什么办法吗?或者,是否有一个地方你知道我可以在我的BBB版本…

Linux 命令之 tcpdump -- 监听网络流量

文章目录命令介绍参考文档命令介绍 tcpdump 命令是一款 sniffer 工具,是 Linux 上的抓包工具,嗅探器;它可以打印出所有经过网络接口的数据包的头信息。 tcpdump 命令工作时先要把网卡的工作模式切换到混杂模式。所以 tcpdump 命令需要以 ro…

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

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

php点击后增加html元素,如何动态生成html元素以及为元素追加属性的方法介绍(附代码)...

本篇文章给大家分享的是关于如何动态生成html元素以及为元素追加属性的方法介绍(附代码),内容很不错,有需要的朋友可以参考一下,希望可以帮助到大家。动态生成HTML元素的方法有三种:第一种:document.createElement()创…

excel npoi 连接_Net操作Excel_NPOI(示例代码)

Npoi 简介1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet;行:Row;单元格Cell。4.忘了告诉大家npoi是做什么的了,npoi 能够读写几乎所有的Office 97-2003文件格式&#x…

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

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