Sobel边缘检测(matlab)
2016-05-16 13:29
323 查看
边缘检测是为了将其周围像素灰度有阶跃变化的像素检测出来,这些像素组成的集合就是该图像的边缘。比较常用的边缘检测方法就是考察每个像素在某个领域内灰度的变化,然后利用边缘临近一阶或二阶方向导数变化规律检测边缘,即边缘检测局部算法。
而常用的边缘检测算子有sobel,Roberts,Prewitt,Laplace等等,这里先介绍sobel算子的检测过程。主要的方法就是将图像的每一个点都用sobel算子做卷积:一个用来检测垂直边缘,一个用来检测水平边缘,而最后两个卷积的最大值将作为该点的输出,即检测后的灰度。
Sobel算子:可以看到sobel算子包括两组3*3的矩阵,左边的表示垂直,右边的表示水平。将它与图像作平面卷积,即可分别得出垂直及水平的亮度差分近似值。
主要的代码如下:
如果想用matlab自带的其他算子进行边缘检测的话,直接将edge中的sobel参数修改即可
而常用的边缘检测算子有sobel,Roberts,Prewitt,Laplace等等,这里先介绍sobel算子的检测过程。主要的方法就是将图像的每一个点都用sobel算子做卷积:一个用来检测垂直边缘,一个用来检测水平边缘,而最后两个卷积的最大值将作为该点的输出,即检测后的灰度。
Sobel算子:可以看到sobel算子包括两组3*3的矩阵,左边的表示垂直,右边的表示水平。将它与图像作平面卷积,即可分别得出垂直及水平的亮度差分近似值。
主要的代码如下:
clear all; close all; imag = imread('face7.jpg'); %读取关键帧 imag = rgb2gray(imag); %转化为灰度图 subplot(131);imshow(imag):title('原图'); [high,width] = size(imag); % 获得图像的高度和宽度 F2 = double(imag); U = double(imag); uSobel = imag; for i = 2:high - 1 %sobel边缘检测 for j = 2:width - 1 Gx = (U(i+1,j-1) + 2*U(i+1,j) + F2(i+1,j+1)) - (U(i-1,j-1) + 2*U(i-1,j) + F2(i-1,j+1)); Gy = (U(i-1,j+1) + 2*U(i,j+1) + F2(i+1,j+1)) - (U(i-1,j-1) + 2*U(i,j-1) + F2(i+1,j-1)); uSobel(i,j) = sqrt(Gx^2 + Gy^2); end end subplot(132);imshow(im2uint8(uSobel)):title('边缘检测后'); %画出边缘检测后的图像 % Matlab自带函数边缘检测 % K为获取得到的关键帧的灰度图 BW3 = edge(imag,'sobel', 0.09); subplot(133);imshow(BW3,[]):title('Matlab自带函数边缘检测');
如果想用matlab自带的其他算子进行边缘检测的话,直接将edge中的sobel参数修改即可
相关文章推荐
- 解析在main函数之前调用函数以及对设计的作用详解
- 详解Matlab中 sort 函数用法
- java和matlab画多边形闭合折线图示例讲解
- C#调用Matlab生成的dll方法的详细说明
- c#数字图像处理的3种方法示例分享
- 简述Matlab中size()函数的用法
- 从java中调用matlab详细介绍
- 稀疏自动编码器 (Sparse Autoencoder)
- 详解Matlab中 sort 函数用法
- 简述Matlab中size()函数的用法
- VC++与Matlab混合编程的快速实现
- Matlab 矩阵运算
- matlab与opencv部分函数的对照
- matlab神经网络工具箱创建神经网络
- Matlab
- MATLAB 入门教程
- matlab函数_连通区域
- MATLAB中函数模式和命令模式的区别
- MATLAB 添加自定义的模块到simulink库浏览器