【图像配准】基于SURF特征实现印刷体汉字配准附matlab代码

简介: 【图像配准】基于SURF特征实现印刷体汉字配准附matlab代码

1 内容介绍

图像配准是指同一目标的两幅(或者是多幅)图像在空间位置上的对齐.图像配准技术过程称为图像匹配或者图像相关,是数字图像处理和机器视觉中比较基础且核心的技术分支,也是立体视觉,图像融合,动态视频检测等应用的基础.在医学影像,遥感领域,军事导航,地理信息系统,目标识别,航空航天技术,虚拟现实及人工智能等领域已经得到广泛应用.随着应用技术的复杂化,对图像配准算法的实时性,精确性,适应性,高效性都提出了更高的要求.基于灰度的配准算法容易受到光照和图像灰度信息影响且复杂度较高,效率低;当存在非线性变换的时候,基于变换域的方法受到了限制;而图像的不变特征能够反映图像的本质属性,而且能够在图像发生一定的伸缩,旋转,光照,视角变化的情况下保持稳定性,这对于人类对图像识别的研究有着里程碑式的意义.

2 仿真代码

%求汉字图像外围特征

function m_peripheryft=CrossPeiphery(I)

[m,n]=size(I);

count=1;

m_peripheryft=zeros(1,64);


%搜索方向为从左向右,水平。

for k=1:8  

   %图像分块后,在每块的每行一次外围和二次外围特征

   sum1=zeros(1,m/8);

   sum2=zeros(1,m/8);

%每块的一次外围和二次外围特征

   p1=0;

   p2=0;

   for i=(k-1)*(m/8)+1:k*(m/8)

       for j=1:n

           if I(i,j)==0

               sum1(i-(k-1)*(m/8))=sum1(i-(k-1)*(m/8))+1;

           else

               while(j<n+1&I(i,j)==1)

                   j=j+1;

               end

               while(j<n+1&I(i,j)==0)

                   j=j+1;

                   sum2(i-(k-1)*(m/8))=sum2(i-(k-1)*(m/8))+1;

               end

               if j>n-1

                   sum2(i-(k-1)*(m/8))=0;

               end

               break;

           end

       end

   end

   for i=1:m/8

       p1=p1+sum1(i);

   end

   for i=1:m/8

       p2=p2+sum2(i);

   end

   m_peripheryft(count)=p1/(m*n);

   count=count+1;

   m_peripheryft(count)=p2/(m*n);

   count=count+1;

end

%搜索方向是从上向下,竖直。

for k=1:8  

   %图像分块后,在每块的每行一次外围和二次外围特征

   sum1=zeros(1,n/8);

   sum2=zeros(1,n/8);

%每块的一次外围和二次外围特征

   p1=0;

   p2=0;

   for j=(k-1)*(n/8)+1:k*(n/8)

       for i=1:m

           if I(i,j)==0

               sum1(j-(k-1)*(n/8))=sum1(j-(k-1)*(n/8))+1;

           else

               while(i<m+1&I(i,j)==1)

                   i=i+1;

               end

               while(i<m+1&I(i,j)==0)

                   i=i+1;

                   sum2(j-(k-1)*(n/8))=sum2(j-(k-1)*(n/8))+1;

               end

               if i>m-1

                   sum2(j-(k-1)*(n/8))=0;

               end

               break;

           end

       end

   end

   for i=1:n/8

       p1=p1+sum1(i);

   end

   for i=1:n/8

       p2=p2+sum2(i);

   end

   m_peripheryft(count)=p1/(m*n);

   count=count+1;

   m_peripheryft(count)=p2/(m*n);

   count=count+1;

end

%搜索方向为从右向左,水平。

for k=1:8  

   %图像分块后,在每块的每行一次外围和二次外围特征

   sum1=zeros(1,m/8);

   sum2=zeros(1,m/8);

%每块的一次外围和二次外围特征

   p1=0;

   p2=0;

   for i=(k-1)*(m/8)+1:k*(m/8)

       for j=n:-1:1

           if I(i,j)==0

               sum1(i-(k-1)*(m/8))=sum1(i-(k-1)*(m/8))+1;

           else

               while(j>0&I(i,j)==1)

                   j=j-1;

               end

               while(j>0&I(i,j)==0)

                   j=j-1;

                   sum2(i-(k-1)*(m/8))=sum2(i-(k-1)*(m/8))+1;

               end

               if j<2

                   sum2(i-(k-1)*(m/8))=0;                  

               end

               break;

           end

       end

   end

   for i=1:m/8

       p1=p1+sum1(i);

   end

   for i=1:m/8

       p2=p2+sum2(i);

   end

   m_peripheryft(count)=p1/(m*n);

   count=count+1;

   m_peripheryft(count)=p2/(m*n);

   count=count+1;

end

%搜索方向是从下向上,竖直。        

for k=1:8  

   %图像分块后,在每块的每行一次外围和二次外围特征

   sum1=zeros(1,n/8);

   sum2=zeros(1,n/8);

%每块的一次外围和二次外围特征

   p1=0;

   p2=0;

   for j=(k-1)*(n/8)+1:k*(n/8)

       for i=m:-1:1

           if I(i,j)==0

               sum1(j-(k-1)*(n/8))=sum1(j-(k-1)*(n/8))+1;

           else

               while(i>0&I(i,j)==1)

                   i=i-1;

               end

               while(i>0&I(i,j)==0)

                   i=i-1;

                   sum2(j-(k-1)*(n/8))=sum2(j-(k-1)*(n/8))+1;

               end

               if i<2

                   sum2(j-(k-1)*(n/8))=0;

               end

               break;

           end

       end

   end

   for i=1:n/8

       p1=p1+sum1(i);

   end

   for i=1:n/8

       p2=p2+sum2(i);

   end

   m_peripheryft(count)=p1/(m*n);

   count=count+1;

   m_peripheryft(count)=p2/(m*n);

   count=count+1;

end

m_peripheryft=m_peripheryft./norm(m_peripheryft);

end

3 运行结果

4 参考文献

[1]葛盼盼, 陈强. 基于SURF特征提取的遥感图像自动配准[J]. 计算机系统应用, 23(3).

[2]王飞越. 基于SURF特征提取的图像配准算法研究[D]. 哈尔滨理工大学.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


相关文章
|
2月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
113 0
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
144 8
|
2月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
142 8
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
212 0
|
2月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
|
2月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
108 0
|
2月前
|
机器学习/深度学习 数据采集 测试技术
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
158 8
|
2月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
155 12
|
2月前
|
人工智能 数据可视化 网络性能优化
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
106 9

热门文章

最新文章