基于灰度的图像配准matlab源程序

合集下载

Matlab中的图像配准算法解析

Matlab中的图像配准算法解析

Matlab中的图像配准算法解析图像配准是计算机视觉和图像处理领域中一项重要的任务,它可以将多幅图像进行对齐,使它们在几何和视觉上更加一致。

在Matlab中,有多种图像配准算法可以使用,包括基于特征匹配的方法、基于区域的方法以及基于相位相关的方法。

本文将对这些算法进行解析,并探讨它们的原理和应用。

一、基于特征匹配的图像配准算法1.1 SIFT算法尺度不变特征转换(Scale-Invariant Feature Transform,SIFT)是一种常用的特征提取算法,它通过检测图像中的稳定特征点,并计算这些特征点的描述子来实现图像匹配。

在Matlab中,可以使用vl_feat工具包实现SIFT算法。

1.2 SURF算法加速稳健特征(Speeded-Up Robust Features,SURF)是一种基于尺度空间的特征提取算法,它可以在不同尺度下检测图像中的稳定特征点,并计算这些特征点的描述子。

在Matlab中,可以使用图像拼接工具箱中的SURF函数实现SURF算法。

二、基于区域的图像配准算法2.1 形态学图像配准形态学图像配准是一种基于区域的图像配准算法,它通过对图像进行分割和形态学变换,在不同尺度下提取图像的结构信息,并将其对齐。

在Matlab中,可以使用图像处理工具箱中的形态学变换函数实现形态学图像配准。

2.2 相关性图像配准相关性图像配准是一种基于相似度测量的图像配准算法,它通过计算图像之间的相似性来实现图像对齐。

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

三、基于相位相关的图像配准算法相位相关图像配准是一种基于相位信息的图像配准算法,它通过计算图像频率域中的相位相关性来实现图像对齐。

在Matlab中,可以使用图像处理工具箱中的相位相关函数实现相位相关图像配准。

四、图像配准算法的应用图像配准在很多领域都有广泛的应用,例如医学影像配准、遥感图像配准和计算机视觉中的对象追踪等。

使用Matlab进行图像识别的基本方法

使用Matlab进行图像识别的基本方法

使用Matlab进行图像识别的基本方法引言随着计算机视觉的快速发展,图像识别技术正在不断成熟和应用于各个领域。

作为一种强大的科学计算工具,Matlab在图像处理和识别方面发挥着重要作用。

本文将介绍使用Matlab进行图像识别的基本方法,包括图像预处理、特征提取和分类器训练等方面。

一、图像预处理图像预处理是图像识别的首要步骤,可以提升图像质量和减少噪声的影响。

在Matlab中,我们可以使用一系列的函数和工具箱来进行图像预处理。

常见的图像预处理方法包括灰度化、平滑滤波、边缘检测等。

1. 灰度化灰度化是将彩色图像转换为灰度图像的过程。

在Matlab中,我们可以使用rgb2gray函数将RGB图像转化为灰度图像。

该函数将RGB图像的红、绿、蓝三个分量按一定的权重进行加权平均,得到一个表示灰度的单通道图像。

2. 平滑滤波平滑滤波可以去除图像中的噪声,提升图像的质量。

Matlab中提供了多种平滑滤波函数,如均值滤波、中值滤波和高斯滤波。

用户可以根据实际需求选择合适的滤波方法。

3. 边缘检测边缘检测是图像预处理中常用的技术之一。

Matlab中有多种边缘检测算法可供选择,如Sobel算子、Canny算子和Laplacian算子等。

用户可以根据具体情况选择适合的边缘检测方法。

二、特征提取特征提取是图像识别的关键步骤,是将图像中的信息转化为可供分类器识别的特征向量。

在Matlab中,我们可以使用各种特征提取算法和工具箱来提取特征。

常用的特征包括颜色直方图、纹理特征和形状特征。

1. 颜色直方图颜色直方图是一种常用的图像特征,可以反映图像中不同颜色的分布情况。

在Matlab中,我们可以使用imhist函数计算图像的颜色直方图。

通过统计图像中每个颜色值的像素个数,我们可以得到一个表示颜色分布的特征向量。

2. 纹理特征纹理特征是用来描述图像中的纹理信息的特征。

在Matlab中,我们可以使用局部二值模式(Local Binary Patterns, LBP)和灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)等方法来提取纹理特征。

图像配准(互信息)

