MATLAB的Sobel边缘检测算子、Prewitt边缘检测算子、Canny边缘检测算子

sobel 产生的边缘有强弱,抗噪性好,计算量小

    laplace 对边缘敏感,可能有些是噪声的边缘,也被算进来了

    canny 产生的边缘很细,可能就一个像素那么细,没有强弱之分。计算量大,但是准确
global in%使用全局变量in
%拿到所选按钮的名称
str=get(hObject,'string');

axes(handles.axes1);

switch str
    case '原图'
         imshow(in);  
    case 'sobel'
        BW=edge(rgb2gray(in),'sobel');
        imshow(BW); 
    case 'prewitt' 
         BW=edge(rgb2gray(in),'prewitt');
        imshow(BW); 
    case 'canny'
        BW=edge(rgb2gray(in),'canny');
        imshow(BW); 
end

MATLAB的Sobel边缘检测算子、Prewitt边缘检测算子、Canny边缘检测算子_第1张图片
MATLAB的Sobel边缘检测算子、Prewitt边缘检测算子、Canny边缘检测算子_第2张图片
MATLAB的Sobel边缘检测算子、Prewitt边缘检测算子、Canny边缘检测算子_第3张图片
MATLAB的Sobel边缘检测算子、Prewitt边缘检测算子、Canny边缘检测算子_第4张图片
注:
1、Sobel 算子

 基于 Sobel 算子的边缘检测法由包含水平边缘和垂直边缘信息的卷积核组成,其中水平边缘信息的卷积核对该检测法的影响较大。该方法的主要原理是通过卷积算法得到水平边缘和垂直边缘的最大值,将该值作为 Sobel 算子输出,进而实现对图像的边缘检测并提取。

2、Prewitt边缘检测算子
其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。

相比Roberts算子,Prewitt算子对噪声有抑制作用,抑制噪声的原理是通过像素平均,因此噪声较多的图像处理得比较好,但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位却不如Roberts算子。

3、Canny边缘检测算子
从表面效果上来讲,Canny算法是对Sobel、Prewitt等算子效果的进一步细化和更加准确的定位。

Canny算法基于三个基本目标:

(1)低错误率。所有边缘都应被找到,且没有伪响应。
(2)边缘点应该被很好地定位。已定位的边缘必须尽可能接近真实边缘。
(3)单一的边缘点响应。这意味在仅存一个单一边缘点的位置,检测器不应指出多个像素边缘。
进而,Canny的工作本质是,从数学上表达前面的三个准则。因此Canny的步骤如下:

(1)对输入图像进行高斯平滑,降低错误率。
(2)计算梯度幅度和方向来估计每一点处的边缘强度与方向。
(3)根据梯度方向,对梯度幅值进行非极大值抑制。本质上是对Sobel、Prewitt等算子结果的进一步细化。
用双阈值处理和连接边缘。

4、rgb2gray - 将 RGB 图像或颜色图转换为灰度图

此 MATLAB 函数 将真彩色图像 RGB 转换为灰度强度图像 I。rgb2gray 函数通过消除色调和饱和度信息,同时保留亮度,来将 RGB
图像转换为灰度图。如果已安装 Parallel Computing Toolbox,则 rgb2gray 可以在 GPU 上执行此转换。

你可能感兴趣的:(Matlab)