第一个特征点提取算法
2015-11-25 23:49
176 查看
matlab练习程序(Moravec算子)
这个算子算是图像历史上第一个特征点提取算法了,1977年提出的,很简单,拿来练手很合适。算法原理如下:
1.选取一个合理的邻域遍历图像,这里是5*5邻域的。在邻域中依次计算,垂直,水平,对角与反对角四个相邻像素灰度的差的平方和,作为该邻域特征值。
大致就是下面这个样子:
公式:
这里k是窗口的半径。
2.从四个特征值中选最小的值作为该像素初次候选特征值。
公式:
3.设定一个阈值,将大于该阈值初次候选特征值的选为二次候选特征值。
4.设定一个邻域,将该邻域最大的二次候选特征值作为最终要选择的特征值。
原图:
处理后:
matlab代码如下:
clear all;close all;clc img=double(imread('lena.jpg')); [h w]=size(img); imshow(img,[]) imgn=zeros(h,w); n=4; for y=1+n:h-n for x=1+n:w-n sq=img(y-n:y+n,x-n:x+n); V=zeros(1,4); for i=2:2*n+1 %垂直,水平,对角,反对角四个方向领域灰度差的平方和 V(1)=V(1)+(sq(i,n+1)-sq(i-1,n+1))^2; V(2)=V(2)+(sq(n+1,i)-sq(n+1,i-1))^2; V(3)=V(3)+(sq(i,i)-sq(i-1,i-1))^2; V(4)=V(4)+(sq(i,(2*n+1)-(i-1))-sq(i-1,(2*n+1)-(i-2)))^2; end pix=min(V); %四个方向中选最小值 imgn(y,x)=pix; end end T=mean(imgn(:)); %设阈值,小于均值置零 ind=find(imgn<T); imgn(ind)=0; for y=1+n:h-n %选局部最大且非零值作为特征点 for x=1+n:w-n sq=imgn(y-n:y+n,x-n:x+n); if max(sq(:))==imgn(y,x) && imgn(y,x)~=0 img(y,x)=255; end end end figure; imshow(img,[]);
算法整个过程还是很简单的,练习一下,顺便祭下这个特征值开山算法。
分类: Matlab练习程序
文章来源:http://www.cnblogs.com/tiandsp/p/4823837.html
相关文章推荐
- OpenCV成长之路(9):特征点检测与图像匹配
- Matlab图像处理学习笔记(五):Harris角点检测
- 人脸旋转归一化 (根据特征点定位,dlib+opencv)
- SURF学习(一)——积分图
- 图像识别和跟踪中常用特征点
- 【Opencv】 于仕琪 人脸68个特征点分布情况
- ORB特征点提取
- 角点检测算子(Harris, KLT, SIFT,SUSAN)
- opencv之SURF图像匹配
- opencv之SURF算法原理及关键点检测
- 【opencv练习38 - SURF描述子】
- OpenCV 特征点检测
- 图像配准简介
- 山东理工ACM:1334
- vim编辑器使用技巧
- IOS 真机调试 由于安全原因未能启动的解决方法
- SQL server 数据存储过程
- 前台几个功能使用的框架说明
- pureftpd安装配置[总结]
- 山东理工ACM:1180