梯度方向直方图HOG_第1页
梯度方向直方图HOG_第2页
梯度方向直方图HOG_第3页
梯度方向直方图HOG_第4页
梯度方向直方图HOG_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——梯度方向直方图HOG1

gradscalx=max(max(gradscalx(:,:,1),gradscalx(:,:,2)),gradscalx(:,:,3));gradscaly=max(max(gradscaly(:,:,1),gradscaly(:,:,2)),gradscaly(:,:,3));end

gradscal=sqrt(double(gradscalx.*gradscalx+gradscaly.*gradscaly));

%计算梯度方向矩阵。加上较小数值避免划分为零。gradscalxplus=gradscalx+ones(size(gradscalx))*0.0001;gradorient=zeros(M,N);

%无符号的状况:方向范围是0到pi。ifstrcmp(issigned,'unsigned')==1gradorient=...

atan(gradscaly./gradscalxplus)+pi/2;or=1;else

%有符号的状况:方向范围是0到2*pi。ifstrcmp(issigned,'signed')==1

idx=find(gradscalx>=0

gradorient(idx)=atan(gradscaly(idx)./gradscalxplus(idx));idx=find(gradscalx=0

gradorient(idx)=atan(gradscaly(idx)./gradscalxplus(idx))+2*pi;or=2;else

error('IncorrectISSIGNEDparameter.');endend

%计算块滑步。

xbstride=cellpw*nblockw*(1-overlap);ybstride=cellph*nblockh*(1-overlap);xbstridend=N-cellpw*nblockw+1;ybstridend=M-cellph*nblockh+1;

%计算在窗口检测到所有块的数量,这是ntotalbh*ntotalbw.ntotalbh=((M-cellph*nblockh)/ybstride)+1;ntotalbw=((N-cellpw*nblockw)/xbstride)+1;

。程序的完整性和正确性还有待进一步研究。

方向梯度直方图(HOG,HistogramofGradient)基础知识

梯度(gradient):/jia20003/article/details/7664777(含代码)在向量微积分中,标量场的梯度是一个向量场,标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是最大的变化率。

图像处理之图像梯度效果

基本思想:

利用X方向与Y方向分别实现一阶微分,求取振幅,实现图像梯度效果。关于如何计算图像

一阶微分参见这里:/jia20003/article/details/7562092

使用的两种微分算子分别为Prewitt与Sobel,其中Soble在X,Y两个方向算子分别为:

Prewitt在X,Y方向上梯度算子分别为:

二:程序思路及实现

梯度滤镜提供了两个参数:

–方向,用来要决定图像完成X方向梯度计算,Y方向梯度计算,或者是振幅计算–算子类型,用来决定是使用sobel算子或者是prewitt算子。计算振幅的公式可以参见以前《图像处理之一阶微分应用》的文章

一阶微分:/jia20003/article/details/7562092(含代码)对于离散的图像来说,一阶微分的数学表达相当于两个相邻像素的差值,根据选择的梯度算子不同,效果可能有所不同,但是基本原理不会变化。最常见的算子为Roberts算子,其它常见还有Sobel,Prewitt等算子。

图像处理之一阶微分应用一:数学背景

首先看一下一维的微分公式Δf=f(x+1)–f(x),对于一幅二维的数字图像f(x,y)而言,需要完

成XY两个方向上的微分,所以有如下的公式:

分别对X,Y两个方向上求出它们的偏微分,最终得到梯度DeltaF.

对于离散的图像来说,一阶微分的数学表达相当于两个相邻像素的差值,根据选择的梯度算

子不同,效果可能有所不同,但是基本原理不会变化。最常见的算子为Roberts算子,其它

常见还有Sobel,Prewitt等算子。以Roberts算子为例的X,Y的梯度计算演示如下图:

二:图像微分应用

图像微分(梯度计算)是图像边缘提取的重要的中间步骤,根据X,Y方向的梯度向量值,可以

得到如下两个重要参数振幅magnitude,角度theta,计算公式如下:

Theta=tan-1(yGradient/xGradient)magnitude表示边缘强度信息theta预言边缘的方向走势。

假使对一幅数字图像,求出magnitude之后与原来每个像素点对应值相加,则图像边缘将被

大大加强,轮廓更加明显,是一个很典型的sharpfilter的效果。Robert算子:http://baike.//view/676369.htm

Roberts边缘检测算子是一种利用局部差分算子寻觅边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析,由于Robert算子寻常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。

Roberts边缘检测算子是一种利用局部差分算子寻觅边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析,由于Robert算子寻常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。.NET代码如下:

privatevoidmenuItem23_Click(objectsender,System.EventArgse){

if(this.pictureBox1.Image!=null){

this.pictureBox2.Visible=true;

intheight=this.pictureBox1.Image.Height;intwidth=this.pictureBox1.Image.Width;Bitmaptemp=newBitmap(width,height);

Bitmapprocess=(Bitmap)this.pictureBox1.Image;inti,j,p0,p1,p2,p3;

Color[]pixel=newColor[4];intresult;

for(j=height-2;j>0;j--){

for(i=0;i255)result=255;if(resultheight-1;++i)13{

14for(intj=1;jwidth-1;++j)15{

16a00=cvGet2D(gray,i-1,j-1).val[0];17a01=cvGet2D(gray,i-1,j).val[0];18a02=cvGet2D(gray,i-1,j+1).val[0];19a10=cvGet2D(gray,i,j-1).val[0];20a11=cvGet2D(gray,i,j).val[0];21a12=cvGet2D(gray,i,j+1).val[0];22a20=cvGet2D(gray,i+1,j-1).val[0];23a21=cvGet2D(gray,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论