sobel梯度算子算子(数字图像)原理是怎样的

Sobel算子的理解 - linqianbi的博客 - CSDN博客
Sobel算子的理解
sobel算子主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。
算子使用两个33的矩阵(图1)算子使用两个33的矩阵(图1)去和原始图片作卷积,分别得到横向G(x)和纵向G(y)的梯度值,如果梯度值大于某一个阈值,则认为该点为边缘点
Gx方向的相关模板:
Gy方向的相关模板:
看了网上的很多资料,都把卷积和相关的概念给弄糊了,书上给的Sobel的模板不是卷积模板,而是相关模板,因为卷积的话要先将模板旋转180度以后再与图像做相关的操作。
所以Sobel的卷积模板是:
具体计算如下:
图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:
通常,为了提高效率使用不开平方的近似值:
然后可用以下公式计算梯度方向:
opencv还提供了一个scharr函数,比Sobel算子更为精准,也是3x3的模板。
下面放上源代码:
#include &opencv2/imgproc/imgproc.hpp&
#include &opencv2/highgui/highgui.hpp&
#include &iostream&
#include &cmath&
bool sobelEdge(Mat&
srcImage, Mat& resultImageX, Mat& resultImageY, uchar threshold)
CV_Assert(srcImage.channels() == 1);
// 初始化水平核因子
Mat sobelx = (Mat_&double&(3, 3) && -1, 0,
1, -2, 0, 2, -1, 0, 1);
// 初始化垂直核因子
Mat sobely = (Mat_&double&(3, 3) && -1, -2, -1,
0, 0, 0, 1, 2, 1);
resultImageX = Mat::zeros(srcImage.rows - 2,
srcImage.cols - 2, srcImage.type());
resultImageY = Mat::zeros(srcImage.rows - 2,
srcImage.cols - 2, srcImage.type());
double edgeX = 0;
double edgeY = 0;
double graMagX = 0;// 垂直方向上的梯度模长
double graMagY = 0;// 水平方向上的梯度模长
for (int k = 1; k & srcImage.rows - 1; ++k)
for (int n = 1; n & srcImage.cols - 1; ++n)
edgeX = 0;
edgeY = 0;
// 遍历计算水平与垂直梯度
for (int i = -1; i &= 1; ++i)
for (int j = -1; j &= 1; ++j)
edgeX += srcImage.at&uchar&(k + i, n + j) *
sobelx.at&double&(1 + i, 1 + j);
edgeY += srcImage.at&uchar&(k + i, n + j) *
sobely.at&double&(1 + i, 1 + j);
// 计算垂直方向上的梯度模长
graMagX = sqrt(pow(edgeX, 2));
// 计算水平方向上的梯度模长
graMagY = sqrt(pow(edgeY, 2));
resultImageX.at&uchar&(k - 1, n - 1) =
((graMagX & threshold) ? 255 : 0);
resultImageY.at&uchar&(k - 1, n - 1) =
((graMagY & threshold) ? 255 : 0);
int OTSU(Mat &srcImage)
int nRows = srcImage.
int nCols = srcImage.
int threshold = 0;
double max = 0.0;
double AvePix[256];
int nSumPix[256];
double nProDis[256];
double nSumProDis[256];
for (int i = 0; i & 256; i++)
AvePix[i] = 0.0;
nSumPix[i] = 0;
nProDis[i] = 0.0;
nSumProDis[i] = 0.0;
for (int i = 0; i & nR i++)
for (int j = 0; j & nC j++)
nSumPix[(int)srcImage.at&uchar&(i, j)]++;
for (int i = 0; i & 256; i++)
nProDis[i] = (double)nSumPix[i] / (nRows*nCols);
AvePix[0] = 0;
nSumProDis[0] = nProDis[0];
for (int i = 1; i & 256; i++)
nSumProDis[i] = nSumProDis[i - 1] + nProDis[i];
AvePix[i] = AvePix[i - 1] + i*nProDis[i];
double mean = AvePix[255];
for (int k = 1; k & 256; k++)
double PA = nSumProDis[k];
double PB = 1 - nSumProDis[k];
double value = 0.0;
if (fabs(PA) & 0.001 && fabs(PB) & 0.001)
double MA = AvePix[k];//前一半的平均
double MB = (mean - PA*MA) / PB;//后一半的平均
value = value = (double)(PA * PB * pow((MA - MB), 2));//类间方差
//或者这样value = (double)(PA * PB * pow((MA-MB),2));//类间方差
//pow(PA,1)* pow((MA - mean),2) + pow(PB,1)* pow((MB - mean),2)
if (value & max)
threshold =
int main()
Mat srcImage = cv::imread(&building.jpg&);
if (!srcImage.data)
return -1;
cvtColor(srcImage, srcGray, CV_BGR2GRAY);
imshow(&srcGray&, srcGray);
//调用二值化函数得到最佳阈值
int otsuThreshold = OTSU(srcGray);
cout && otsuThreshold &&
Mat XresultI
Mat YresultI
sobelEdge(srcGray, XresultImage, YresultImage, otsuThreshold);
Mat resultI
//水平垂直边缘叠加
addWeighted(XresultImage, 0.5, YresultImage, 0.5, 0.0, resultImage);
imshow(&resx&, XresultImage);
imshow(&resy&, YresultImage);
imshow(&res&, resultImage);
waitKey(0);
}原图灰度图:
垂直边缘图像:
水平边缘图像:
水平垂直合一起:
从上图可以看出 边缘图还有很多不是边缘点的也被取出来了,下一步就是做非极大值抑制
相关文章推荐君,已阅读到文档的结尾了呢~~
基于Sobel算子图像边缘检测的MATLAB实现图像,检测,边缘,边缘检测
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于Sobel算子图像边缘检测的MATLAB实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口基于Sobel算子的图像边缘检测实验分析--《计算机光盘软件与应用》2012年07期
基于Sobel算子的图像边缘检测实验分析
【摘要】:本文首先介绍了数字图像处理传统边缘检测算子,然后详细描述了其中具有代表性的Sobel边缘检测算法的原理,并从模板遵循的原则和数学原理两个方面分析了Sobel算子的模板权值取定。实验结果表明,Sobel算子模板的关键权值取2时,边缘较细,定位精确,提高了边缘检测精度。
【作者单位】:
【基金】:
【分类号】:TP391.41【正文快照】:
边缘是图像最基本的特征。图像边缘是指图像局部特征不连续像素点的集合,即周围像素灰度变化(阶跃变化和屋顶状变化)比较强烈的像素集合。它主要存在于目标与目标、目标与背景、区域与区域之间。在图像处理与分析中,图像边缘图像识别的图像特征之一,是图像分割依赖的重要特征
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【共引文献】
中国期刊全文数据库
康实;;[J];南通航运职业技术学院学报;2006年03期
中国博士学位论文全文数据库
黄瀚敏;[D];重庆大学;2007年
黄琳;[D];南京理工大学;2007年
胡涛;[D];哈尔滨工业大学;2007年
中国硕士学位论文全文数据库
朱群英;[D];武汉理工大学;2006年
赵世喆;[D];北方工业大学;2006年
吴文荣;[D];电子科技大学;2006年
张磊;[D];新疆大学;2006年
岳忠义;[D];贵州大学;2006年
周军;[D];山东大学;2006年
郑欣;[D];电子科技大学;2007年
杜馨瑜;[D];电子科技大学;2007年
林金萱;[D];广东工业大学;2007年
张利平;[D];中北大学;2007年
【二级参考文献】
中国期刊全文数据库
黄祥林,沈兰荪;[J];电子学报;2002年07期
刘彩;[J];贵州工业大学学报(自然科学版);2004年05期
梁艳梅,翟宏琛,母国光;[J];中国科学E辑;2003年10期
杨翔英,章毓晋;[J];计算机学报;1999年07期
丁险峰,吴洪,张宏江,马颂德;[J];自动化学报;2001年05期
郭丽,孙兴华,黄元元,杨静宇;[J];中国图象图形学报;2002年10期
中国博士学位论文全文数据库
孙君顶;[D];西安电子科技大学;2005年
崔江涛;[D];西安电子科技大学;2005年
【相似文献】
中国期刊全文数据库
许峥;李明;李成金;赵勋杰;;[J];光电技术应用;2011年04期
吕四化,史萍,王惠明;[J];北京广播学院学报(自然科学版);2005年01期
王琪,费耀平;[J];信息技术;2005年09期
王正勇;何小海;吴晓红;;[J];计算机工程与应用;2008年33期
张磊;杨维明;宗爱华;李紫怡;;[J];信息通信;2010年06期
刘娜;张海成;刘智渊;彭晓明;;[J];空军雷达学院学报;2006年02期
汪敬贤;;[J];辽宁工程技术大学学报(自然科学版);2008年02期
荣剑;张晴辉;徐安排;;[J];电脑知识与技术;2010年11期
王红喜;张博;;[J];西安文理学院学报(自然科学版);2010年02期
高德威;陈天煌;刘朋;;[J];计算机与数字工程;2009年01期
中国重要会议论文全文数据库
吴晴;吴振华;;[A];中国仪器仪表学会2008学术年会第二届智能检测控制技术及仪表装置发展研讨会论文集[C];2008年
戴文战;李俊峰;;[A];第二十七届中国控制会议论文集[C];2008年
李俊峰;杨瑷萍;戴文战;潘海鹏;;[A];第二十六届中国控制会议论文集[C];2007年
陈帅;马钺;史海波;;[A];第九届全国信息获取与处理学术会议论文集Ⅱ[C];2011年
李楠;周波;;[A];全国第五届信号和智能信息处理与应用学术会议专刊(第一册)[C];2011年
王莹;刘娜;;[A];中国仪器仪表学会第五届青年学术会议论文集[C];2003年
李松亭;赵不贿;郑博;;[A];中国农业工程学会电气信息与自动化专业委员会、中国电机工程学会农村电气化分会科技与教育专委会2010年学术年会论文摘要[C];2010年
蒋晓悦;赵荣椿;;[A];信号与信息处理技术——第一届信号与信息处理联合学术会议论文集[C];2002年
王文亮;林志贵;肖志涛;;[A];2008'中国信息技术与应用学术论坛论文集(一)[C];2008年
鲁昌华;刘玉娜;;[A];2011中国仪器仪表与测控技术大会论文集[C];2011年
中国博士学位论文全文数据库
曾俊;[D];华中科技大学;2011年
黄陈蓉;[D];南京理工大学;2005年
张仁彦;[D];哈尔滨工程大学;2006年
张浩;[D];浙江大学;2008年
李岳阳;[D];江南大学;2010年
中国硕士学位论文全文数据库
段俊杰;[D];西北大学;2012年
潘夏英;[D];西安科技大学;2011年
魏学志;[D];哈尔滨工程大学;2011年
邓祥龙;[D];合肥工业大学;2012年
王绍雷;[D];广西大学;2007年
黄晶;[D];西安科技大学;2011年
董毅斌;[D];新疆师范大学;2011年
王发乃;[D];湖南师范大学;2012年
许春梅;[D];西华大学;2010年
刘军营;[D];大连海事大学;2011年
&快捷付款方式
&订购知网充值卡
400-819-9993sobel算子原理
sobel算子原理
09-03-28 &匿名提问相关文章推荐
做了sobel的实现,比较现有函数,发现自己的问题。
3*3的sobel为:[[1,2,1],[0,0,0],[-1,-2,-1]]/8和它的转置矩阵。
为什么除以8不是4呢,我猜是因为隐含了(求导1...
sobel算子是什么在图像处理上,算子一般也可以认为是滤波器filter,滤波器就是在一个像素点上对它进行与邻域之间的运算。如中值滤波,就是在以像素点为中心,上下左右左上左下右上右下为邻域的集合里,如...
Sobel算子详细介绍
本篇文章中,我们将一起学习OpenCV中边缘检测的各种算子和滤波器——Canny算子,Sobel算子,Laplace算子以及Scharr滤波器。文章中包含了五个浅墨为大家准备的详细注释的博文配套源代码...
一、Sobel边缘检测算子
l 在讨论边缘算子之前,首先给出一些术语的定义:
l (1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始...
1. Sobel算子的边缘检测实现
1.1. 边缘检测概念
所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征。边缘存在于目标、背景和区域之间,所以,它是图像分割所依赖的最重...
这里增加了对边缘像素的补齐。sobel梯度分割抗噪性好,但是无法做到自动阈值,是其一大遗憾,matlab却解决的很好。
//默认对8位位图进行处理
void Sobel(unsigned c...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 sobels算子计算例题 的文章

 

随机推荐