【图像配准】基于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代码问题可私信交流。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

matlab科研助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值