MATLAB中的Canny算子矩阵:如何实现/获取? (只是过滤器,没有边缘检测器)

Posted

技术标签:

【中文标题】MATLAB中的Canny算子矩阵:如何实现/获取? (只是过滤器,没有边缘检测器)【英文标题】:Canny operator matrix in MATLAB: how to implement/get? (just filter, no edge detector) 【发布时间】:2012-03-16 19:07:16 【问题描述】:

我正在使用MATLAB (2011) 制作一个项目,它使用户可以过滤灰度图像(使用卷积但不寻找边缘)。我知道对于边有 [edge] 函数,而且我知道对于某些运算符(如 sobel),您可以使用 [fspecial] 来获取矩阵。

我找到了一个矩阵(或多个)对应于我需要的每个运算符:sobel、roberts、robinson、Laplacian 等...

然后我以这种方式应用过滤器:

Result_image = conv2(Original_image, matrix_filter);

但我找不到 Canny 运算符的...

我读到 Canny 是在从应用拉普拉斯算子开始的不同步骤中实现的……但是呢?以下步骤是什么?以及如何让矩阵应用于图像?

我正在寻找矩阵,或获取它的方法或至少一个示例来理解“多步骤过程”。

我找到了一个页面,介绍了获取边缘运算符实现的步骤。过滤的步骤是什么? (导数 X,导数 Y,梯度,非极大值抑制,滞后)。该页面是 Canny Edge Detector(作者 Mikel Rodriguez)。

【问题讨论】:

您可以使用图像处理工具箱吗?那里有精明的检测器。 你指的是函数edge('canny')还是别的什么?关键是我不能应用边缘(因为它被要求只过滤灰度图像,而不是过滤它) 是的,如mathworks.fr/help/toolbox/images/ref/edge.html @JoelFalcou 我很欣赏你的回答,但不幸的是我必须在没有边缘的情况下应用过滤器(我知道这很奇怪......但这就是我的项目所要求的)。我找到了一个页面,介绍了获取边缘运算符实现的步骤。你能告诉我过滤的步骤是什么吗? (衍生 X,衍生 Y,梯度,非最大抑制,滞后)。页面为:cs.ucf.edu/~mikel/Research/Edge_Detection.htm 哦,好吧,确实很奇怪。不幸的是,与您可以询问子结果的其他方法相反,canny 不要:/ 【参考方案1】:

正如您所指出的,Canny Edge Detector 是一种算法而不是过滤器。这意味着您无法拥有“Canny”过滤器。

让我们看看算法中涉及的步骤(Wikipedia或OpenCV implementation):

    高斯滤波(使用高斯滤波器) 图像的梯度(使用其他一些边缘过滤器,例如 Sobel 过滤器) 非最大抑制(不涉及过滤器) 阈值处理(不涉及过滤器)

如你所见,Canny 过滤器无处不在,所以恐怕你无法获得这样的过滤器。

【讨论】:

以上是关于MATLAB中的Canny算子矩阵:如何实现/获取? (只是过滤器,没有边缘检测器)的主要内容,如果未能解决你的问题,请参考以下文章

图像经过Canny算子处理后如何获取边缘位置的像素坐标

需要一段用Canny算子实现图像边缘检测的MATLAB程序,拜托高手们帮帮忙,很急啊!

sobel边缘检测优缺点与canny算子的优缺点?

Matlab边缘检测问题

图像边缘检测:Canny算子、Prewitt算子和sobel算子

我想知道opencv边缘检测中的sobel,canny算子的数学原理需要去理解吗,还是这直接记住它的功能就好!