sobel算子实现边缘检测及其c++实现及与matlab效果对比
这里增加了对边缘像素的补齐。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效果对比相关推荐
- Sobel算子的边缘检测实现
1. Sobel算子的边缘检测实现 1.1. 边缘检测概念 所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征.边缘存在于目标.背景和区域之间,所以,它是图像分割所依赖的最重要的 ...
- matlab实现sobel边缘检测图像,基于Sobel算子图像边缘检测的MATLAB实现
<基于Sobel算子图像边缘检测的MATLAB实现>由会员分享,可在线阅读,更多相关<基于Sobel算子图像边缘检测的MATLAB实现(3页珍藏版)>请在人人文库网上搜索. 1 ...
- 在CIELab颜色空间下使用八方向Sobel算子实现边缘检测
参考河北师范大学硕士学位论文--基于八方向Sobel算子的边缘检测算法研究. 由于自己实现滤波器运算,计算速度很慢,以后有能力再进行改进. 算子定义如下: 算法思路: 1.将RGB图像转化为CIELa ...
- Opencv python基础入门(4)---sobel算子及边缘检测
本文主要介绍sobel算子及边缘检测: 代码如下: #sobel,ddepth如果设置为-1的话,水平处理只能取出左边界,右边界为负值丢失了,所以需要先用64F扩展然后用convertScaleAbs ...
- 屏幕后期处理之:Sobel算子实现边缘检测
版权声明 本文为"优梦创客"原创文章,您可以自由转载,但必须加入完整的版权声明 更多学习资源请加QQ:1517069595获取(企业级性能优化/热更新/Shader特效/服务器/商 ...
- sobel算子_OpenCV图像处理专栏十八 | 手动构造Sobel算子完成边缘检测
1. 前言 众所周知,在传统的图像边缘检测算法中,最常用的一种算法是利用Sobel算子完成的.Sobel算子一共有 个,一个是检测水平边缘的算子,另一个是检测垂直边缘的算子. 2. Sobel算子优缺 ...
- sobel算子_边缘检测算法4.-教你动手实现kirsch和robinson算子
还有很多 边缘检测算子,在OpenCV中没有实现代码. 所以,我们得掌握看懂算法,然后扩展 算法得能力. 比如,我已知的一些 边缘检测核心: Kirsch 8方向算子 Robinson 8方向算子 这 ...
- CUDA精进之路(四):图像处理——Sobel算子边缘检测
引言 关于图像边缘检测,记得刚开始接触图像处理时,第一个自己实现的程序是通过笔记本摄像头采集图像,利用OpenCV自带的算法库进行Canny算子边缘检测,那时候当看到程序运行后,视频窗口实时显示经Ca ...
- 图像处理学习2,边缘检测1(sobel算子,kirsch算子)
图像边缘的种类 图像中的边缘是像素灰度值发生加速变化而不连续的结果,边缘检测是常见的图像基元检测的基础,也是所有基于边界的图像分割方法的第一步. 图片来源:章毓晋.计算机视觉教程[M].北京:人民邮电 ...
最新文章
- Win7下的修改grub工具bcdedit
- 大脑构造图与功能解析_施工技术特辑 | 全套脚手架三维构造图解析
- .NET : 通过配置文件指定跟踪(trace)选项
- 作者:郭雷风,中国农业科学院农业信息研究所助理研究员。
- 第四章、epub文件处理 -- epub文件内部组成
- node.js中使用https请求报CERT_UNTRUSTED的问题解决
- java好的代码_做java软件工程师,怎样才能写出好的代码?
- git submodule使用的笔记
- java obervable_设计模式--观察者模式初探和java Observable模式
- 数字电路:边沿触发的D触发器简析
- html背景颜色渐变色代码,css3背景渐变色代码
- 面试珠玑 嵌入式C程序员经典笔试题一
- 数字中国创新大赛决赛名单出炉,与华为云 EI 一起挑战书法识别
- RegNet: Designing Network Design Spaces
- c语言字母存储,字符串在内存中的储存——C语言进阶
- Data Quality Services
- 树莓派Linux入门教程
- MATLAB颜色图中,小于某个值的所有点设为白色
- iOS中 流媒体播放和下载 韩俊强的博客
- 输出由“*”组成的菱形