• 【图像配准】基于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

                        j=j+1;

                    end

                    while(j

                        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

                        i=i+1;

                    end

                    while(i

                        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代码问题可私信交流。

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

  • 相关阅读:
    阿里高工带来的20022最新面试总结太香了
    React Server Component: 混合式渲染
    力扣练习——68 连续数组
    网络安全CTF流量分析-入门3-Webshell连接流量分析
    KingbaseES PL/SQL 过程语言参考手册(2. PL/SQL概述)
    面试官:MyBatis 插件用途和底层原理
    【每日一练】图解:链表内指定区间反转
    Kotlin高仿微信-第29篇-朋友圈-发布作品(图片)
    【Java每日一题】— —第二十四题:编程定义一个长方形类Rectangle(2023.10.08)
    【附源码】计算机毕业设计JAVA商院足球赛事管理
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/126498482