📜  使用MATLAB中的内置函数进行边缘检测

📅  最后修改于: 2021-04-17 02:53:52             🧑  作者: Mango

边缘检测:在图像中,边缘是沿着该图像的强度快速变化的路径的曲线。边缘通常与场景环境中对象的边界相关联。边缘检测用于识别图像中的边缘,从而使图像处理变得容易。边缘检测通过检测亮度不连续来起作用。边缘检测主要用于图像处理,计算机视觉和机器视觉等领域的图像分割和数据提取。

要找到边缘,您可以使用Matlab内置的边缘函数edge(图像,边缘检测器) 。此内置函数使用以下两个条件之一来查找图像中强度快速变化的位置:

  • 强度的一阶导数的幅度大于某个阈值的位置。
  • 强度的二阶导数具有零交叉的地方。

边缘检测器提供了几个导数估计器,每个估计器都实现了上述定义之一。对于其中的某些估计量,您可以指定操作是对垂直边沿,水平边沿还是对两者都敏感。边缘估计器返回一个二进制图像,该图像包含找到边缘的1和其他位置的0。
边缘提供的最强大的边缘检测技术是Canny方法。 Canny方法与其他边缘检测方法的不同之处在于,它使用两种不同类型的阈值级别来检测强边缘和弱边缘。 Canny边缘检测方法仅在将弱边缘连接到强边缘时才在输出中包括它们。因此,该方法不太可能受到噪声的影响,并且更有可能检测到真正的弱边缘。

Matlab中提供了许多边缘检测内置函数,例如:

  • Sobel边缘检测器
  • Prewitt边缘检测器
  • 罗伯特边缘检测仪
  • 对数边缘检测器
  • 零交叉边缘检测器
  • 坎尼边缘检测仪

利用MATLAB库函数边缘检测。

% importing the imgae
I = rgb2gray(imread("flowers.jpg")); 
subplot(2, 4, 1), 
imshow(I); 
title("Gray Scale Image"); 
  
% Sobel Edge Detection 
J = edge(I, 'Sobel'); 
subplot(2, 4, 2), 
imshow(J); 
title("Sobel"); 
  
% Prewitt Edge detection 
K = edge(I, 'Prewitt'); 
subplot(2, 4, 3), 
imshow(K); 
title("Prewitt"); 
  
% Robert Edge Detection 
L = edge(I, 'Roberts'); 
subplot(2, 4, 4), 
imshow(L); 
title("Robert"); 
  
% Log Edge Detection 
M = edge(I, 'log'); 
subplot(2, 4, 5), 
imshow(M); 
title("Log"); 
  
% Zerocross Edge Detection 
M = edge(I, 'zerocross'); 
subplot(2, 4, 6), 
imshow(M); 
title("Zerocross"); 
  
% Canny Edge Detection 
N = edge(I, 'Canny'); 
subplot(2, 4, 7), 
imshow(N); 
title("Canny"); 

输出 :