图像拼接matlab

合集下载

matlab图像拼接算法

matlab图像拼接算法

对齐算法流程
投影到统一坐标系
初始变换矩阵M 初始变换矩阵
非线性最小 二乘法进行 优化
图像合成
最终变换矩阵M 最终变换矩阵
初始变换矩阵的获取 初始变换矩阵M可以通过提取特征点或者在 频域上计算两幅图像的相位相关等方法来 得到。 MATLAB中内建有cpselect函数,该函数允 许用户在将要拼接的两幅图像的重叠区域 中手工选取一定数量的匹配特征点对然后 自动给出两幅图像之间的初始变换矩阵。
内容提要 图像拼接简介 图像拼接的主要步骤 摄像机运动的投影模型(projective model) 图像的对齐(registration) 图像的合成(blending) 图像拼接试验
图像拼接简介
什么是图像拼接?
将多幅在不同时刻、从不同视 角或者由不同传感器获得的图像 经过对齐然后无缝地融合在一起, 从而得到一幅大视场、高分辨率 图像的处理过程。该图像被称为 全景图。
摄像机运动模型
homography
摄像机的8-参数运动模型源自常见的几种几何变换:平移 (translation)
旋转 (rotation)
水平切变 (horizontal shear)
投影 (projection)
8-参数运动模型
假设 p ' ( x' , y ' )T 和 p = ( x, y ) 分别是一个象素点的新旧坐 标,一个二维仿射变换可以写为: p ' = Mp + t 或是 x' = a11 a12 x + t x y' a a22 y t y 21
m0 = m3 m 6
m1 m4 m7

matlab拼接函数

matlab拼接函数

matlab拼接函数摘要:一、Matlab 简介二、Matlab 中的向量操作三、Matlab 中的拼接函数1.向量拼接2.矩阵拼接四、Matlab 拼接函数的应用举例1.图像拼接2.数据拼接五、总结正文:Matlab 是一款广泛应用于科学计算和数据分析的软件,其强大的矩阵计算能力和丰富的工具箱使得用户可以轻松地进行各种计算任务。

在Matlab 中,向量操作和拼接函数是经常用到的功能,下面我们将详细介绍Matlab 中的拼接函数。

首先,我们需要了解Matlab 中的向量操作。

在Matlab 中,向量是具有相同数据类型的元素的集合。

通过使用Matlab 的索引和切片功能,我们可以轻松地对向量进行操作。

Matlab 中的拼接函数主要分为两类:向量拼接和矩阵拼接。

向量拼接是将两个或多个向量合并为一个向量,而矩阵拼接是将两个或多个矩阵合并为一个矩阵。

在Matlab 中,向量拼接可以通过“+”号运算符完成。

例如,如果我们想要将两个向量a 和b 拼接在一起,可以使用以下代码:```matlaba = [1, 2, 3];b = [4, 5];c = a + b;```运行上述代码后,我们得到一个新的向量c,其值为[1, 2, 3, 4, 5]。

对于矩阵拼接,Matlab 提供了concatenate 函数。

例如,如果我们想要将两个矩阵A 和B 拼接在一起,可以使用以下代码:```matlabA = [1, 2, 3; 4, 5];B = [6, 7, 8; 9, 10];C = concatenate(A, B);```运行上述代码后,我们得到一个新的矩阵C,其值为:```1 2 34 56 7 89 10```Matlab 拼接函数在实际应用中有很多用途,例如图像拼接和数据拼接。

在图像处理中,我们经常需要将多张图片拼接在一起,形成一个新的图像。

这时,我们可以使用Matlab 的图像拼接函数,将多张图片的像素值拼接在一起,从而得到一个新的图片。

Matlab中的图像拼接方法与示例分析

Matlab中的图像拼接方法与示例分析

Matlab中的图像拼接方法与示例分析图像拼接是数字图像处理领域中的重要任务,它能够将多张局部图像合并为一张完整的图像。

