Sobel边缘检测算法
来源:互联网 发布:手机越狱软件 编辑:程序博客网 时间:2024/04/29 08:23
/***********************************************************************
* Sobel边缘检测 (scale=0.5)
* 参数: image0为原图形,image1为边缘检测结果,w、h为图像的宽和高
* 当type为true时,差分结果取水平和垂直方向差分中较大者,否则取平均值
************************************************************************/
void SideSobel(BYTE* image0, BYTE* image1, unsigned int w, unsigned int h, bool type)
{
int x, y, a, aHr, aHg, aHb, aVr, aVg, aVb, aH, aV;
long n;
double scale = 0.2; // 该值是动态的,
//依次处理每个像素
for(y = 1; y < h-1; y++)
for(x = 1; x < w-1; x++)
{
//计算像素的偏移位置
n = (y*w+x)*4;
//计算红色分量水平灰度差
aHr = abs( (image0[n-w*4-4]+image0[n-4]*2+image0[n+w*4-4])
- (image0[n-w*4+4]+image0[n+4]*2+image0[n+w*4+4]) );
//计算红色分量垂直灰度差
aVr = abs( (image0[n-w*4-4]+image0[n-w*4]*2+image0[n-w*4+4])
- (image0[n+w*4-4]+image0[n+w*4]*2+image0[n+w*4+4]) );
//计算绿色分量水平灰度差
aHg = abs( (image0[n-w*4-4+1]+image0[n-4+1]*2+image0[n+w*4-4+1])
- (image0[n-w*4+4+1]+image0[n+4+1]*2+image0[n+w*4+4+1]) );
//计算绿色分量垂直灰度差
aVg = abs( (image0[n-w*4-4+1]+image0[n-w*4+1]*2+image0[n-w*4+4+1])
- (image0[n+w*4-4+1]+image0[n+w*4+1]*2+image0[n+w*4+4+1]) );
//计算蓝色分量水平灰度差
aHb = abs( (image0[n-w*4-4+2]+image0[n-4+2]*2+image0[n+w*4-4+2])
- (image0[n-w*4+4+2]+image0[n+4+2]*2+image0[n+w*4+4+2]) );
//计算蓝色分量垂直灰度差
aVb = abs( (image0[n-w*4-4+2]+image0[n-w*4+2]*2+image0[n-w*4+4+2])
- (image0[n+w*4-4+2]+image0[n+w*4+2]*2+image0[n+w*4+4+2]) );
//计算水平综合灰度差
aH = aHr + aHg + aHb;
//计算垂直综合灰度差
aV = aVr + aVg + aVb;
if(type)
{
//取水平和垂直方向差分中较大者
if(aH > aV) a = aH;
else a = aV;
}
else
{
//取水平和垂直方向差分的平均值
a = (aH + aV)/2;
}
a = a *scale;
a = a>255?255:a;
//生成边缘扫描结果
SetPixel(image1,n,a);
}
}
看代码大概了解算法原理(没办法, 数学差)。
注意 边缘细化与边缘检查是不同的, 一般直接对图片细化, 可能效果不是很好, 所以先进行边缘检测, 再进行细化效果会好一点。
A. 原图
B. 直接细化图
C. Sobel边缘检测图
D. 经过Sobel边缘检测后, 再细化的图
- Sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- sobel 边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- Android使用Sobel算法边缘检测
- [图像处理] Sobel边缘检测算法
- OpenCV图像边缘检测(sobel算法)
- 灰度图像的sobel边缘检测算法
- Sobel边缘检测
- sobel边缘检测算子
- Sobel 边缘检测
- sobel边缘检测
- java/jsp中绝对路径和相对路径的问题[FROM]
- Sobel边缘检测和边缘细化
- java/jsp中绝对路径和相对路径的问题[FROM]
- JAVA内存泄漏——内存泄漏原因和内存泄漏检测工具(zt)
- 进程和线程区别
- Sobel边缘检测算法
- sharepoint 列表附件的基本操作
- 高效人士的116个IT秘诀(第2版)——秘诀23早晨就来一次突破
- Treeview 分层显示 小思考
- 101104
- c语言大型程序架构小概
- 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)
- C#中 DataGridView 属性说明
- SOAOffice 中间件是北京科翰软件为微软OFFICE量身打造的Web中间件