这里增加了对边缘像素的补齐。sobel梯度分割抗噪性好,但是无法做到自动阈值,是其一大遗憾,matlab却解决的很好。

//默认对8位位图进行处理
void Sobel(unsigned char *pIn, int width, int height, unsigned char *pOut)
{//每行像素所占字节数,输出图像与输入图像相同int lineByte=(width+3)/4*4;//申请输出图像缓冲区pOut=new unsigned char[lineByte*height];//循环变量,图像的坐标int i,j;//中间变量int x, y, t;//Sobel算子for(i=1;i<height-1;i++){for(j=1;j<width-1;j++){//x方向梯度x= *(pIn+(i-1)*lineByte+j+1)+ 2 * *(pIn+i*lineByte+j+1)+ *(pIn+(i+1)*lineByte+j+1)- *(pIn+(i-1)*lineByte+j-1)- 2 * *(pIn+i*lineByte+j-1)- *(pIn+(i+1)*lineByte+j-1);//y方向梯度y= *(pIn+(i-1)*lineByte+j-1)+ 2 * *(pIn+(i-1)*lineByte+j)+ *(pIn+(i-1)*lineByte+j+1)- *(pIn+(i+1)*lineByte+j-1)- 2 * *(pIn+(i+1)*lineByte+j)- *(pIn+(i+1)*lineByte+j+1);t=abs(x)+abs(y)+0.5;if (t>100){*(pOut+i*lineByte+j)=255;}else{*(pOut+i*lineByte+j)=0;}}}for(j=0;j<width;j++){*(pOut+(height-1)*lineByte+j)=0;//补齐最后一行*(pOut+j)=0;//补齐第一行}for(i=0;i<height;i++){*(pOut+i*lineByte)=0;//补齐第一列*(pOut+i*lineByte+width-1)=0;//补齐最后一列}}
}

image=imread('C:\\Users\\Liu\\\Desktop\\lenna.bmp');
Info=imfinfo('C:\\Users\\Liu\\\Desktop\\lenna.bmp');  %读图像信息,并判断是否是灰度图
if Info.BitDepth>8
image=rgb2gray(image);
end
BW=edge(image,'sobel');
imshow(BW)

甚至对比opencv,matlab的效果也略胜一筹,接下来希望深入matlab底层,用c++实现matlab的sobel算子。

sobel算子实现边缘检测及其c++实现及与matlab效果对比相关推荐

  1. Sobel算子的边缘检测实现

    1. Sobel算子的边缘检测实现 1.1. 边缘检测概念 所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征.边缘存在于目标.背景和区域之间,所以,它是图像分割所依赖的最重要的 ...

  2. matlab实现sobel边缘检测图像,基于Sobel算子图像边缘检测的MATLAB实现

    <基于Sobel算子图像边缘检测的MATLAB实现>由会员分享,可在线阅读,更多相关<基于Sobel算子图像边缘检测的MATLAB实现(3页珍藏版)>请在人人文库网上搜索. 1 ...

  3. 在CIELab颜色空间下使用八方向Sobel算子实现边缘检测

    参考河北师范大学硕士学位论文--基于八方向Sobel算子的边缘检测算法研究. 由于自己实现滤波器运算,计算速度很慢,以后有能力再进行改进. 算子定义如下: 算法思路: 1.将RGB图像转化为CIELa ...

  4. Opencv python基础入门(4)---sobel算子及边缘检测

    本文主要介绍sobel算子及边缘检测: 代码如下: #sobel,ddepth如果设置为-1的话,水平处理只能取出左边界,右边界为负值丢失了,所以需要先用64F扩展然后用convertScaleAbs ...

  5. 屏幕后期处理之:Sobel算子实现边缘检测

    版权声明 本文为"优梦创客"原创文章,您可以自由转载,但必须加入完整的版权声明 更多学习资源请加QQ:1517069595获取(企业级性能优化/热更新/Shader特效/服务器/商 ...

  6. sobel算子_OpenCV图像处理专栏十八 | 手动构造Sobel算子完成边缘检测

    1. 前言 众所周知,在传统的图像边缘检测算法中,最常用的一种算法是利用Sobel算子完成的.Sobel算子一共有 个,一个是检测水平边缘的算子,另一个是检测垂直边缘的算子. 2. Sobel算子优缺 ...

  7. sobel算子_边缘检测算法4.-教你动手实现kirsch和robinson算子

    还有很多 边缘检测算子,在OpenCV中没有实现代码. 所以,我们得掌握看懂算法,然后扩展 算法得能力. 比如,我已知的一些 边缘检测核心: Kirsch 8方向算子 Robinson 8方向算子 这 ...

  8. CUDA精进之路(四):图像处理——Sobel算子边缘检测

    引言 关于图像边缘检测,记得刚开始接触图像处理时,第一个自己实现的程序是通过笔记本摄像头采集图像,利用OpenCV自带的算法库进行Canny算子边缘检测,那时候当看到程序运行后,视频窗口实时显示经Ca ...

  9. 图像处理学习2,边缘检测1(sobel算子,kirsch算子)

    图像边缘的种类 图像中的边缘是像素灰度值发生加速变化而不连续的结果,边缘检测是常见的图像基元检测的基础,也是所有基于边界的图像分割方法的第一步. 图片来源:章毓晋.计算机视觉教程[M].北京:人民邮电 ...

最新文章

  1. Win7下的修改grub工具bcdedit
  2. 大脑构造图与功能解析_施工技术特辑 | 全套脚手架三维构造图解析
  3. .NET : 通过配置文件指定跟踪(trace)选项
  4. 作者:郭雷风,中国农业科学院农业信息研究所助理研究员。
  5. 第四章、epub文件处理 -- epub文件内部组成
  6. node.js中使用https请求报CERT_UNTRUSTED的问题解决
  7. java好的代码_做java软件工程师,怎样才能写出好的代码?
  8. git submodule使用的笔记
  9. java obervable_设计模式--观察者模式初探和java Observable模式
  10. 数字电路:边沿触发的D触发器简析
  11. html背景颜色渐变色代码,css3背景渐变色代码
  12. 面试珠玑 嵌入式C程序员经典笔试题一
  13. 数字中国创新大赛决赛名单出炉,与华为云 EI 一起挑战书法识别
  14. RegNet: Designing Network Design Spaces
  15. c语言字母存储,字符串在内存中的储存——C语言进阶
  16. Data Quality Services
  17. 树莓派Linux入门教程
  18. MATLAB颜色图中,小于某个值的所有点设为白色
  19. iOS中 流媒体播放和下载 韩俊强的博客
  20. 输出由“*”组成的菱形

热门文章

  1. 2017百度之星初赛:A-1001. 小C的倍数问题
  2. bzoj 3626: [LNOI2014]LCA(离线差分+树链剖分)
  3. 安卓传感器全解:注册、注销传感器、监听传感器,距离传感器、方向传感器、陀螺仪、加速计、磁场、气压传感器
  4. 数电渣渣的一点学习感想(更新中)
  5. 贺利坚老师汇编课程54笔记:标志寄存器
  6. 回顾之前易忘记的知识
  7. android 事件机制初探
  8. springmvc中Date类型转换
  9. Libevent 事件循环(1)
  10. CCF - 201412-1 - 门禁系统