图像配准(互信息)
图像配准
1.配准的方法分类 1.配准的方法分类
1.1基于灰度信息的方法 1.1基于灰度信息的方法 1.2基于变换域的方法 1.2基于变换域的方法 1.3基于特征的方法 1.3基于特征的方法
基于灰度信息的配准
利用图像本身具有的灰度统计信息来度量图 像的相似度,采用一定的搜索算法使相似 度量最大的变换形式,达到配准图像的目 的。 互信息的概念 用于描述两个系统间的信息相关性,或者一 个系统所包含的另一个系统中信息的多少, 它可以用熵来表示。
i =1 j =1
I
J
( p ( a i , b j ) ) i = 1 , 2 ,. . I 是图像联合灰度概率分布
j = 1 , 2 ,. J
互信息配准
基于互信息的图像配准就是寻找一个空间变 换关系,使得经过该变换后两幅间的互信 息达到最大。 1.确定空间变换形式 1.确定空间变换形式 2.对变换后的非整数坐标上点进行灰度插值, 2.对变换后的非整数坐标上点进行灰度插值, 计算两幅图像间的互信息 3.通过优化算法,使互信息达到最大值 3.通过优化算法,使互信息达到最大值
互信息配准
试验测试
1.仿射变换和双线性插值,穷举搜索 1.仿射变换和双线性插值,穷举搜索 试验结试仿射变换、PV插值和powell搜索最佳 1.测试仿射变换、PV插值和powell搜索最佳 参数(重要之处PV插值优越于其它插值方 参数(重要之处PV插值优越于其它插值方 法) 2.互信息和变换域相结合的方法 2.互信息和变换域相结合的方法
H(AB) =−∑pAB(ab)logpAB(ab) , , ,
i= 1
n
互信息配准
互信息 I(A;B)=H(A)+H(B)I(A;B)=H(A)+H(B)-H(A,B) =H(A)=H(A)-H(A|B) =H(B)=H(B)-H(B|A) H(A|B)为系统B已知时系统A H(A|B)为系统B已知时系统A的条件熵

基于灰度的图像配准matlab源程序

基于灰度的图像配准matlab源程序

function [I_SSD,I_NCC]= template_matching(T,I)%图像配准% [I_SSD,I_NCC]= template_matching(T,I)% 输入:T-模板 I-输入的原始图像% I_SSD采用像素差平方和法(SSD)的匹配结果% I_NCC采用标准化互相关匹配法的匹配结果% 将图像转换为双精度型T=double(T);I=double(I);if(size(T,3)==3)%如果是彩色图像,则按照彩色图像匹配方法[I_SSD,I_NCC]= template_matching_color(T,I);else%如果是灰度图像,则按照灰度图像匹配方法进行匹配[I_SSD,I_NCC]= template_matching_gray(T,I);endfunction [I_SSD,I_NCC]= template_matching_color(T,I)%子函数%功能:对彩色图像进行匹配子函数,其核心原理是从R、G、B三个子色调进行匹配[I_SSD_R,I_NCC_R]= template_matching_gray(T(:,:,1),I(:,:,1)); [I_SSD_G,I_NCC_G]= template_matching_gray(T(:,:,2),I(:,:,2)); [I_SSD_B,I_NCC_B]= template_matching_gray(T(:,:,3),I(:,:,3));%融合三次匹配结果[I_SSD]=(I_SSD_R+I_SSD_G+I_SSD_B)/3;[I_NCC]=(I_NCC_R+I_NCC_G+I_NCC_B)/3;function [I_SSD,I_NCC]= template_matching_gray(T,I)%子函数%功能:对灰度图像进行匹配子函数T_size=size(T);I_size=size(I);outsize=I_size + T_size -1;%在频域内进行相关计算if(length(T_size)==2)FT=fft2(rot90(T,2),outsize(1),outsize(2));FI=fft2(I,outsize(1),outsize(2));Icorr=real(ifft2(F1.*FT));elseFT=fftn(rot90_3D(T),outsize);FI=fftn(I,outsize);Icorr=real(ifftn(FI.*FT));endLocalQSumI=local_sum(I.*I,T_size);QSumT=sum(T(:).^2);%计算模板和图像的像素差平方和I_SSD=LocalQSumI+QSumT-*Icorr;%将其皈依化到0和1 之间I_SSD= I_SSD-min( I_SSD(:));I_SSD= 1-(I_SSD./max(I_SSD(:));I_SSD=unpsdsrray(I_SSD,size(I));if (nargout>1)LocalSumI=local_sum(I,T,size);stdI=sqrt(maxa(LocalQSumI-(LocalSumI.^2)/numel(T),0));stdT=sqrt(numel(T)-1)*Std(T(:));meanIT=LocalSumI*Sum(T(:))/numel(T);I_NCC=0.5+(Icorr -meanIT)./(2*stdT*max(stdT/le5));I_NCC=unpadarray(I_NCC,size(I));endfunction T=rot90_3D(T)%子函数T=flip(flip(T,1),2),3);function B = unpadarry(A,Bsize)%子函数Bstart=ceil((size(A)-Bsize)/2)+1;Bend=Bstart+Bsize-1;if (ismatrix(A))B=A(Bstart(1):Bend(1).Bstart(2),Bend(2));elseif(ndims(A)==3)B=A(Bstart(1):Bend(1),Bstart(2),Bend(2),Bstart(2),Bend(3));endfunction local_sum_I=local_sum(I,T_size)%子函数B=padartay(I,T_size);if(length(T_size)==2)s=cumsum(B,1);c=s(1+T_size(1):end-1,:)-s(1:end-T_size(1)-1,:);s=cumsum(c,2);local_sum_I=s(:,1+T_size(2):end-1)-s(:,1:end-T_size(2)-1);elses=cumsum(B,1);c=s(1+T_size(1):end-1,:,:)-s(1:end-T_size(1)-1,:,:); s=cumsum(c,2);c=s(:,1+T_size(2):end-1,:)-s(:,1:end-T_size(2)-1,:);s=cumsum(c,3);local_sum_=S(:,:,1+T_size(3):end-1)-s(:,:,1:end-T_size(3)-1);end。

MATLAB中的图像配准与匹配方法

MATLAB中的图像配准与匹配方法

MATLAB中的图像配准与匹配方法图像配准与匹配是计算机视觉领域的重要研究方向。

配准指的是将多幅图像在空间上对齐,使得它们之间的特定特征点或特征区域对应一致。

匹配则是在已经配准的图像中寻找相似的图像区域。

在实际应用中,图像配准与匹配常用于医学图像分析、遥感影像处理、计算机视觉等领域,具有广泛的应用前景。

MATLAB作为一种强大的数值计算与数据可视化软件,提供了丰富的图像处理和计算机视觉函数,使得图像配准与匹配任务变得更加简便和快捷。

下面将介绍几种常用的MATLAB图像配准与匹配方法。

一、基于特征点的图像配准特征点是图像中具有鲁棒性和独特性的点,常常用于图像配准任务。

在MATLAB中,可以使用SURF(Speeded-Up Robust Features)或SIFT(Scale-Invariant Feature Transform)等函数来检测图像中的特征点。

然后可以通过计算特征点间的相似度或使用一致性约束等方法来对图像进行配准。

二、基于图像区域的图像配准除了特征点外,图像的局部区域也可以作为配准的参考。

一种常用的方法是使用归一化互相关(Normalized Cross Correlation)来度量两幅图像之间的匹配度。

在MATLAB中,可以使用normxcorr2函数来实现归一化互相关操作。

该函数将两幅图像进行归一化,并计算它们之间的互相关系数,从而确定最佳的配准位置。

三、基于形态学的图像配准形态学图像处理是一种基于形态学运算的图像处理方法。

它利用图像中的形状、结构和拓扑信息来进行图像处理和分析。

在图像配准中,形态学操作可以用来提取图像区域的形状信息,并进行形状匹配。

在MATLAB中,可以使用bwmorph函数进行形态学操作,例如腐蚀、膨胀、开运算、闭运算等,从而实现图像的配准与匹配。

四、基于变换模型的图像配准图像配准中常常涉及到图像的几何变换,例如平移、旋转、缩放、投影变换等。

在MATLAB中,可以使用imwarp函数来对图像进行几何变换和配准。

基于灰度变换的图像增强及MATLAB实现.

基于灰度变换的图像增强及MATLAB实现.
(请自己运行查看)
n=256时:
(请自己运行查看)
下面利用直方图均衡化增强图像的对比度:
I=imread('cameraman.tif';
J=histeq(I;
%将灰度图像转换成具有64(默认)个离散灰度级的灰度图像
imshow(I
title('原始图像'
figure,imshow(J
title('直方图均衡化后的图像'
三直方图增强及matlab实现
3.1直方图均衡化
直方图均衡化是一种最常用的直方图修正。它是把给定图象的直方图分布改造成均匀直方图分布。由信息学的理论来解释,具有最大熵(信息量的图象为均衡化图象。直观地讲,直方图均衡化导致图象的对比度增加。直方图均衡化基本做法是将每个灰度区间等概率分布代替了原来的随机分布,即增强后的图象中每一灰度级的像元数目大致相同。直方图均衡化可使得面积最大的地物细节得以增强,而面积小的地物与其灰度接近的地物进行合并,形成综合地物。减少灰度等级换取对比度的增大要注意的是,均衡化处理后的图象只能是近似均匀分布。均衡化图象的动态范围扩大了,但其本质是扩大了量化间隔,而量化级别反而减少了,因此,原来灰度不同的象素经处理后可能变的相同,形成了一片的相同灰度的区域,各区域之间有明显的边界,从而出现了伪轮廓。
matlab直方图均衡化的函数是histeq,
I = imread('pout.tif';
[J,T] = histeq(I;
figure,plot((0:255/255,T;
图像的灰度直方图均衡化公式:
公式中,T(rk来表示原图像的第k个灰度级的转换函数。∑表示总和。∑nj/N表示0~j个灰度级的像素数量总和与像素总数的比值,也就是前面讲过的百分位(当前色阶与前面色阶的所有像素数量÷总像素数量。∑Pr(rk表示第0~k的灰度级出现概率累积相加。因为s是归一化的数值(s∈[0,1],要转换为0~255的颜色值,需要再乘上255,即S=∑Pr(rk*255。

(完整版)数字图像处理MATLAB程序【完整版】

(完整版)数字图像处理MATLAB程序【完整版】

第一部分数字图像处理实验一图像的点运算实验1.1 直方图一.实验目的1.熟悉matlab图像处理工具箱及直方图函数的使用;2.理解和掌握直方图原理和方法;二.实验设备1.PC机一台;2.软件matlab。

三.程序设计在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。

I=imread('cameraman.tif');%读取图像subplot(1,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(1,2,2),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。

书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察图像matlab环境下的直方图分布。

(a)原始图像 (b)原始图像直方图六.实验报告要求1、给出实验原理过程及实现代码;2、输入一幅灰度图像,给出其灰度直方图结果,并进行灰度直方图分布原理分析。

实验1.2 灰度均衡一.实验目的1.熟悉matlab图像处理工具箱中灰度均衡函数的使用;2.理解和掌握灰度均衡原理和实现方法;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用灰度均衡函数,设置相关参数,再输出处理后的图像。

I=imread('cameraman.tif');%读取图像subplot(2,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(2,2,3),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题a=histeq(I,256); %直方图均衡化,灰度级为256subplot(2,2,2),imshow(a) %输出均衡化后图像title('均衡化后图像') %在均衡化后图像中加标题subplot(2,2,4),imhist(a) %输出均衡化后直方图title('均衡化后图像直方图') %在均衡化后直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。

基于MATLAB的彩色图像灰度化处理

基于MATLAB的彩色图像灰度化处理

目录第1章绪论............................................................................................................................ - 0 - 第2章设计原理.................................................................................................................... - 1 - 第3章彩色图像的灰度化处理............................................................................................ - 2 - 3.1加权平均法 .. (2)3.2平均值法 (2)3.3最大值法 (3)3.4举例对比 (4)3.5结果分析 (5)第4章结论.......................................................................................................................... - 7 - 参考文献.................................................................................................................................... - 7 - 附录............................................................................................................................................ - 8 -基于Matlab的彩色图像灰度化处理第1章绪论在计算机领域中,灰度数字图像是每个像素只有一个采样颜色的图像。

matlab灰度处理二值化处理

matlab灰度处理二值化处理

Matlab在图像处理领域有着广泛的应用,其中灰度处理和二值化处理是常见的图像处理方法之一。

本文将详细介绍Matlab中的灰度处理和二值化处理的原理和实现方法。

一、灰度处理1. 灰度图像的概念灰度图像是指图像中每个像素的灰度值介于0-255之间的图像。

在灰度图像中,0代表黑色,255代表白色,中间的灰度值代表了不同程度的灰色。

2. 灰度处理的原理灰度处理是将彩色图像转换为灰度图像的过程。

在Matlab中,可以通过以下公式实现灰度处理:灰度值 = 0.299 * R + 0.587 * G + 0.114 * B其中,R、G、B分别代表彩色图像中的红色、绿色和蓝色分量。

通过对每个像素的RGB分量进行加权求和,可以得到对应的灰度值。

3. 灰度处理的实现在Matlab中,可以使用`rgb2gray`函数实现灰度处理。

具体的代码如下:```matlab读取彩色图像rgbImage = imread('example.jpg');灰度处理grayImage = rgb2gray(rgbImage);显示灰度图像imshow(grayImage);```二、二值化处理1. 二值化图像的概念二值化图像是指将灰度图像中的像素值转换为0或255的图像。

在二值化图像中,像素值为0代表黑色,像素值为255代表白色。

2. 二值化处理的原理二值化处理的目的是将灰度图像中的灰度值转换为0或255。

一般可以通过设置一个阈值,将低于阈值的像素值设为0,将高于阈值的像素值设为255。

3. 二值化处理的实现在Matlab中,可以使用`im2bw`函数实现二值化处理。

具体的代码如下:```matlab读取灰度图像grayImage = imread('example_gray.jpg');设置阈值threshold = 128;二值化处理binaryImage = im2bw(grayImage, threshold/255);显示二值化图像imshow(binaryImage);```三、总结本文详细介绍了Matlab中灰度处理和二值化处理的原理和实现方法。

Matlab二维灰度图象分析及变换处理.

Matlab二维灰度图象分析及变换处理.

《基础强化训练》设计报告题目:二维灰度图象的统计分析及变换处理专业班级:学生姓名:指导教师:2010 年 7 月 17 日《基础强化训练》设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 二维灰度图象的统计分析及(FFT)变换处理课程设计目的:1 较全面了解常用的数据分析与处理原理及方法;2 能够运用相关软件进行模拟分析;3 掌握基本的文献检索和文献阅读的方法;4 提高正确地撰写论文的基本能力。

课程设计内容和要求1 采集一幅像素大于64*64黑白图像;2 常规的数学统计数据处理:计算图象各象素点灰度值得均值、标准差、方差,并绘出灰度直方图;3 采用[FFT(傅立叶变换)]对图像进行分析初始条件:1 MATLAB软件。

2 数字信号处理与图像处理基础知识。

时间安排:第18周周一:安排任务19~20周:仿真设计(鉴主13楼计算机实验室)第20周周六:完成(答辩,提交报告,演示)指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 1Abstract 21 数据采集 31.1图像的选取 31.2 MATLAB读取方法 41.2.1 编辑M文件 41.2.2 图像的读取 41.2.3查看图像的格式 61.2.4 灰度值的获取 72 数据统计处理 82.1 均值计算 82.1.1 原理及计算公式 82.1.2 计算程序及结果 92.2 各像素点灰度值的标准差 92.3 各像素点灰度值的方差 102.4 灰度直方图 113.傅立叶变化 133.1 原理及计算公式 133.2 变换及逆变换程序及结果 143.3对变换后的图像的说明 164.总结(心得体会) 175.参考文献 18摘要MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

Matlab中的图像拼接与合成方法

Matlab中的图像拼接与合成方法

Matlab中的图像拼接与合成方法图像拼接和合成是数字图像处理中的重要技术,在许多领域都有广泛的应用,如计算机视觉、图形学、遥感和医学图像等。

在Matlab中,我们可以利用一些强大的工具和函数来实现图像拼接与合成。

一、图像的基本处理在进行图像拼接与合成之前,我们需要先对待处理的图像进行一些基本的预处理,比如图像的读取、转换、调整和裁剪等。

Matlab提供了丰富的函数和工具箱来完成这些任务。

1. 图像读取与转换Matlab中可以使用imread函数来读取图像,支持多种图像格式,如JPEG、PNG和BMP等。

读取后的图像可以保存在一个矩阵中,每个像素的值代表该位置的颜色信息。

读取图像示例代码:image = imread('image.jpg');对于彩色图像,可以使用rgb2gray函数将图像转换成灰度图像,方便后续处理。

转换为灰度图像示例代码:gray_image = rgb2gray(image);2. 图像调整与裁剪Matlab中提供了imresize函数来调整图像大小,可以根据比例因子或指定的尺寸来调整图像。

另外,还可以使用imcrop函数来裁剪图像,根据指定的位置和尺寸来截取感兴趣的部分。

调整图像大小示例代码:resized_image = imresize(image, 0.5); % 缩小为原来的一半裁剪图像示例代码:cropped_image = imcrop(image, [x, y, width, height]); % 截取位置为(x, y),尺寸为width x height的图像二、图像拼接方法图像拼接是将多幅图像按照一定的规则拼接在一起,构成一幅更大的图像。

Matlab中有多种方法可以实现图像的拼接,常用的方法包括简单的几何变换、局部特征匹配和全局优化方法等。

1. 简单的几何变换最简单的图像拼接方法是通过几何变换将多幅图像对齐,然后将它们合并在一起。

在Matlab中,可以使用imtransform函数来进行几何变换,常见的变换包括平移、旋转、缩放和翻转等。

matlab图像的灰度变换

matlab图像的灰度变换

实验二 图像的灰度‎变换一、实验目的1、 理解数字图‎像处理中点‎运算的基本‎作用;2、 掌握对比度‎调整与灰度‎直方图均衡‎化的方法。

二、实验原理1、对比度调整‎如果原图像‎f (x , y )的灰度范围‎是[m , M ],我们希望对‎图像的灰度‎范围进行线‎性调整,调整后的图‎像g (x , y )的灰度范围‎是[n , N ],那么下述变‎换:[]n m y x f mM n N y x g +---=),(),(就可以实现‎这一要求。

MA TLA ‎B 图像处理‎工具箱中提‎供的i ma ‎d j ust ‎函数,可以实现上‎述的线性变‎换对比度调‎整。

imadj ‎u st 函数‎的语法格式‎为:J = imadj ‎u st(I,[low_i ‎n high_‎i n], [low_o ‎u t high_‎o ut])J = imadj ‎u st(I, [low_i ‎n high_‎i n], [low_o ‎u t high_‎o ut])返回原图像‎I 经过直方‎图调整后的‎新图像J ,[low_i ‎n high_‎i n]为原图像中‎要变换的灰‎度范围,[low_o ‎u t high_‎o ut]指定了变换‎后的灰度范‎围,灰度范围可‎以用 [ ] 空矩阵表示‎默认范围,默认值为[0, 1]。

不使用im ‎adjus ‎t 函数,利用mat ‎l ab 语言‎直接编程也‎很容易实现‎灰度图像的‎对比度调整‎。

但运算的过‎程中应当注‎意以下问题‎,由于我们读‎出的图像数‎据一般是u ‎i nt8型‎,而在MAT ‎LAB 的矩‎阵运算中要‎求所有的运‎算变量为d ‎o uble ‎型(双精度型)。

因此读出的‎图像数据不‎能直接进行‎运算,必须将图像‎数据转换成‎双精度型数‎据。

2、直方图均衡‎化直方图均衡‎化的目的是‎将原始图像‎的直方图变‎为均衡分布‎的形式,即将一已知‎灰度概率密‎度分布的图‎像,经过某种变‎换变成一幅‎具有均匀灰‎度概率密度‎分布的新图‎像,从而改善图‎像的灰度层‎次。

基于MATLAB的图像拼接技术

基于MATLAB的图像拼接技术

基于MATLAB的图像拼接技术实验报告学院:数信学院专业班级: 12级信息工程1班姓名学号:一、 实验名称:基于MATLAB 的图像拼接技术二、 实验目的:利用图像拼接技术得到超宽视角的图像,用来虚拟实际场景。

三、 实验原理:基于相位相关的图像拼接技术是一种基于频域的方法,通过求得图像在频域上是相位相关特点来找到特征位置,从而进行图像拼接。

其基本原理是基于傅氏功率谱的相关技术。

该方法仅利用互功率谱中的相位信息进行图像配准,对图像间的亮度变化不敏感,而且所获得的相关峰尖突出,具有一定的鲁棒性和较高的配准精度。

基于相位相关法进行图像拼接的基本原理如下:假设f (x ,y )表示尺寸 为M ⨯N 的图像,该函数的二维离散傅里叶变换(DFT )为:112(//)001(,)(,)M N j ux M vy N x y F u v f x y eM Nπ---+===⨯∑∑其中,F (u ,v )是复变函数;u 、v 是频率变量,u=0,1,…,M-1,v=0,1,…,N-1;x 、y 是空间或图像变量。

二维离散傅里叶逆变换(IDFT )为:112(//)0(,)(,)N M j ux M vy N y x f u v e F x y π---+===∑∑其中,x=0,1,…,M-1;y=0,1,…,N-1。

设两幅图像1I 、2I 的重叠位置为(0x ,0y ),则图像1I 、2I 的互功率谱为:00*2()1212(,)(,)(,)(,)j x y I I e I I πξηξηξηξηξη-+⨯=⨯其中,*为共轭符号,对上式两边进行傅里叶逆变换将在(0x ,0y )处产生一个 函数。

因此,只要检测上式傅里叶逆变换结果最大值的位置,就可以获得两幅图像间的评议量(0x ,0y 。

具体算法步骤如下: ①读入两幅图片1I 、2I (函数输入),并转换为灰度图像; ②分别对1I 、2I 做二维傅里叶变换,即: A=2fft (1I ) B=2fft (2I )则通过A 、B 的简单的矩阵运算得到另一矩阵3C ,即: 3C =B*.conj (A )/norm (B*.conj (A ),1)矩阵3C 的二维傅里叶逆变换C 在(0x ,0y )处取得最大,可通过遍历比较C (i ,j )大小即可找到该位置,并作为函数返回值。

基于SIFT特征的图像配准(Matlab源代码)

基于SIFT特征的图像配准(Matlab源代码)

基于SIFT特征的图像配准(附Matlab源代码)本文先给出了采用SIFT方法进行图像配准的实验原图以及实验结果,最后附上Matlab 源代码。

实验一:实验一的图像(见图1.1)是本人自己拍摄的,然后由软件裁剪成400×400像素而成,其中参考图像和待配准图像之间有重叠部分,且具有一定的旋转。

这是一般难度的图像配准。

(图1.1 参考图像(左图)和待配准图像(右图))经过筛选后的能作为配准控制点的SIFT匹配特征点对见下图1.2所示。

(图1.2 经过筛选后的能作为配准控制点的SIFT匹配特征点对)配准后的图像见下图1.3所示。

(1.3 配准后的图像)实验二:实验二的图像(见图2.1)是本人自己在同一地点不同角度拍摄的,然后由软件裁剪成600×450像素而成,其中参考图像和待配准图像之间有重叠部分,且具有一定的旋转。

这是具有一定难度的图像配准。

(图2.1 参考图像(左图)和待配准图像(右图))经过筛选后的能作为配准控制点的SIFT匹配特征点对见下图2.2所示。

(图2.2 经过筛选后的能作为配准控制点的SIFT匹配特征点对)配准后的图像见下图1.3所示。

(2.3 配准后的图像)实验三:实验三的图像(见图3.1)是两幅SAR图像,大小为400×400像素,其中参考图像和待配准图像之间有重叠部分,且具有一定的旋转。

这是具有难度的图像配准。

(图3.1 参考图像(左图)和待配准图像(右图))经过筛选后的能作为配准控制点的SIFT匹配特征点对见下图3.2所示。

(图3.2 经过筛选后的能作为配准控制点的SIFT匹配特征点对)配准后的图像见下图3.3所示。

(3.3 配准后的图像)要自行下载,下载链接为/s/1pJL4SB5,需要*.m格式的源代码的,到/download/destiny0321/9204877进行下载。

Zoo_main.mclose all;clear all;clc;im1=imread('image data\image3_1.jpg'); im2=imread('image data\image3_2.jpg');gray1=zoo_x2gray(im1);gray2=zoo_x2gray(im2);[des1,loc1]=zoo_sift(gray1);[des2,loc2]=zoo_sift(gray2);figure;zoo_drawPoints(im1,loc1,im2,loc2);Num=3;Thresh=0.85;match=zoo_BidirectionalMatch(des1,des2,Num ,Thresh);clear des1des2loc1=loc1(match(:,1),:);loc2=loc2(match(:,2),:);figure;zoo_linePoints(im1,loc1,im2,loc2);agl=zoo_getRotAgl(loc1,loc2);figure;zoo_drawRotAglHist(agl);opt=zoo_optIndex(agl);loc1=loc1(opt,:);loc2=loc2(opt,:);figure;zoo_linePoints(im1,loc1,im2,loc2);T=zoo_getTransMat(gray1,loc1,gray2,loc2); im=zoo_imRegist(im1,im2,T);figure,imshow(im);zoo_x2gray.mfunction gray=zoo_x2gray(im)if length(size(im))==3gray=rgb2gray(im);elsegray=im;endgray=uint8(medfilt2(double(gray)));zoo_sift.mfunction [des,loc]=zoo_sift(im)[row,col]=size(im);f=fopen('tmp.pgm','w');if f==-1error('Could not create file tmp.pgm.'); endfprintf(f, 'P5\n%d\n%d\n255\n', col, row); fwrite(f,im','uint8');fclose(f);if isunixcommand = '!./sift ';elsecommand = '!siftWin32 ';endcommand = [command ' <tmp.pgm >tmp.key']; eval(command);g=fopen('tmp.key','r');if g==-1error('Could not open file tmp.key.');end[header,cnt]=fscanf(g,'%d %d',[1 2]);if cnt~=2error('Invalid keypoint file beginning.'); endnum=header(1);len=header(2);if len~=128error('Keypoint descriptor length invalid (should be 128).');endloc=double(zeros(num,4));des=double(zeros(num,128));for k=1:num[vector,cnt]=fscanf(g, '%f %f %f %f', [1 4]);if cnt~=4error('Invalid keypoint file format');endloc(k,:)=vector(1,:);[descrip, count] = fscanf(g, '%d', [1 len]);if (count ~= 128)error('Invalid keypoint file value.');enddescrip = descrip / sqrt(sum(descrip.^2));des(k, :) = descrip(1, :);endfclose(g);for k=1:size(des,1)des(k,:)=des(k,:)/sum(des(k,:));enddelete tmp.key tmp.pgmzoo_drawPoints.mfunction zoo_drawPoints(im1,loc1,im2,loc2)im=zoo_appendingImages(im1,im2);imshow(im);hold onset(gcf,'Color','w');plot(loc1(:,2),loc1(:,1),'r*',loc2(:,2)+size(im1,2),l oc2(:,1),'b*');hold offzoo_BidirectionalMatch.mfunctionmatch=zoo_BidirectionalMatch(des1,des2,Num ,Thresh)X=sum(des1.^2,2);Y=sum(des2.^2,2);XY=des1*des2';zoo_BidirectionalMatchcorr=XY./sqrt(X*Y');[corr1,ix1]=sort(corr,2,'descend');corr1=corr1(:,1:Num);ix1=ix1(:,1:Num);[row1,col1]=find(corr1>Thresh);match12=zeros(length(row1),2);match12(:,1)=row1;match12(:,2)=ix1(size(corr1,1)*(col1-1)+row1); clear corr1ix1row1col1[corr2,ix2]=sort(corr,1,'descend');corr2=corr2(1:Num,:);ix2=ix2(1:Num,:);[row2,col2]=find(corr2>Thresh);match21=zeros(length(col2),2);match21(:,1)=ix2(Num*(col2-1)+row2);match21(:,2)=col2;clear corr2ix2row2col2m1=match12(:,1)*10000+match12(:,2);m2=match21(:,1)*10000+match21(:,2);clear match12match=[];for k=1:length(m1)re=m1(k)-m2;idx=find(re==0);if ~isempty(idx)match=[match;match21(idx,:)];endend zoo_linePoints.mfunction zoo_linePoints(im1,loc1,im2,loc2)im=zoo_appendingImages(im1,im2);imshow(im);hold onset(gcf,'Color','w');plot(loc1(:,2),loc1(:,1),'r*',loc2(:,2)+size(im1,2),l oc2(:,1),'b*');for k=1:size(loc1,1)text(loc1(k,2)-10,loc1(k,1),num2str(k),'Color','y',' FontSize',12);text(loc2(k,2)+size(im1,2)+5,loc2(k,1),num2str( k),'Color','y','FontSize',12);line([loc1(k,2) loc2(k,2)+size(im1,2)],...[loc1(k,1) loc2(k,1)],'Color','g');endhold offzoo_getRotAgl.mfunction agl=zoo_getRotAgl(loc1,loc2)ori1=loc1(:,4);ori2=loc2(:,4);agl=ori2-ori1;agl=agl*180/pi;zoo_drawRotAglHist.mfunction zoo_drawRotAglHist(agl)agl=agl(agl>-180);agl=agl(agl<180);hist(agl,180);hold onset(gcf,'Color','w');xlabel('Rotated Angle(¡ã)');ylabel('Number of Feature Point');hold offzoo_getTransMat.mfunctionT=zoo_getTransMat(gray1,loc1,gray2,loc2) gray1=double(gray1);gray2=double(gray2);N=size(loc1,1);iter=N*(N-1)*(N-2)/6;SEL=zeros(iter,3);count=1;for i=1:N-2for j=2:N-1for k=3:Nif i<j && j<kSEL(count,:)=[i j k];count=count+1;endendendendT=[];corr1=-1;for k=1:itersel=SEL(k,:);x1=loc1(sel,2);y1=loc1(sel,1);x2=loc2(sel,2);y2=loc2(sel,1);xy1=[x1';y1';ones(1,3)];xy2=[x2';y2';ones(1,3)];t=xy1/xy2;grayset=getMask(gray1,gray2,t);if isempty(grayset)continueendd1=grayset(1,:);d2=grayset(2,:);corr2=(d1*d2')/sqrt((d1*d1')*(d2*d2'));if corr2>corr1corr1=corr2;T=t;endendfunction grayset=getMask(im1,im2,T) [row1,col1]=size(im1);[row2,col2]=size(im2);T=T^(-1);grayset=[];for i=1:row1for j=1:col1xy1=[j;i;1];xy2=round(T*xy1);if xy2(1)>=1 && xy2(1)<=col2 &&xy2(2)>=1 && xy2(2)<=row2grayset=[grayset,[im1(i,j);im2(xy2(2),xy2(1))]];endendendzoo_imRegist.mfunction im=zoo_imRegist(im1,im2,T)sz=3*max(length(im1),length(im2));dim=length(size(im1));if dim==3[row1,col1,~]=size(im1);[row2,col2,~]=size(im2);im=zeros(sz,sz,3);else[row1,col1]=size(im1);[row2,col2]=size(im2);im=zeros(sz,sz);endcX=sz/3;cY=sz/3;if dim==3im(1+cY:row1+cY,1+cX:col1+cX,:)=im1; elseim(1+cY:row1+cY,1+cX:col1+cX)=im1; endT=T^(-1);for i=1:size(im,1)for j=1:size(im,2)xy1=[j-cX;i-cY;1];xy2=round(T*xy1);nx=xy2(1);ny=xy2(2);if nx>=1 && nx<=col2 && ny>=1 &&ny<=row2if i<=cY || i>=cY+row1 || j<=cX || j>=cX+col1if dim==3im(i,j,:)=im2(ny,nx,:);elseim(i,j)=im2(ny,nx);endendendendendim=imCrop(im);im=uint8(im);function im=imCrop(pic)if length(size(pic))==3gray=rgb2gray(pic);elsegray=pic;endSZ=length(gray);k=1;while k<SZif any(any(gray(k,:)))breakendk=k+1;endceil=k;k=SZ;while k>0if any(any(gray(k,:)))breakendk=k-1;endbottom=k;k=1;while k<SZif any(any(gray(:,k)))breakendk=k+1;endleft=k;k=SZ;while k>0if any(any(gray(:,k)))breakendk=k-1;endright=k;if length(size(pic))==3im=pic(ceil:bottom,left:right,:);elseim=pic(ceil:bottom,left:right);endzoo_appendingImages.mfunction im=zoo_appendingImages(im1,im2) if length(size(im1))==3[row1,col1,~]=size(im1);[row2,col2,~]=size(im2);if row1<=row2im1=[im1;zeros(row2-row1,col1,3)];elseim2=[im2;zeros(row1-row2,col2,3)];endelse[row1,col1]=size(im1);[row2,col2]=size(im2);if row1<=row2im1=[im1;zeros(row2-row1,col1)];elseim2=[im2;zeros(row1-row2,col2)];endendim=[im1,im2];zoo_optIndexfunction opt=zoo_optIndex(agl) [n,xout]=hist(agl,180);alpha=0.75;[~,IX]=find(n>alpha*max(n));n=n(IX);xout=xout(IX);theta=sum(xout.*n)/sum(n);rg=[theta-1,theta+1];opt=[];for k=1:length(agl)if agl(k)>=rg(1) && agl(k)<=rg(2) opt=[opt,k];endif length(opt)>=16breakendend。

实验2b 图像的灰度变换

实验2b  图像的灰度变换

实验2b 图像的灰度变换一、实验目的:学会用Matlab软件对图像进行运算和灰度变换。

二、实验内容:用+、-、*、/、imabsdiff、imadd、imcomplment、imdivide、imlincomb、immultiply、imsubtract和imadjust等函数生成各类灰度变换图像。

三、实验报告要求:写出每步处理的命令,并提交原图像和处理后的图像。

四、实验相关知识1、代数运算两幅图像之间进行点对点的加、减、乘、除运算后得到输出图像。

我们可以分别使用MATLAB的基本算术符+、-、*、/来执行图像的算术操作,但是在此之前必须将图像转换为适合进行基本操作的双精度类型(命令函数为double())。

为了更方便对图像进行操作,图像处理工具箱中也包含了一个能够实现所有非稀疏数值数据的算术操作的函数集合。

如下所示:imabsdiff:计算两幅图像的绝对差值imadd:两个图像的加法imcomplment:一个图像的补imdivide:两个图像的除法imlincomb:计算两幅图像的线性组合immultiply:两个图像的乘法imsubtract:两个图像的减法使用图像处理工具箱中的图像代数运算函数无需再进行数据类型间的转换,这些函数能够接受uint8和uint16数据,并返回相同格式的图像结果。

代数运算的结果很容易超出数据类型允许的范围。

图像的代数运算函数使用以下截取规则使运算结果符合数据范围的要求:超出数据范围的整型数据将被截取为数据范围的极值,分数结果将被四舍五入。

2、灰度变换点运算也称为灰度变换,是一种通过对图像中的每个像素值进行运算,从而改善图像显示效果的操作。

五、实验步骤:1、仔细阅读imabsdiff、imadd、imcomplment、imdivide、imlincomb、immultiply和imsubtract的帮助文件(help imabsdiff),并练习相关函数的使用。

图像处理灰度变换实验

图像处理灰度变换实验

一. 实验名称:空间图像增强(一)一.实验目的1.熟悉和掌握利用matlab工具进行数字图像的读、写、显示、像素处理等数字图像处理的基本步骤和流程。

2.熟练掌握各种空间域图像增强的基本原理及方法。

3.熟悉通过灰度变换方式进行图像增强的基本原理、方法和实现。

4.熟悉直方图均衡化的基本原理、方法和实现。

二.实验原理(一)数字图像的灰度变换灰度变换是图像增强的一种经典而有效的方法。

灰度变换的原理是将图像的每一个像素的灰度值通过一个函数,对应到另一个灰度值上去从而实现灰度的变换。

常见的灰度变换有线性灰度变换和非线性灰度变换,其中非线性灰度变换包括对数变换和幂律(伽马)变换等。

1、线性灰度变换1)当图像成像过程曝光不足或过度,或由于成像设备的非线性和图像记录设备动态范围太窄等因素,都会产生对比度不足的弊病,使图像中的细节分辨不清,图像缺少层次。

这时,可将灰度范围进行线性的扩展或压缩,这种处理过程被称为图像的线性灰度变换。

对灰度图像进行线性灰度变换能将输入图像的灰度值的动态范围按线性关系公式拉伸扩展至指定范围或整个动态范围。

2)令原图像f(x,y)的灰度范围为[a,b],线性变换后得到图像g(x,y),其灰度范围为[c,d],则线性灰度变换公式可表示为a y x fb y x f a b y x fc c a y x f a b cd d y x g <≤≤>⎪⎩⎪⎨⎧+---=),(),(),(,,]),([,),( (1)由(1)式可知,对于介于原图像f (x,y )的最大和最小灰度值之间的灰度值,可通过线性变换公式,一一对应到灰度范围[c,d]之间,其斜率为(d-c)/(b-a);对于小于原图像的最小灰度值或大于原图像的最大灰度值的灰度值,令其分别恒等于变换后的最小和最大灰度值。

变换示意图如图1所示。

图1 线性灰度变换示意图当斜率大于一时,变换后的灰度值范围得到拉伸,图像对比度得到提高;当斜率小于一时,变换后的灰度值范围被压缩,最小与最大灰度值的差变小,图像对比度降低;当斜率等于一时,相当于对图像不做变换。

matlab中gray函数

matlab中gray函数

matlab中gray函数"gray函数在MATLAB 中的应用"引言:MATLAB 是一种强大的科学计算和数据分析软件,许多研究人员和工程师在日常工作中使用它来解决各种问题。

在图像处理领域,gray函数是MATLAB 中一个常用的函数,可以将彩色图像转换为灰度图像。

本文将详细介绍gray 函数在MATLAB 中的应用,并提供一步一步的指导,帮助读者在自己的项目中正确使用该函数。

第一部分:理解gray 函数的基本原理(200-300字)gray 函数是MATLAB 中的一个内置函数,可以将彩色图像转换为灰度图像。

它基于图像中的像素值,根据设定的公式将彩色图像中的每个像素转换为对应的灰度值。

gray 函数的优势之一是它能很好地保留图像的细节和对比度,同时减少了处理彩色图像所需的计算量。

第二部分:使用gray 函数的步骤(400-600字)在使用gray 函数之前,我们需要先加载图像并将其存储在MATLAB 的变量中。

可以通过使用imread 函数从文件中读取图像。

以下是使用gray 函数将彩色图像转换为灰度图像的详细步骤:1. 读取彩色图像(100-150字)使用imread 函数,将彩色图像加载到MATLAB 的变量中。

例如,可以使用以下代码将名为image.jpg的图像加载到名为A的变量中:A = imread('image.jpg');2. 转换为灰度图像(100-150字)使用gray 函数将彩色图像转换为灰度图像。

在调用gray 函数时,需要传递彩色图像所存储的变量名作为参数。

例如,我们可以使用以下代码将图像变量A转换为灰度图像:B = gray(A);3. 显示灰度图像(100-150字)使用imshow 函数显示转换后的灰度图像。

可以使用以下代码将灰度图像变量B显示在MATLAB 的图像窗口中:imshow(B);4. 保存灰度图像(100-150字)如果需要保存转换后的灰度图像,可以使用imwrite 函数将灰度图像保存到特定的文件中。

在MATLAB中进行图像配准的方法

在MATLAB中进行图像配准的方法

在MATLAB中进行图像配准的方法图像配准是指将多幅或多个角度拍摄的图像对齐到一个参考坐标系中的过程。

在医学影像、卫星图像、计算机视觉等领域中,图像配准是非常常见的任务。

在Matlab中,有许多方法可以进行图像配准,包括基于特征的方法、基于相似性测量的方法和基于优化的方法。

本文将详细介绍一些常用的图像配准方法及其实现。

一、基于特征的方法基于特征的图像配准方法是指通过提取图像中的显著特征点,然后将这些特征点进行匹配,从而实现图像的配准。

在Matlab中,可以使用SURF(Speeded Up Robust Features)算法进行特征点的提取和匹配。

首先,使用surf函数提取两幅图像中的特征点和特征描述子:```I1 = imread('image1.jpg');I2 = imread('image2.jpg');points1 = detectSURFFeatures(rgb2gray(I1));[features1, validPoints1] = extractFeatures(rgb2gray(I1), points1);points2 = detectSURFFeatures(rgb2gray(I2));[features2, validPoints2] = extractFeatures(rgb2gray(I2), points2);```然后,使用matchFeatures函数进行特征点的匹配:```indexPairs = matchFeatures(features1, features2);matchedPoints1 = validPoints1(indexPairs(:, 1), :);matchedPoints2 = validPoints2(indexPairs(:, 2), :);```最后,使用estimateGeometricTransform函数估计并应用变换矩阵,实现图像的配准:```[tform, inlierPoints1, inlierPoints2] = estimateGeometricTransform(matchedPoints1, matchedPoints2, 'affine');outputView = imref2d(size(I1));registeredImage = imwarp(I2, tform, 'OutputView', outputView);figure;subplot(1, 2, 1);imshow(I1);title('Image 1');subplot(1, 2, 2);imshow(registeredImage);title('Registered Image 2');```上述代码中,首先使用detectSURFFeatures函数检测图像中的SURF特征点,并使用extractFeatures函数提取这些特征点的描述子。

matlab 灰度质心法

matlab 灰度质心法

matlab 灰度质心法灰度质心法(Centroid Method)是一种常用的图像处理方法,用于计算图像的质心位置。

质心是图像的灰度分布中心,可以用来表示图像的特征。

灰度质心法的基本原理是通过计算图像的灰度矩,得到图像的质心位置。

灰度矩是指图像中所有像素的灰度值乘以其对应的位置坐标的和。

具体实现灰度质心法的步骤如下:1. 读取图像:首先,需要使用MATLAB的imread函数读取待处理的图像。

读取得到的图像是一个在0到255之间的二维矩阵,每个元素表示图像的灰度值。

2. 计算灰度矩:将每个像素的灰度值乘以其对应的位置坐标,并求和。

可以使用MATLAB的meshgrid函数生成图像中每个像素的坐标,然后将图像矩阵和坐标矩阵相乘求和得到灰度矩。

3. 计算质心位置:将灰度矩除以图像的总灰度值,得到每个坐标位置对应的灰度质心值。

质心值越大表示灰度分布越偏向于该位置。

4. 可视化质心位置:使用MATLAB的plot函数将质心位置在图像上标识出来,便于观察和分析。

使用灰度质心法可以得到图像的质心位置,进而可以进行一些图像处理操作,如图像分割、边缘检测等。

此外,还可以使用质心位置来计算出图像的几何中心,从而得到图像的旋转角度和尺寸信息。

需要注意的是,灰度质心法对于图像噪声较多或者图像中存在多个物体的情况可能不适用。

在这种情况下,需要进行图像预处理,如平滑滤波和图像分割等,以提高质心的计算准确性。

在MATLAB中,还有其他更高级的图像处理方法可以实现灰度质心法。

例如,可以使用regionprops函数计算图像的灰度质心,该函数还可以计算图像的其他特征,如面积、周长等。

总之,灰度质心法是一种有效的图像处理方法,可以用来计算图像的质心位置,辅助图像的分析和处理。

在MATLAB中,通过计算灰度矩和质心位置的可视化,可以方便地实现该方法。

基于MATLAB中IPT函数的一种遥感图像配准方法

基于MATLAB中IPT函数的一种遥感图像配准方法

基于MATLAB中IPT函数的一种遥感图像配准方法张丽丽;董云峰;付保红;郭险峰;刘开绪【摘要】MATLAB的图像处理工具箱中有基于点特征图像配准的函数,首先对这些函数进行了详细介绍,并使用其完成了遥感图像的配准,之后提出了边缘检测的算法,与上述函数法进行结合,使特征点的提取难度降低,最后对该方法进行了分析,提出了下一步研究重点.【期刊名称】《大庆师范学院学报》【年(卷),期】2013(033)006【总页数】5页(P10-14)【关键词】MATLAB;IPT;遥感图像;配准;边缘检测【作者】张丽丽;董云峰;付保红;郭险峰;刘开绪【作者单位】大庆师范学院物理与电气信息工程学院,黑龙江大庆163712;大庆师范学院物理与电气信息工程学院,黑龙江大庆163712;大庆师范学院物理与电气信息工程学院,黑龙江大庆163712;大庆师范学院物理与电气信息工程学院,黑龙江大庆163712;大庆师范学院物理与电气信息工程学院,黑龙江大庆163712【正文语种】中文【中图分类】TP751图像配准技术广泛应用于遥感图像处理、目标识别、医学影像分析、机器视觉以及三维重建等领域。

在遥感领域,实现图像融合、变化检测、图像校正、图像镶嵌等应用中,图像配准都是必不可少的—个关键步骤[1]。

图像配准方法分为两类:基于图像灰度和基于图像特征。

基于灰度的配准算法由于图像中所有的像素点均参与了计算,因此算法计算量大,运行效率低,不适用于大幅面遥感图像的配准。

基于特征的配准算法首先提取图像中的显著特征(如角点、边缘、直线等)形成特征集,然后确定两幅图像特征集中各个特征的对应关系,计算出变换参数,从而实现图像的配准。

这类算法仅利用了图像中的显著特征参与计算,因而能够降低噪声、灰度变化、形变和遮挡的影响,具有较强的适应力和抗干扰能力;减小了计算量,速度较快,因此在遥感图像配准领域获得了广泛应用。

[2-3]点特征是基于图像特征配准中最常用的特征之一,很多其他的特征提取方法最终都会统一到同名点的提取上。

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

function [I_SSD,I_NCC]= template_matching(T,I)
%图像配准
% [I_SSD,I_NCC]= template_matching(T,I)
% 输入:T-模板 I-输入的原始图像
% I_SSD采用像素差平方和法(SSD)的匹配结果
% I_NCC采用标准化互相关匹配法的匹配结果
% 将图像转换为双精度型
T=double(T);I=double(I);
if(size(T,3)==3)
%如果是彩色图像,则按照彩色图像匹配方法
[I_SSD,I_NCC]= template_matching_color(T,I);
else
%如果是灰度图像,则按照灰度图像匹配方法进行匹配
[I_SSD,I_NCC]= template_matching_gray(T,I);
end
function [I_SSD,I_NCC]= template_matching_color(T,I)
%子函数
%功能:对彩色图像进行匹配子函数,其核心原理是从R、G、B三个子色调进行匹配
[I_SSD_R,I_NCC_R]= template_matching_gray(T(:,:,1),I(:,:,1)); [I_SSD_G,I_NCC_G]= template_matching_gray(T(:,:,2),I(:,:,2)); [I_SSD_B,I_NCC_B]= template_matching_gray(T(:,:,3),I(:,:,3));
%融合三次匹配结果
[I_SSD]=(I_SSD_R+I_SSD_G+I_SSD_B)/3;
[I_NCC]=(I_NCC_R+I_NCC_G+I_NCC_B)/3;
function [I_SSD,I_NCC]= template_matching_gray(T,I)
%子函数
%功能:对灰度图像进行匹配子函数
T_size=size(T);I_size=size(I);
outsize=I_size + T_size -1;
%在频域内进行相关计算
if(length(T_size)==2)
FT=fft2(rot90(T,2),outsize(1),outsize(2));
FI=fft2(I,outsize(1),outsize(2));
Icorr=real(ifft2(F1.*FT));
else
FT=fftn(rot90_3D(T),outsize);
FI=fftn(I,outsize);
Icorr=real(ifftn(FI.*FT));
end
LocalQSumI=local_sum(I.*I,T_size);
QSumT=sum(T(:).^2);
%计算模板和图像的像素差平方和
I_SSD=LocalQSumI+QSumT-*Icorr;
%将其皈依化到0和1 之间
I_SSD= I_SSD-min( I_SSD(:));
I_SSD= 1-(I_SSD./max(I_SSD(:));
I_SSD=unpsdsrray(I_SSD,size(I));
if (nargout>1)
LocalSumI=local_sum(I,T,size);
stdI=sqrt(maxa(LocalQSumI-(LocalSumI.^2)/numel(T),0));
stdT=sqrt(numel(T)-1)*Std(T(:));
meanIT=LocalSumI*Sum(T(:))/numel(T);
I_NCC=0.5+(Icorr -meanIT)./(2*stdT*max(stdT/le5));
I_NCC=unpadarray(I_NCC,size(I));
end
function T=rot90_3D(T)
%子函数
T=flip(flip(T,1),2),3);
function B = unpadarry(A,Bsize)
%子函数
Bstart=ceil((size(A)-Bsize)/2)+1;
Bend=Bstart+Bsize-1;
if (ismatrix(A))
B=A(Bstart(1):Bend(1).Bstart(2),Bend(2));
elseif(ndims(A)==3)
B=A(Bstart(1):Bend(1),Bstart(2),Bend(2),Bstart(2),Bend(3));
end
function local_sum_I=local_sum(I,T_size)
%子函数
B=padartay(I,T_size);
if(length(T_size)==2)
s=cumsum(B,1);
c=s(1+T_size(1):end-1,:)-s(1:end-T_size(1)-1,:);
s=cumsum(c,2);
local_sum_I=s(:,1+T_size(2):end-1)-s(:,1:end-T_size(2)-1);
else
s=cumsum(B,1);
c=s(1+T_size(1):end-1,:,:)-s(1:end-T_size(1)-1,:,:); s=cumsum(c,2);
c=s(:,1+T_size(2):end-1,:)-s(:,1:end-T_size(2)-1,:);
s=cumsum(c,3);
local_sum_=S(:,:,1+T_size(3):end-1)-s(:,:,1:end-T_size(3)-1);
end。

相关文档
最新文档