题目: 要求根据已给的两幅图像,在各幅图像中随机找出7个点,计算出两幅图像之间的转换矩阵H,并且输出转换之后的图像。
一、原理
通过手动选取两幅图像中若干组相同的点,读取其位置,得到图像变换的仿射矩阵,再通过仿射矩阵将图片转化成相同位置关系。
二、具体实现过程
1.通过MATLAB将Image A 和 Image B 分别读入
2.运用 cpselect()
函数,可实现动态交互式地选取点,并将坐标存入工作区
3.运用cp2tform(movingPoints,fixedPoints,transformtype)
或fitgeotrans(movingPoints,fixedPoints,transformtype)
函数,得到从 Image B 还原的仿射矩阵,因为本题需要,其中前两个参量实际上需要调换位置,transformtype选择affine
4.通过imtransform()
或imwarp()
函数,将Image B转换,并通过 imshow输出即可
三、代码如下
clear;
clc;
ImageA=imread('Image A.jpg');
ImageB=imread('Image B.jpg');
subplot(1,2,1);imshow(ImageA);title('Image A');
subplot(1,2,2);imshow(ImageB);title('Image B');
cpselect(ImageA,ImageB);
T=cp2tform(fixedPoints,movingPoints,'affine');
ImageT=imtransform(ImageB,T);
figure(2);
subplot(1,2,1);imshow(ImageA);title('Image A');
subplot(1,2,2);imshow(ImageT);title('Image T');
(实际运行时,先运行上半部分,选取完点后单独运行下半部分)
四、选取点
Image A:
Image B:
五、结果
仿射矩阵为:
T
=
[
0.9641
−
0.2536
0
0.2574
0.9647
0
2.3547
714.4102
1
]
T=\begin{bmatrix} 0.9641 & -0.2536 & 0 \\ 0.2574 & 0.9647 & 0 \\ 2.3547 & 714.4102 & 1 \end{bmatrix}
T=⎣⎡0.96410.25742.3547−0.25360.9647714.4102001⎦⎤
转换后图片为:
可以看出,通过变换,Image T 与Image A 相同部分大小和位置基本上一样。
数字图像处理作业链接:
数字图像处理第一次作业——Bmp格式与基本变换
数字图像处理第二次作业——图像仿射变换
数字图像处理第三次作业——基于直方图的图像空域操作
数字图像处理第四次作业——空域滤波与边缘检测
数字图像处理第五次作业——频域滤波器
数字图像处理第六次作业——图像噪声和恢复
数字图像处理第七次作业——图像直线检测