Matlab作为一种强大的工具,提供了多种图像拼接方法,本文将介绍其中常用的方法,并通过具体的示例分析其优劣和适用场景。

一、基于特征点匹配的图像拼接方法特征点匹配是一种常用且有效的图像拼接方法,它通过在图像中提取出稳定且唯一的特征点,然后根据这些特征点之间的相对位置关系进行图像的拼接。

在Matlab中,可以使用SIFT(尺度不变特征变换)算法来提取图像的特征点,然后使用RANSAC(随机一致性采样)算法对特征点进行匹配,并通过Harris角点检测算法来筛选出最佳的匹配点。

示例:将两张风景照片拼接成一张全景照片。

首先,使用SIFT算法提取两张照片的特征点,然后使用RANSAC算法对特征点进行匹配。

接着,通过Harris角点检测算法筛选出最佳的匹配点,并根据匹配点计算出图像间的转换矩阵。

最后,使用Matlab中的imwarp函数对图像进行变换,并使用imfuse函数将两张图像拼接在一起,得到最终的全景照片。

二、基于图像重叠区域的无缝拼接方法无缝拼接是指在图像拼接过程中,将多张图像合成为一张时,保持图像之间的连续性和平滑性,使得拼接后的图像看起来像是一张完整的图像。

在Matlab中,可以使用图像重叠区域的像素平均值或像素加权平均值来实现无缝拼接。

这种方法能够减少拼接过程中产生的明显拼接痕迹,使得拼接后的图像具有更好的视觉效果。

示例:将多张卫星图像拼接成一张地图。

首先,读入多张卫星图像,并确定它们之间的重叠区域。

然后,通过像素平均值或像素加权平均值来实现无缝拼接。

最后,使用Matlab中的imshow函数显示拼接后的地图图像。

三、基于图像内容的自动拼接方法自动拼接方法是指针对无法通过特征点匹配或像素平均值等方式进行拼接的图像,通过分析图像内容来实现图像的自动拼接。

在Matlab中,可以使用深度学习模型(如卷积神经网络)来对图像进行内容分析和特征提取,并根据提取的特征对图像进行拼接。

使用MATLAB进行图像拼接的注意事项

使用MATLAB进行图像拼接的注意事项

使用MATLAB进行图像拼接的注意事项一、引言图像拼接是将多幅相邻图像通过计算机技术无缝拼接成一副完整的图像的过程。

它在许多领域中具有广泛的应用,如摄影、遥感等。

MATLAB作为一种强大的计算工具,提供了丰富的图像处理函数,可以用于图像拼接。

本文旨在介绍使用MATLAB进行图像拼接时需要注意的事项。

二、图像选择在进行图像拼接前,首先需要选择合适的图像。

选择的图像应具有一定的重叠部分,以便进行拼接。

通常情况下,图像之间的颜色、亮度、曝光等要尽量一致,这样可以减少拼接后的瑕疵。

三、图像配准图像配准是图像拼接的关键步骤之一。

配准是指将不同图像的特征点对应起来,以便进行后续的拼接。

在MATLAB中,可以使用具有图像配准功能的函数,如SURF、SIFT等。

这些函数可以提取图像中的特征点,并通过匹配这些特征点来实现图像的配准。

在选择特征点时,应保证特征点分布均匀且数量足够。

四、图像拼接经过图像配准后,可以进行图像拼接。

在MATLAB中,可以使用imwarp函数来实现图像的几何变换。

几何变换可以校正图像间的畸变,使得图像能够更好地拼接起来。

在选择几何变换参数时,应结合图像的实际情况进行调整,以保证拼接后的图像效果最佳。

五、拼接后处理在进行图像拼接后,可能会出现一些拼接瑕疵,如色差、边缘不连续等。

为了获得更好的拼接效果,可以进行一些后处理操作。

