- 13
- 0
- 约2.58万字
- 约 53页
- 2016-11-11 发布于湖北
- 举报
* * Sobel算子 索贝尔算子(Sobel operator)是图像处理中的算子之一,主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量 [编辑本段] 核心公式 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下: 图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。 然后可用以下公式计算梯度方向。 在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。 [编辑本段] 其他介绍 在边沿检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边沿的 ;另一个是检测垂直平边沿的 。与 和 相比,Sobel算子对于象素的位置的影响做了加权,因此效果更好。 Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边沿的 ,另一个是检测垂直平边沿的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性Sobel算子的处理方法。 由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。 在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。 .NET代码如下 for(Times=0;Times128iThreshold!=iNewThreshold;Times++) { iThreshold=iNewThreshold; lP1=0; lP2=0; lS1=0; lS2=0; for(i=iMinGray;iiThreshold;i++) { lP1+=Histogram*i; lS1+=Histogram; } iMean1Gray=lP1/lS1; for(i=iThreshold;iiMaxGray;i++) { lP2+=Histogram*i; lS2+=Histogram; } iMean2Gray=lP2/lS2; iNewThreshold=(iMean1Gray+iMean2Gray)/2; } 补充Sobel算子的矩阵表达式: Sobel1=[-1 -2 -1; %检测水平边沿的Sobel算子 0 0 0; 1 2 1]; Sobel2=[1 0 -1; %检测垂直平边沿的Sobel算子 2 0 -2; 1 0 -1]; Method 1:sobel_edge.c / C ? 1?/*?? 2?(C) OOMusou 2007 ? 3?? 4?Filename??? : sobel_edge.c? 5?Compiler??? : Visual C++ 8.0? 6?Description : Demo the how to use sobel detector on gray level image? 7?Release???? : 07/23/2008 1.0? 8?*/? 9?#include stdio.h10?#include stdlib.h11?#include math.h12?13?#define MASK_N 214?#define MASK_X 315?#define MASK_Y 316?#define WHITE? 25517?#define BLACK? 018?19?unsigned char?*image_s = NULL;???? // source image array20?unsigned char?*image_t = NULL;???? // target im
原创力文档

文档评论(0)