精华内容
下载资源
问答
  • harris角点检测matlab
    2021-04-18 12:39:40

    Harris角点检测代码

    %%%Prewitt Operator Corner Detection.m

    %%%时间优化--相邻像素用取差的方法

    %%

    clear;

    for nfigure=1:6

    t=input('input your figure’s name(including its extern name):','s');

    % t1 = tic; %测算时间

    FileInfo = imfinfo(t); % 保存图像的所有信息

    Image = imread(t); % 读取图像

    % 转为灰度值图像(Intensity Image)

    if(strcmp('truecolor',FileInfo.ColorType) == 1) %转为灰度值图像

    Image = im2uint8(rgb2gray(Image));

    end

    dx = [-1 0 1;-1 0 1;-1 0 1]; %dx:横向Prewitt差分模版

    Ix2 = filter2(dx,Image).^2;

    Iy2 = filter2(dx',Image).^2;

    Ixy = filter2(dx,Image).*filter2(dx',Image);

    %生成9*9高斯窗口。窗口越大,探测到的角点越少。

    h= fspecial('gaussian',9,2);

    A = filter2(h,Ix2); % 用高斯窗口差分Ix2得到A

    B = filter2(h,Iy2);

    C = filter2(h,Ixy);

    nrow = size(Image,1);

    ncol = size(Image,2);

    Corner = zeros(nrow,ncol); %矩阵Corner用来保存候选角点位置,初值全零,值为1的点是角点

    %真正的角点在137和138行由(row_ave,column_ave)得到

    %参数t:点(i,j)八邻域的“相似度”参数,只有中心点与邻域其他八个点的像素值之差在

    %(-t,+t)之间,才确认它们为相似点,相似点不在候选角点之列

    更多相关内容
  • HARRIS角点MATLAB代码,用于图像拼接特征点检测
  • harris corner detection for 2d
  • 计算机视觉Harris角点检测算法, 利用matlab实现,简单易懂。
  • harris角点检测matlab

    2017-10-23 13:22:59
    matlab实现图像harris角点检测,实现图像匹配或检测特征
  • 机器视觉领域 Harris 角点检测matlab实现 压缩包内附有一张非常适合用于测试的图片01.tif
  • 在此提交中,已实施哈里斯
  • harris角点检测 matlab版本

    热门讨论 2011-07-22 14:06:35
    harris角点检测 matlab版本,一共2个文件,都可以运行的,别忘了自己测试的时候修改一下图像的路径和名字
  • Harris 角点检测代码 %Prewitt Operator Corner Detection.m %时间优化--相邻像素用取差的方法 % clear; for nfigure 1:6 t input'input yourfigures name(including its extern name's; %t1 tic; %测算时间 ...
  • matlab编写的harris角点检测程序,效果明显,简单易懂!
  • 采用Harris原理在matlab中实现角点检测并将角点坐标写入txt文档以便后续处理,另附处理图片
  • 记录自己实现的Harris角点检测,注释详细,适合初学者
  • 使用harris角点检测算法,检测准确度比较高,使用求导的方式递进求解,可以输出中间过程ABCQ图片,MATLAB编写,适合数字图像处理课程使用。
  • Matlab实现Harris角点检测

    千次阅读 2021-10-23 10:09:50
    title('角点检测'); hold on; % 求角点 tmp(2:m+1,2:n+1) = R; result = zeros(m+2,n+2); result(2:m+1,2:n+1) = img; for i = 2 : m + 1 for j = 2 : n + 1 % 阈值为0.02*Rmax % 认为R值大于阈值的角点 % 求...

    一、代码

    close all;
    clc;
    % 读取图像信息(原图为灰度图)
    img = imread('lena.bmp');
    [m,n] = size(img);
    % 先在原图外围扩展一圈
    tmp = zeros(m+2,n+2);
    tmp(2:m+1,2:n+1) = img;
    % 初始化各一阶偏导矩阵
    Ix = zeros(m+2,n+2);
    Iy = zeros(m+2,n+2);
    E = zeros(m+2,n+2);
    % 求偏导
    Ix(:,2:n) = tmp(:,3:n+1) - tmp(:,1:n-1);
    Iy(2:m,:) = tmp(3:m+1,:) - tmp(1:m-1,:);
    Ix2 = Ix(2:m+1,2:n+1) .^ 2;
    Iy2 = Iy(2:m+1,2:n+1) .^ 2;
    Ixy = Ix(2:m+1,2:n+1) .* Iy(2:m+1,2:n+1);
    %生成高斯卷积核,便于对Ix2、Iy2、Ixy进行平滑
    % sigma = 2
    h = fspecial('gaussian',[3 3],2);
    Ix2 = filter2(h,Ix2);
    Iy2 = filter2(h,Iy2);
    Ixy = filter2(h,Ixy);
    
    % 初始化Rmax
    Rmax = 0;
    R = zeros(m,n);
    for i = 1 : m
        for j = 1 : n
            M = [Ix2(i,j) Ixy(i,j);
                 Ixy(i,j) Iy2(i,j)];
            R(i,j) = det(M) - 0.06 * (trace(M))^2;
            if R(i,j) > Rmax
                Rmax = R(i,j);
            end
        end
    end
    % 显示图像
    imshow(img);
    title('角点检测');
    hold on;
    
    % 求角点
    tmp(2:m+1,2:n+1) = R;
    result = zeros(m+2,n+2);
    result(2:m+1,2:n+1) = img;
    for i = 2 : m + 1
        for j = 2 : n + 1
            % 阈值为0.02*Rmax
            % 认为R值大于阈值的点为角点
            % 求当前像素点的邻域
            current = [tmp(i-1,j-1) tmp(i-1,j) tmp(i-1,j+1);
                       tmp(i,j-1)   tmp(i,j)   tmp(i,j+1);
                       tmp(i+1,j-1) tmp(i+1,j) tmp(i+1,j+1)];
            % 若当前像素点的R值大于阈值且它是其八邻域中R值最大的点,则它为角点
            if tmp(i,j) >= 0.02 * Rmax && tmp(i,j) >= max(max(current))
                    result(i,j) = 255;
                    % plot绘制点的时候是以左上角为原点,水平向右为x正半轴轴,竖直向下为y正半轴
                    % 这和我们对于图像矩阵坐标的直观印象恰好相反
                    plot(j,i,'go')
            end
        end
    end
    
    % 这是测试plot绘制点的代码
    % for i = 1 : m
    %     for j = 1 : n
    %         plot(i,j,'b+');
    %         pause;
    %     end
    % end
    

    二、结果

    在这里插入图片描述

    展开全文
  • Harris角点检测Matlab实验

    万次阅读 多人点赞 2019-04-25 16:53:45
    2.1 Harris角点检测基本思想 2.2 Harris角点检测:数学描述 3 总结 4 Matlab 实验 参考资料 角是图像重要的特征,对图像图形的理解和分析有很重要的作用。角在保留图像图重要特征的同时,可以有效地减少信息...

    目录

    1 基础知识

    1.1 图像变化的类型

    1.2 提取点特征的作用

    1.3 什么是好的角点检测算法?

    2 Harris 角点检测

    2.1 Harris角点检测基本思想

    2.2 Harris角点检测:数学描述

    3 总结

    4 Matlab 实验

    参考资料


    角点是图像重要的特征,对图像图形的理解和分析有很重要的作用。角点在保留图像图重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配和实时处理。下面将介绍Harris角点检测 及 Matlab实验。

     

    1 基础知识

    1.1 图像变化的类型

     

    1.2 提取点特征的作用

    图像的点特征是许多计算机视觉算法的基础:使用特征点来代表图像的内容,在运动目标跟踪、物体识别、图像配准、全景图像拼接 和 三维重建 等方向有较多的用处。

    有一类重要的点特征:角点(corner points)

    角点(corner points):局部窗口沿各方向移动,均产生明显变化的点,图像局部曲率突变的点

    典型的角点检测算法:Harris角点检测 , CSS角点检测等。下图展示的是不同学者提出的角点检测算法。

     

    下图为不同类型的角点,那么,怎么才算的好的角点检测算法呢?下面将慢慢介绍。

     

    1.3 什么是好的角点检测算法?

    (1)检测出图像中“真实的”角点;

    (2)准确的定位性能;

    (3)很高的重复检测率(稳定性好);

    (4)具有对噪声的鲁棒性;

    (5)具有较高的计算效率。


     

    Harris 角点检测

    1988年,Harris提出角点检测的方法效果较好。从谷歌学术来看,引用已达到1万6千多次,佩服佩服。

     

    2.1 Harris角点检测基本思想

    基本思想:从图像局部的小窗口观察图像特征。

    角点定义:窗口向任意方向的移动都导致图像灰度的明显变化。

     

     

    2.2 Harris角点检测:数学描述

    将图像窗口平移 [u,v] 产生灰度变化 E(u,v)

                                                                E(u,v) = \sum\limits_{x,y} {w(x,y){​{\left[ {I(x + u,y + v) - I(x,y)} \right]}^2}}

    由:I(x + u,y + v) = I(x,y) + {I_x}u + {I_y}v + O({u^2},{v^2})

    得到:

                                                                E(u,v) = \sum\limits_{x,y} {w(x,y){​{\left[ {​{I_x}u + {I_y}v + O({u^2},{v^2})} \right]}^2}}

                                                                  {\left[ {​{I_x}u + {I_y}v} \right]^2} = [u,v]\left[ {\begin{array}{*{20}{c}} {I_x^2}&{​{I_x}{I_y}}\\ {​{I_x}{I_y}}&{I_y^2} \end{array}} \right]\left[ {\begin{array}{*{20}{c}} u\\ v \end{array}} \right]

    于是对于局部微小的移动量 [u,v] ,可以近似得到下面的表达:

                                                                                  E(u,v) \cong \left[ {u,} \right.\left. v \right]\begin{array}{*{20}{c}} {} \end{array}M\begin{array}{*{20}{c}} {} \end{array}\left[ {\begin{array}{*{20}{c}} u\\ v \end{array}} \right]

    其中,M2 \times 2 矩阵,可由图像的导数求得:

                                                                             M = \sum\limits_{x,y} {w(x,y)\left[ {\begin{array}{*{20}{c}} {I_x^2}&{​{I_x}{I_y}}\\ {​{I_x}{I_y}}&{I_y^2} \end{array}} \right]}

    窗口移动导致的图像变化:实对称矩阵M的特征值分析

                                                                                  E(u,v) \cong \left[ {u,} \right.\left. v \right]\begin{array}{*{20}{c}} {} \end{array}M\begin{array}{*{20}{c}} {} \end{array}\left[ {\begin{array}{*{20}{c}} u\\ v \end{array}} \right]

    其中,M的特征值{\lambda _{\max }},{\rm{ }}{\lambda _{\min }} 。

     

     

     

    定义角点响应函数R

                                                                                 R = \det M - k{\left[ {​{\mathop{\rm trace}\nolimits} (M)} \right]^2}

    其中,\det M = {\lambda _1}{\lambda _2}{\text{ , trace (}}M) = {\lambda _1} + {\lambda _2} 。

     

     

    Harris角点检测结果如下图所示:


     

    3 总结

    上面是Harris角点检测的数学推导,通过查阅相关文献,对Harris角点检测的推导过程进行整理,其简要步骤如下:

    Harris角点检测器分为三步:梯度计算矩阵形成 特征值计算。首先,计算 x 和 y 方向上的平滑 (使用高斯函数) 梯度来检测给定灰度图像 I(x,y) 中的角点,由下面的式子给出:

                                                                               {g_x}(x,y) = \frac{​{ - x}}{​{2\pi \tau _g^4}}\exp \left( { - \frac{​{​{x^2} + {y^2}}}{​{2\tau _g^2}}} \right)

                                                                               {g_y}(x,y) = \frac{​{ - y}}{​{2\pi \tau _g^4}}\exp \left( { - \frac{​{​{x^2} + {y^2}}}{​{2\tau _g^2}}} \right)

    其中,{\tau _g} 是平滑参数。

    计算图像I(x,y) 的平滑梯度为:

                                                                                   {I_x} = {g_x}(x,y) \otimes I(x,y)

                                                                                  {I_y} = {g_y}(x,y) \otimes I(x,y)

    其中,“ \otimes ” 表示二维卷积运算。

    Harris角点检测器依赖于计算一个矩阵(与自相关函数有关),由下面的式子给出:

                                                                                  A(x,y) = \left( {\begin{array}{*{20}{c}} {​{a_{xx}}}&{​{a_{xy}}}\\ {​{a_{xy}}}&{​{a_{yy}}} \end{array}} \right)

    其中,

                                                                                  {a_{xx}} = {\sum\limits_{​{x_i} \in W} {\sum\limits_{​{​{\text{y}}_i} \in W} {[{I_x}({x_i},{y_i})]} } ^2}

                                                                                  {a_{yy}} = {\sum\limits_{​{x_i} \in W} {\sum\limits_{​{​{\text{y}}_i} \in W} {[{I_y}({x_i},{y_i})]} } ^2}

                                                                            {a_{xy}} = \sum\limits_{​{x_i} \in W} {\sum\limits_{​{​{\text{y}}_i} \in W} {​{I_x}({x_i},{y_i})} } {I_y}({x_i},{y_i})

    从上面的式子可以看出,{a_{xx}},{a_{yy}} 和 {a_{xy}} 表示平均梯度幅值,矩阵A 的特征值提供关于给定位置的边缘的信息。如果给定位置的矩阵的特征值都很大,那么大部分区域均为角点。Harris通过计算响应函数可以避免精确的特征值计算,由下面的式子给出:

                                                                                   R = \det A - k{\left[ {​{\mathop{\rm trace}\nolimits} (A)} \right]^2}

    其中,\det A = {\lambda _1}{\lambda _2}{\text{ , trace (}}A) = {\lambda _1} + {\lambda _2} , k是可调参数,一般设置在区间 [0.04, 0.06] 内。通过判定 R 大小来判断像素点是否为角点,对于角点\left| R \right| 的值很;而平坦的区域\left| R \right| 的值很

     


     

    4 Matlab 实验

     

    Harris角点检测 Matlab 代码如下:

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%% Harris角点检测算法 Matlab code
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    clear all; clc ;tic;
    
    ori_im = imread('lena.tiff');     % 读取图像
    
    if(size(ori_im,3)==3)
        ori_im = rgb2gray(uint8(ori_im));  %转为灰度图像
    end
    
    % fx = [5 0 -5;8 0 -8;5 0 -5];          % 高斯函数一阶微分,x方向(用于改进的Harris角点提取算法)
    fx = [-2 -1 0 1 2];                 % x方向梯度算子(用于Harris角点提取算法)
    Ix = filter2(fx,ori_im);              % x方向滤波
    % fy = [5 8 5;0 0 0;-5 -8 -5];          % 高斯函数一阶微分,y方向(用于改进的Harris角点提取算法)
    fy = [-2;-1;0;1;2];                 % y方向梯度算子(用于Harris角点提取算法)
    Iy = filter2(fy,ori_im);              % y方向滤波
    Ix2 = Ix.^2;
    Iy2 = Iy.^2;
    Ixy = Ix.*Iy;
    clear Ix;
    clear Iy;
    
    h= fspecial('gaussian',[7 7],2);      % 产生7*7的高斯窗函数,sigma=2
    
    Ix2 = filter2(h,Ix2);
    Iy2 = filter2(h,Iy2);
    Ixy = filter2(h,Ixy);
    
    height = size(ori_im,1);
    width = size(ori_im,2);
    result = zeros(height,width);         % 纪录角点位置,角点处值为1
    
    R = zeros(height,width);
    for i = 1:height
        for j = 1:width
            M = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];             % auto correlation matrix
            R(i,j) = det(M)-0.06*(trace(M))^2;   
        end
    end
    cnt = 0;
    for i = 2:height-1
        for j = 2:width-1
            % 进行非极大抑制,窗口大小3*3
            if  R(i,j) > R(i-1,j-1) && R(i,j) > R(i-1,j) && R(i,j) > R(i-1,j+1) && R(i,j) > R(i,j-1) && R(i,j) > R(i,j+1) && R(i,j) > R(i+1,j-1) && R(i,j) > R(i+1,j) && R(i,j) > R(i+1,j+1)
                result(i,j) = 1;
                cnt = cnt+1;
            end
        end
    end
    Rsort=zeros(cnt,1);
    [posr, posc] = find(result == 1);
    for i=1:cnt
        Rsort(i)=R(posr(i),posc(i));
    end
    [Rsort,ix]=sort(Rsort,1);
    Rsort=flipud(Rsort);
    ix=flipud(ix);
    ps=100;
    posr2=zeros(ps,1);
    posc2=zeros(ps,1);
    for i=1:ps
        posr2(i)=posr(ix(i));
        posc2(i)=posc(ix(i));
    end
       
    imshow(ori_im);
    hold on;
    plot(posc2,posr2,'g+');
    
    toc;
    

     

    运行结果如下图所示:

     

    C++实验代码可参见:https://blog.csdn.net/linqianbi/article/details/78930239


     

    参考资料

    [1] C.Harris, M.Stephens. “A Combined Corner and Edge Detector”. Proc. of 4th Alvey Vision Conference, 1988.

    [2] Harris角点检测 PPT

    [3] https://blog.csdn.net/u010703122/article/details/49308153

    [4] https://blog.csdn.net/woxincd/article/details/60754658

    [5] https://blog.csdn.net/linqianbi/article/details/78930239

     

    展开全文
  • matlab mex 编写的Harris角点检测,核心代码用的C语言。仅作学习用。效率存在问题。代码不能直接运行。其中实现了sobel滤波和高斯平滑滤波。且用的一维数组模拟二维数组。
  • Matlab实现Harris角点检测算法

    千次阅读 2020-12-14 23:21:00
    角点 一般的角点检测都是对有具体定义的、或者是...目前的角点检测算法可归纳为3类:基于灰度图像的角点检测、基于二值图像的角点检测、基于轮廓曲线的角点检测角点是图像很重要的特征,对图像图形的理解和分析有很

    角点

    一般的角点检测都是对有具体定义的、或者是能够具体检测出来的兴趣点的检测。这意味着兴趣点可以是角点,也可以是在某些属性上强度最大或者最小的孤立点、线段的终点,或者是曲线上局部曲率最大的点。在实践中,通常大部分称为角点检测的方法检测的都是兴趣点,而不是独有的角点。因此,如果只要检测角点的话,需要对检测出来的兴趣点进行局部检测,以确定出哪些是真正的角点。

    目前的角点检测算法可归纳为3类:基于灰度图像的角点检测、基于二值图像的角点检测、基于轮廓曲线的角点检测。角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。对灰度图像、二值图像、边缘轮廓曲线的角点检测算法进行综述,分析了相关的算法,并对各种检测算法给出了评价。(源自百度百科)

    Harris角点检测算法步骤

    1. 利用水平、竖直差分算子对图像每个像素进行滤波以求得Ix、Iy,进而求得M中的四个元素的值(可以使用filter2,也可以使用imfilter,不过后者需要转double类型,因为det输入为double型矩阵)

    在这里插入图片描述

    1. 对M的四个元素进行高斯平滑滤波,为的是消除一些不必要的孤立点和凸起,得到新的矩阵M(M实际上只能算得上是2x2矩阵,Ix2等代表图像变换矩阵中的点)
    2. 计算M对应每个像素的角点响应函数R的值,R的不同值代表的意义如下:

    在这里插入图片描述
    4. 取适当阈值,当R(i,j)大于该阈值,且为邻域中最大值,则认为该点为角点。

    Matlab实现

    clc;clear;close all;
    
    img=imread('test.png');
    subplot(121),imshow(img),title('原图');
    img_gray=rgb2gray(img);
    
    psf=fspecial('gaussian',[5,5],1);
    Ix=filter2([-1,0,1],img_gray);
    Iy=filter2([-1,0,1]',img_gray);
    Ix2=filter2(psf,Ix.^2);
    Iy2=filter2(psf,Iy.^2);
    Ixy=filter2(psf,Ix.*Iy);
    
    [m,n]=size(img_gray);
    R=zeros(m,n);
    max=0;
    for i=1:m
        for j=1:n
            M=[Ix2(i,j),Ixy(i,j); Ixy(i,j),Iy2(i,j)];
            R(i,j)=det(M)-0.05*(trace(M))^2;
            if R(i,j)>max
                max=R(i,j);
            end
        end
    end
    
    thresh=0.1;%阈值可调
    tmp=zeros(m,n);
    neighbours=[-1,-1;-1,0;-1,1;0,-1;0,1;1,-1;1,0;1,1];
    for i=2:m-1
        for j=2:n-1
            if R(i,j)>thresh*max
                for k=1:8
                    if R(i,j)<R(i+neighbours(k,1),j+neighbours(k,2))
                        break;
                    end
                end
                if k==8
                    tmp(i,j)=1;
                end
            end
        end
    end
    
    subplot(122),imshow(img),title('角点检测');
    hold on;
    for i=2:m-1
        for j=2:n-1
            if tmp(i,j)==1
                plot(j,i,'rx')
            end
        end
    end
    hold off;      
    

    代码效果如下:

    在这里插入图片描述

    展开全文
  • 文章目录前言1、实现效果图1.1、原始Harris角点检测1.2、改进后的Harris角点检测2、Matlab实现 前言 在大学毕业设计的时候,课题要求实现《Harris角点检测及其改进的方法》,采用Matlab语言实现,效果图如下。 需要...
  • 基于 matlabHarris角点特征检测角点是图像中一个重要的局部特征,决定了图像中关键区域的形状,体现了图像中重要的特征信号,在目标识别、图像匹配、图像重构等方面有十分重要的意义
  • Harris 算子是一种计算简单、应用广泛的角点检测算子,只使用灰度的一阶差分和滤波,可以定量地提取特征角点并且提取的角点特征均匀。由于计算过程用到图像的一阶导数,故对存在灰度变化、图像旋转、视点变换和噪声...
  • 因此本文提出的算法采用Harris角点作为兴趣,并提取每个兴趣为中心的邻域内空域的五个均值特征形成特征向量,通过位置转移向量的频率统计连接标志匹配。 2 完整代码 clc; clear all; close all; I = ...
  • 我使用 Harris 算法找出棋盘上的角点
  • matlab实现的Harris角点检测,通过运行
  • 关于harris角点,需要的人肯定知道怎么回事,而且着急得到matlab的实现程序,那就赶快下载了用吧,还等什么?
  • harris算法检测匹配,对图像拼接前做好准备
  • 程序分为三个部分:Harris角点检测;角匹配连线;图像配准 通过matlab实现,打包处理,内含使用说明。可直接使用
  • 其中,W(x,y)是以(x,y)为中心的窗口,w(x,y)为加权函数,既可以用常数表示,又可以用高斯加权函数表示。本算法已经整理成文档如下,有需要的朋友可以点击进行下载。
  • Harris角点检测算法

    2018-10-02 10:44:57
    harris角点检测 算法代码和说明文档。采用matlab编写的。压缩文件里面包含m文件,dox说明为文档,ppt说明文档,以及检测用的图片

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 890
精华内容 356
关键字:

harris角点检测matlab