在MATLAB中,可以使用图像融合函数,如blend(),来对拼接后的图像进行颜色平衡和平滑操作。

此外,还可以使用图像增强函数,如histeq(),来增加图像的对比度和锐度。

六、图像拼接的评价图像拼接的质量评价是判断拼接效果好坏的重要指标。

常用的评价指标包括平均亮度误差、平均色彩误差、结构相似度等。

在MATLAB中,可以使用相关的函数,如psnr()、ssim()等进行图像拼接效果的评估。

评价指标越接近于1,则表示拼接效果越好。

七、图像拼接的应用图像拼接在实际应用中具有广泛的应用前景。

在Matlab中进行图像融合与图像叠加的方法与技巧

在Matlab中进行图像融合与图像叠加的方法与技巧

在Matlab中进行图像融合与图像叠加的方法与技巧引言:随着数字图像处理和计算机视觉领域的发展,图像融合和图像叠加变得越来越重要。

图像融合是指将多幅图像合成为一幅具有更清晰、更丰富信息的图像,而图像叠加则是在保留所叠加图像的原始信息的同时,使图像更加丰富和易于理解。

Matlab作为一种强大的科学计算工具,提供了丰富的图像处理函数和工具箱,可以很方便地进行图像融合与图像叠加。

一、图像融合的方法与技巧1. 融合算法图像融合的基本方法有加权平均法、空间域融合法、频域融合法、小波融合法等。

加权平均法是最简单的方法,通过计算图像像素的平均值来融合。

空间域融合法是通过对直接融合的图像进行空间域操作来提取融合结果。

频域融合法则是通过将图像转换到频域,然后进行频域操作来实现融合。

小波融合法是基于小波变换的方法,利用小波分析的多尺度分解能力对图像进行分析和融合。

根据具体需求和图像的特点,选择合适的融合算法是非常重要的。

2. 图像预处理在进行图像融合之前,通常需要进行图像预处理,以提高融合结果的质量。

常用的图像预处理方法包括灰度拉伸、直方图均衡化、滤波等。

灰度拉伸是通过对图像的像素值进行线性变换,将图像像素值的范围拉伸到合适的范围内,从而增加图像的对比度。

直方图均衡化则是将图像的像素值在灰度直方图上均匀分布,以增强图像的细节。

滤波是通过对图像进行滤波操作,如低通滤波、高通滤波等,以去除图像中的噪声和不需要的细节。

3. 图像融合的策略图像融合的策略可以根据具体需求来选择。

常见的策略包括全局融合和局部融合。

全局融合是将所有图像的信息进行融合,得到整体的融合结果。

而局部融合则是将不同图像的不同区域进行融合,以保留更多的细节和纹理。

根据具体应用和需求,选择合适的融合策略可以使融合结果更加符合实际需求。

4. 参数设置与调整在进行图像融合过程中,不同的算法和方法有各自的参数,根据不同的图像和具体应用,需要适时地进行参数的设置和调整。

图像处理matlab及图像融合图像镶嵌图像拼接

图像处理matlab及图像融合图像镶嵌图像拼接

图像处理matlab及图像融合图像镶嵌图像拼接在实际的对图像处理过程中,由于我们读出的图像是unit8型,⽽在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。

因此读出的图像数据不能直接进⾏相加求平均,因此必须使⽤⼀个函数将图像数据转换成双精度型数据。

