Moravec角点检测算子

来源:互联网 发布:阿里巴巴农村淘宝网 编辑:程序博客网 时间:2024/04/28 12:06

Moravec角点检测算子

Moravec 在1981年提出Moravec角点检测算子[1],并将它应用于立体匹配。

首先, 计算每个像素点的兴趣值, 即以该像素点为中心, 取一个w*w(如:5x5)的方形窗口, 计算0度、45度、90度、135度个方向灰度差的平方和, 取其中的最小值作为该像素点的兴趣值。

图1- 1 以3x3为例 黑色窗口为I(x,y) 红色窗口为I(x+u,y+v)

其中四种移位 (u,v) = (1,0), (1,1), (0,1), (-1, 1).w(x,y)为方形二值窗口,若像素点在窗口内,则取值为1, 否则为0。

其次,根据实际图像设定一个阈值, 遍历图像以兴趣值大于该阈值的点为候选点。

最后, 选一个一定大小的滑动窗口 , 让该窗口遍历灰度图象, 在此过程中取窗口中兴趣值最大的候选点为特征点, 算法结束。

 

 

图1- 2   Moravec角点检测算子对简单图像的响应

Moravec角点检测算子对斜边缘的响应很强,因为只考虑了每隔45度的方向变化,而没有在全部的方向上进行考虑;同时由于窗口函数是一个二值函数,不管像素点离中心点的距离,赋于一样的权重,因此对噪声响应也较强。最终对角点的定位也不是很准确.

[1]    Moravec, H. 1981. Rover visual obstacle avoidance. In International Joint Conference on Artificial Intelligence, Vancouver, Canada,pp. 785–790.

 

opencv代码:

