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算子实现图像边缘检测的MATLAB程序,拜托高手们帮帮忙,很急啊!