MATLAB中提供了这样的函数:im2double函数,其语法格式为:I2 = im2double(I1)其中I1是输⼊的图像数据,它可能是unit8或unit16型数据,通过函数的变化输出I2为⼀个double型数据,这样两图像数据就可以⽅便的进⾏相加等代数运算.要把double的图像(范围是0到1)再次转化为256灰度值的,可以这样Igrey= uint8(I2*255)图像类型转换函数:dither() 通过颜⾊抖动,把真彩图像转换成索引图像或灰度图象转换成⼆值图像gray2ind() 将灰度图像(或⼆值图像)转换成索引图像grayslice() 通过设定的阈值将灰度图象转换成索引图像im2bw() 通过设定亮度阈值将灰度、真彩、索引图象转换成⼆值图像ind2gray() 将索引图象转换成灰度图象ind2rgb() 将索引图象转换成真彩⾊图像mat2gray() 将⼀个数据矩阵转换成⼀幅灰度图象rgb2gray() 将真彩转换成灰度图象rgb2ind() 将真彩转换成索引图象图像类型与类型间的转换1。

索引图像:包括⼀个数据矩阵X和⼀个⾊图阵MAP。

矩阵元素值指向MAP中的特定颜⾊向量。

2。

灰度图像:数据矩阵I,I中的数据代表了颜⾊灰度值。

矩阵中的元素可以是double类型、8位或16位⽆符号的整数类型。

3。

RGB图像:即真彩图像。

矩阵中每个元素为⼀个数组,数组的元素定义了像素的红、绿、蓝颜⾊值。

RGB数组可以是double类型、8位或16位⽆符号的整数类型。

4。

⼆值图像:⼀个数据阵列,每个象素只能取0或1。

矩阵的基本运算⾏列式求值:det(A)矩阵加减:+、-矩阵相乘:*矩阵左除:A/B %相当于inv(A)*B矩阵右除:A\B %相当于A*inv(B)矩阵的幂:^矩阵转置:'矩阵求共轭(实部相同,虚部相反):conj(X)矩阵求逆:inv(X)级数的求和与收敛symsum(fun,var,a,b):其中fun是通项表达式,var为求和变量,a为求和起点,b为求和终点例如:I为1/[n*(2n+1)]从1到正⽆穷的和,求Isyms n;f1=1/(n*(2*n+1));I=symsum(f1,n,1,inf)计算结果为:I =2-2*log(2)空间曲⾯mesh()函数语法:mesh(Z):mesh(X,Y,Z,C):其中C是⽤来定义相应点颜⾊等属性的数组例:求x^2+y^2=z的空间曲⾯x=-4:4;y=x;[X,Y]=meshgrid(x,y);%⽣成x,y坐标Z=X.^2+Y.^2;mesh(X,Y,Z)曲⾯图[x,y]=meshgrid(xa,ya) 当xa,ya分别为m维和n维⾏向量,得到x和y均为n⾏m列矩阵。

Matlab中的图像融合和多模态图像分析技术

Matlab中的图像融合和多模态图像分析技术

Matlab中的图像融合和多模态图像分析技术图像处理是一项非常重要的技术,在许多领域都有广泛的应用,如医学影像分析、计算机视觉、遥感图像处理等。

在图像处理中,图像融合和多模态图像分析技术是两个非常重要的方面。

本文将介绍在Matlab中实现图像融合和多模态图像分析的方法和技术。

一、图像融合技术图像融合是指将多个不同模态或不同源的图像融合为一个具有更丰富信息的图像。

在图像融合技术中,常用的方法有像素级融合和特征级融合。

1.1 像素级融合像素级融合是指将多幅图像的像素按照一定的规则进行融合。

在Matlab中,可以使用imfuse函数来实现像素级融合。

该函数可以通过设置不同的融合模式来实现不同的效果,如加权平均、最大值、最小值等。

通过调整各个模态的权重,可以获得不同的融合效果。

1.2 特征级融合特征级融合是指将多幅图像的特征进行融合。

在Matlab中,可以使用特征提取和特征匹配的方法来实现特征级融合。

首先,使用不同的特征提取方法,如SIFT、SURF等,提取多幅图像的特征点。

然后,使用特征匹配的方法,如RANSAC算法,将多幅图像的特征点进行匹配和融合。

最后,根据匹配结果,可以生成一幅具有更丰富信息的图像。