#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <stdio.h>#include <stdlib.h>#define M_YUZHI 400using namespace cv;using namespace std;void interestValue(int *a,int &v);//a为5*5窗口数组,v为最小值作为兴趣点void getmax(int *m_a,int &m_max,int &m_num);//m_a为滑动窗口数组,m_max为寻找的滑动窗口内最大值,m_num为最大值在数组中位置.int  main(int argc,char **argv){Mat mat_src=imread(argv[1],0);Mat mat_c;cvtColor(mat_src,mat_c,CV_GRAY2BGR);int width=mat_src.cols;int height=mat_src.rows;int *temp=new int[width*height];int a[25];//5*5的模板int b[49];//7*7的模板int i,j;for(i=0;i<height;i++){for(j=0;j<width;j++){if(i<2||i>height-3||j<2||j>width-3)//处理边界,设置为0{temp[i*width+j]=0;}else {a[0]=mat_src.at<uchar>(i-2,j-2);a[1]=mat_src.at<uchar>(i-2,j-1);a[2]=mat_src.at<uchar>(i-2,j);a[3]=mat_src.at<uchar>(i-2,j+1);a[4]=mat_src.at<uchar>(i-2,j+2);a[5]=mat_src.at<uchar>(i-1,j-2);a[6]=mat_src.at<uchar>(i-1,j-1);a[7]=mat_src.at<uchar>(i-1,j);a[8]=mat_src.at<uchar>(i-1,j+1);a[9]=mat_src.at<uchar>(i-1,j+2);a[10]=mat_src.at<uchar>(i,j-2);a[11]=mat_src.at<uchar>(i,j-1);a[12]=mat_src.at<uchar>(i,j);a[13]=mat_src.at<uchar>(i,j+1);a[14]=mat_src.at<uchar>(i,j+2);a[15]=mat_src.at<uchar>(i+1,j-2);a[16]=mat_src.at<uchar>(i+1,j-1);a[17]=mat_src.at<uchar>(i+1,j);a[18]=mat_src.at<uchar>(i+1,j+1);a[19]=mat_src.at<uchar>(i+1,j+2);a[20]=mat_src.at<uchar>(i+2,j-2);a[21]=mat_src.at<uchar>(i+2,j-1);a[22]=mat_src.at<uchar>(i+2,j);a[23]=mat_src.at<uchar>(i+2,j+1);a[24]=mat_src.at<uchar>(i+2,j+2);interestValue(a,temp[i*width+j]);}}}int m_w1=width/7;//滑动窗口宽int m_w2=width%7;int m_h1=height/7;int m_h2=height%7;int m_r=0;int m_c=0;for(i=0;i<m_h1;i++){for(j=0;j<m_w1;j++){for(int k=0;k<7;k++){b[7*k]=temp[i*width*7+j*7+k*width];b[7*k+1]=temp[i*width*7+j*7+1+k*width];b[7*k+2]=temp[i*width*7+j*7+2+k*width];b[7*k+3]=temp[i*width*7+j*7+3+k*width];b[7*k+4]=temp[i*width*7+j*7+4+k*width];b[7*k+5]=temp[i*width*7+j*7+5+k*width];b[7*k+6]=temp[i*width*7+j*7+6+k*width];}int m_tempnum=0;//获取滑动区域的最大值int m_num=0;//位置getmax(b,m_tempnum,m_num); if(m_tempnum>M_YUZHI){m_r=m_num/7;m_c=m_num%7;m_r=7*i+m_r;m_c=7*j+m_c;circle(mat_c,Point(m_c,m_r),2,Scalar(0,0,255),1,8);}}}imshow("mat_c",mat_c);waitKey();}void interestValue(int *a,int &v)//得到5*5区域模板的兴趣值{int v1,v2,v3,v4;//v1是水平方向,v2是135度方向,v3是垂直方向,v4是45度方向v1=v2=v3=v4=0;v1=(a[11]-a[10])*(a[11]-a[10])+(a[12]-a[11])*(a[12]-a[11])+(a[13]-a[12])*(a[13]-a[12])+(a[14]-a[13])*(a[14]-a[13]);v2=(a[6]-a[0])*(a[6]-a[0])+(a[12]-a[6])*(a[12]-a[6])+(a[18]-a[12])*(a[18]-a[12])+(a[24]-a[18])*(a[24]-a[18]);v3=(a[7]-a[2])*(a[7]-a[2])+(a[12]-a[7])*(a[12]-a[7])+(a[17]-a[12])*(a[17]-a[12])+(a[22]-a[17])*(a[22]-a[17]);v4=(a[8]-a[4])*(a[8]-a[4])+(a[12]-a[8])*(a[12]-a[8])+(a[16]-a[12])*(a[16]-a[12])+(a[20]-a[16])*(a[20]-a[16]);v=v1;if(v>v2)v=v2;if(v>v3)v=v3;if(v>v4)v=v4;}void getmax(int *m_a,  int &m_max,int &m_num)      //得到7*7区域的候选特征值{m_max=m_a[0];for(int i=1;i<49;i++){if(m_max<m_a[i]){m_max=m_a[i];m_num=i;}}}



 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq刚改了密码忘了怎么办 qq密码忘了想改密码怎么办 qq账号和密码都忘了怎么办 我的微信被别人改了密码怎么办 微信被盗密码被改了怎么办 微信被盗了密码都被改了怎么办 微信被别人改密码改手机号了怎么办 微信号手机号码换了密码改了怎么办 电信充值卡的密码刮花了怎么办 qq充了q币不到账怎么办 开通黄钻不支持手机话费开通怎么办 银行卡给红包充值迟迟不到账怎么办 我想用信用卡往微信零钱充钱怎么办 修改密保手机跳过原手机验证怎么办 骏卡有用但是充不进去怎么办 在云南移动上充错话费了怎么办 手机版本太低安装不了支付宝怎么办 手机下载支付宝后找不到了怎么办 王者荣耀充值成功游戏未到账怎么办 银行卡号和密码都忘了怎么办 微信支付密码和银行卡号忘了怎么办 请问5位数的密码忘记了怎么办 苹果手机四位数密码忘记了怎么办 锡山教育app登陆密码忘了怎么办 新商盟手机订烟登录忘记密码怎么办 在qq上修改支付密码忘记怎么办 微信红包支付密码忘了怎么办 qq钱包绑定了别人的银行卡怎么办 用支付宝充手机话费怎么退款怎么办 我有个qq号丢了怎么办 微信红包密码输错了怎么办 qq钱包支付限额付不了款怎么办 电信手机没开流量被扣流量钱怎么办 运动鞋子买大了一码怎么办 淘宝直播间粉丝福利购优惠券怎么办 微信卡包的券不小心删了怎么办 0pp0手机官网手机总跳屏怎么办 很想买一部手机但是舍不得钱怎么办 自己没钱了还想贷款买手机怎么办 4g手机锁屏密码忘了怎么办 oppo手机锁屏密码忘了怎么办