Matlab图像处理系列——插值算法和图像配准

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、插值算法
1、最近邻插值
2、双线性插值
3、高阶插值
4、插值算法的Matlab仿真
二、图像配准的Matlab仿真
三、Matlab仿真源码
1、插值算法仿真源码
2、图像配准仿真源码

本节内容
一、插值算法

实现几何运算时,有两种方法,一是向前映射法,二是向后映射法。
向前映射法,将输入图像的灰度一个像素一个像素地转移到输出图像中,从原图像坐标计算出目标图像坐标。
向后映射法,是向前映射变换的逆,输出像素一个一个地映射回输入图像中。如果一个输出像素映射到的不是输入图像的采样栅格的整数坐标处的像素点,其灰度值就需要基于整数坐标的灰度值进行判断,也就是插值。
1、最近邻插值
最近邻插值,就是输出像素的值为输入像素中与其最邻近的采样点的像素值。
点P0在几何变换中被映射到P1’,但由于点P1’处于非整数的坐标位置,无法提取其像素灰度值,故采用与其最邻近的采样点P1,近似作为P1’的灰度值。
在这里插入图片描述

2、双线性插值
双线性插值,又称为一阶插值,是线性插值扩展到二维的一种用法。
输出像素的值是输入图像中距离它最近的2×2邻域内采样点像素灰度值的加权平均。
单位正方形的顶点坐标为f(0,0),f(1,0),f(0,1),f(1,1),通过双线性插值得到正方形内任意点f(x,y)的值。
第一步:对上端的两个点进行线性插值得到:
f(x,0)=f(0,0)+x[f(1,0)-f(0,0)]
第二步:对下端两个顶点进行线性插值得到:
f(x,1)=f(0,1)+x[f(1,1)-f(0,1)]
第三步:对垂直方向进行线性插值得到:
f(x,y)=f(x,0)+y[f(x,1)-f(x,0)]
由此可得f(x,y)
f(x,y)=f(0,0)+x[f(1,0)-f(0,0)]
+y[f(0,1)-f(0,0)]+xy[f(1,1)-f(0,1)+f(1,0)-f(0,0)]
在这里插入图片描述

3、高阶插值
双线性插值的平滑作用会使图像的细节退化,斜率的不连续性导致变换产生不希望的结果。通过高阶插值得到弥补,高阶插值通常采用卷积来实现,输出像素的值为输入图像中距离它最近的4×4邻域内采样点像素值的加权平均值。
以三次插值为例,采用最佳插值函数sin(x)/x。
在这里插入图片描述

4、插值算法的Matlab仿真
在这里插入图片描述

二、图像配准的Matlab仿真
图像配准,将同一场景的两幅图片或多幅图片进行对准。
使用者以基准图像为参照,通过一些基准点找到适当的空间变换关系s和t,对输入图像进行相应的几何变换,从而实现它与基准图像在这些基准点位置上的对齐。
Matlab提供了cpselect函数,指定要注册的映像和引用映像的名称。现在可以使用鼠标以交互方式添加、移动和删除控制点。添加完控制点后,通过从“文件”菜单中选择“将点导出到工作空间”,将它们导出到工作区。
Matlab提供了fitgeotrans函数,对控制点对组进行几何变换拟合,获取控制点对组 movingPoints 和 fixedPoints,并使用它们来推transformationType 指定的几何变换。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Matlab仿真源码
1、插值算法仿真源码

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
%最近邻插值
B1=imrotate(I,0,'nearest');
%双线性插值
B2=imrotate(I,0,'bilinear');
%双三次插值
B3=imrotate(I,0,'bicubic');
figure;
subplot(2,2,1);
imshow(I);
title('原图');
subplot(2,2,2);
imshow(B1);
title('最近邻插值');
subplot(2,2,3);
imshow(B2);
title('双线性插值');
subplot(2,2,4);
imshow(B3);
title('双三次插值');

2、图像配准仿真源码

clear all;
clc;
close all;
%读取图像
I1=imread('people1.png');
I2=imread('people2.png');
figure;
subplot(2,1,1);
imshow(I1);
title('people1');
subplot(2,1,2);
imshow(I2);
title('people2');
%标注基准点
%cpselect(I1,I2);
movingPoints=[441.013381995134,324.930656934307;703.373479318735,88.1666666666666];
fixedPoints=[292.478102189781,203.723844282238;337.500000000000,293.767639902676];
tform=fitgeotrans(movingPoints,fixedPoints,'NonreflectiveSimilarity');
B1=imwarp(I1,tform);
B2=imwarp(I2,tform);
figure;
imshow(B1);
title('people1');
figure;
imshow(B2);
title('people2');
  • 24
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值