二、多模态图像分析技术多模态图像分析是指对多模态图像进行分析和处理,以获得更全面和准确的信息。

在Matlab中,可以使用多种方法和技术来实现多模态图像分析。

2.1 图像配准图像配准是多模态图像分析的基础,它是将多幅图像进行准确的空间或特征对齐。

在Matlab中,可以使用imregister函数来实现图像配准。

该函数可以通过设置不同的配准方法和参数,如相位相关、归一化互相关等,来实现不同的配准效果。

2.2 图像分割图像分割是将图像中的目标或区域进行划分和提取的过程。

在多模态图像分析中,图像分割可以用来提取不同模态之间的特征。

在Matlab中,可以使用多种图像分割算法,如阈值分割、区域生长、边缘检测等,来实现图像分割。

如何使用Matlab进行图像拼接和图像融合技术实现

如何使用Matlab进行图像拼接和图像融合技术实现

如何使用Matlab进行图像拼接和图像融合技术实现引言:随着数字图像处理的快速发展,图像拼接和融合技术在许多领域中得到了广泛应用,如航空摄影、医学影像和虚拟现实等。

在本文中,我们将探讨如何使用Matlab软件来实现图像拼接和图像融合的技术。

通过学习这些技术,您将能够将多个图像合并为一个大的全景图像,并且可以通过融合不同曝光或不同焦距拍摄的图像来得到一个更高质量的图像。

一、图像拼接技术图像拼接是将多幅图像无缝合并为一个更大的全景图像的过程。

在Matlab中,可以通过以下步骤进行图像拼接:1. 加载图像:使用imread函数加载所有待拼接的图像。

确保拼接的图像具有重叠区域。

2. 检测特征点:使用SURF(Speeded-Up Robust Features)等特征检测算法在每个图像中找到相应的特征点。

Matlab中提供了现成的函数,如detectSURFFeatures和extractFeatures等。

3. 匹配特征点:使用特征描述符算法(如SURF)比较两幅图像的特征点,并找到相似的特征点。

Matlab中提供了matchFeatures函数来实现。

4. 估计变换矩阵:使用RANSAC算法估计两幅图像之间的单应性变换矩阵,该矩阵描述了如何将一个图像变换到另一个图像中。

Matlab中的estimateGeometricTransform函数可以实现这一步骤。

5. 图像拼接:使用warping技术将所有图像根据变换矩阵进行变换,并将它们拼接在一起。

Matlab提供了warp函数来实现这一过程。

6. 调整拼接后的图像:根据需求,使用imcrop函数对拼接图像进行裁剪,并使用imresize函数调整尺寸。

通过以上步骤,您可以使用Matlab实现图像拼接技术,并得到一个无缝连接的全景图像。

二、图像融合技术图像融合是将不同曝光或不同焦距下拍摄的图像进行融合,以得到更高质量的图像。

在Matlab中,可以通过以下步骤实现图像融合:1. 加载图像:使用imread函数加载待融合的图像。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clcclear all% 读入图片pic1=imread('lena1、jpg');pic2=imread('lena2、jpg');% Harris角点检测points1=myHarris(pic1);points2=myHarris(pic2);% 画出Harris角点figure(1)drawHarrisCorner(pic1,points1,pic2,points2);% 角点特征描述des1=myHarrisCornerDescription(pic1,points1);des2=myHarrisCornerDescription(pic2,points2);% 角点粗匹配matchs=myMatch(des1,des2);% 获取各自出匹配角点位置matchedPoints1=points1(matchs(:,1),:);matchedPoints2=points2(matchs(:,2),:);% 粗匹配角点连线figure(2)drawLinedCorner(pic1,matchedPoints1,pic2,matchedPoints2);% 角点精匹配[newLoc1,newLoc2]=pointsSelect(matchedPoints1,matchedPoints2); % 精匹配角点连线figure(3)drawLinedCorner(pic1,newLoc1,pic2,newLoc2);% 图像拼接im=picMatched(pic1,newLoc1,pic2,newLoc2);% 显示拼接图像figure(4)imshow(im);set(gcf,'Color','w');function points=myHarris(pic)% 功能:寻找Harris角点% 输入:RGB图像或gray图% 输出:角点所在的行、纵的N×2矩阵if length(size(pic))==3pic=rgb2gray(pic);endpic=double(pic);hx=[-1 0 1];Ix=filter2(hx,pic);hy=[-1;0;1];Iy=filter2(hy,pic);Ix2=Ix、*Ix;Iy2=Iy、*Iy;Ixy=Ix、*Iy;h=fspecial('gaussian',[7 7],2);Ix2=filter2(h,Ix2);Iy2=filter2(h,Iy2);Ixy=filter2(h,Ixy);[heigth,width]=size(pic);alpha=0、06;R=zeros(heigth,width);for i=1:heigthfor j=1:widthM=[Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];R(i,j)=det(M)-alpha*(trace(M)^2);endendRmax=max(max(R));pMap=zeros(heigth,width);for i=2:heigth-1for j=2:width-1if R(i,j)>0、01*Rmaxtm=R(i-1:i+1,j-1:j+1);tm(2,2)=0;if R(i,j)>tmpMap(i,j)=1;endendendend[row,col]=find(pMap==1);points=[row,col];function drawHarrisCorner(pic1,points1,pic2,points2) % 功能:画出Harris角点的连接% 输入:% pic1、pic2:待拼接的图像% points1、points2:Harris角点位置X1=points1(:,2);Y1=points1(:,1);X2=points2(:,2);Y2=points2(:,1);dif=size(pic1,2);imshowpair(pic1,pic2,'montage');hold onplot(X1,Y1,'b*');plot(X2+dif,Y2,'b*');set(gcf,'Color','w');function des=myHarrisCornerDescription(pic,points) % 功能:Harris角点特征描述% 输入:% pic:原图像% points:角点位置% 输出:% des:8×N的角点特征描述矩阵if length(size(pic))==3pic=rgb2gray(pic);endlen=length(points);des=zeros(8,len);for k=1:lenp=points(k,:);pc=pic(p(1),p(2));des(1,k)=pic(p(1)-1,p(2)-1)-pc;des(2,k)=pic(p(1),p(2)-1)-pc;des(3,k)=pic(p(1)+1,p(2)-1)-pc;des(4,k)=pic(p(1)+1,p(2))-pc;des(5,k)=pic(p(1)+1,p(2)+1)-pc;des(6,k)=pic(p(1),p(2)+1)-pc;des(7,k)=pic(p(1)-1,p(2)+1)-pc;des(8,k)=pic(p(1)-1,p(2))-pc;des(:,k)=des(:,k)/sum(des(:,k));endfunction matchs=myMatch(des1,des2)% 功能:特征点双向匹配% 输入:% des1、des2:特征点描述信息构成的矩阵% 输出:% matchs:匹配的特征点对应关系len1=length(des1);len2=length(des2);match1=zeros(len1,2);cor1=zeros(1,len2);for i=1:len1d1=des1(:,i);for j=1:len2d2=des2(:,j);cor1(j)=(d1'*d2)/sqrt((d1'*d1)*(d2'*d2));end[~,indx]=max(cor1);match1(i,:)=[i,indx];endmatch2=zeros(len2,2);cor2=zeros(1,len1);for i=1:len2d2=des2(:,i);for j=1:len1d1=des1(:,j);cor2(j)=(d1'*d2)/sqrt((d1'*d1)*(d2'*d2));end[~,indx]=max(cor2);match2(i,:)=[indx,i];endmatchs=[];for i=1:length(match1)for j=1:length(match2)if match1(i,:)==match2(j,:)matchs=[matchs;match1(i,:)];endendendfunction drawLinedCorner(pic1,loc1,pic2,loc2)% 功能:画出匹配角点的连接% 输入:% pic1、pic2:待拼接的图像% loc1、loc2:匹配角点位置X1=loc1(:,2);Y1=loc1(:,1);X2=loc2(:,2);Y2=loc2(:,1);dif=size(pic1,2);imshowpair(pic1,pic2,'montage');hold onfor k=1:length(X1)plot(X1(k),Y1(k),'b*');plot(X2(k)+dif,Y2(k),'b*');line([X1(k),X2(k)+dif],[Y1(k),Y2(k)],'Color','r'); endset(gcf,'Color','w');function [newLoc1,newLoc2]=pointsSelect(loc1,loc2)% 功能:筛选匹配特征点对,获取高精度的控制点% 输入:% loc1、loc2:粗匹配特征点位置% 输出:% newLoc1、newLoc2:精匹配控制点位置slope=(loc2(:,1)-loc1(:,1))、/(loc2(:,2)-loc1(:,2)); for k=1:3slope=slope-mean(slope);len=length(slope);t=sort(abs(slope));thresh=t(round(0、5*len));ind=abs(slope)<=thresh;slope=slope(ind);loc1=loc1(ind,:);loc2=loc2(ind,:);endnewLoc1=loc1;newLoc2=loc2;function im=picMatched(pic1,newLoc1,pic2,newLoc2)% 功能:获取拼接之后的图片% 输入:% pic1、pic2:待拼接图片% newLoc1、newLoc2:变换控制点矩阵% 输出:% im:拼接后的图片if length(size(pic1))==2pic1=cat(3,pic1,pic1,pic1);endif length(size(pic2))==2pic2=cat(3,pic2,pic2,pic2);endSZ=2000;X1=newLoc1(:,2);Y1=newLoc1(:,1);X2=newLoc2(:,2);Y2=newLoc2(:,1);sel=randperm(length(newLoc1),3);x=X2(sel)';y=Y2(sel)';X=X1(sel)';Y=Y1(sel)';U=[x;y;ones(1,3)];V=[X;Y;ones(1,3)];T=V/U;cntrX=SZ/2;cntrY=SZ/2;im=zeros(SZ,SZ,3);for i=1:size(pic2,1)for j=1:size(pic2,2)tmp=T*[j;i;1];nx=round(tmp(1))+cntrX;ny=round(tmp(2))+cntrY;if nx>=1 && nx<=SZ && ny>=1 && ny<=SZim(ny,nx,:)=pic2(i,j,:);endendendim=imresize(im,1,'bicubic');tpic1=zeros(SZ,SZ,3);tpic1(1+cntrY:size(pic1,1)+cntrY,1+cntrX:size(pic1,2)+cntrX,:)=pic1; re=rgb2gray(uint8(im))-rgb2gray(uint8(tpic1));for k=1:3ta=im(:,:,k);tb=tpic1(:,:,k);ta(re==0)=tb(re==0);im(:,:,k)=ta;endclear ta tb re tpic1im=getPicture(im,SZ);im=uint8(im);if length(size(pic1))==2im=rgb2gray(im);endfunction im=getPicture(pic,SZ)% 功能:获取图像有用区域% 输入:% pic:拼接图像% SZ:预定图像尺寸% 输出:% im:有用区域图像if length(size(pic))==2pic=cat(3,pic,pic,pic);endk=1;while k<SZif any(any(pic(k,:,:)))breakendk=k+1;endceil=k; %上边界k=SZ;while k>0if any(any(pic(k,:,:))) breakendk=k-1;endbottom=k; %下边界k=1;while k<SZif any(any(pic(:,k,:))) breakendk=k+1;endleft=k; %左边界k=SZ;while k>0if any(any(pic(:,k,:)))breakendk=k-1;endright=k; %右边界%%获取图像im=pic(ceil:bottom,left:right,:);。

相关文档
最新文档