matlab canny边缘,matlab – 定向Canny边缘检测

没有办法使用内置的

edge功能.但是,Canny边缘检测使用了

Sobel Operator的角度.很容易重现这些值.

>从图像开始,我将使用内置的演示图像.

A = im2double(rgb2gray(imread('peppers.png')));

>获得Canny边缘

A_canny = edge(A, 'Canny');

> Sobel运算符 – 我们不能使用内置实现(edge(A_filter,’Sobel’)),因为我们需要边缘角度,而不仅仅是边缘位置,因此我们实现了自己的运算符.

一个.高斯滤波器.这是Canny的预处理步骤,所以我们应该在这里重现它

A_filter = imgaussfilt(A);

湾卷积找到定向梯度

%These filters measure the difference in values between vertically or horizontally adjacent pixels.

%Effectively, this finds vertical and horizontal gradients.

vertical_filter = [-1 0 1; -2 0 2; -1 0 1];

horizontal_filter = [-1 -2 -1; 0 0 0; 1 2 1];

A_vertical = conv2(A_filter, vertical_filter, 'same');

A_horizontal = conv2(A_filter, horizontal_filter, 'same');

C.计算角度

A_angle = arctan(A_vertical./A_horizontal);

>获取边缘位置的角度值

A_canny_angles = nan(size(A));

A_canny_angles(A_canny) = A_angle(A_canny);

>选择您感兴趣的角度

angle_tolerance = 22.5/180*pi;

target_angle = 0;

A_target_angle = A_canny_angles >= target_angle*pi/180 - angle_tolerance & ...

A_canny_angles<= target_angle*pi/180 + angle_tolerance;

因此,如果我正在寻找水平线,我的目标角度将为零.下图说明了步骤1,2,4和5.提取的水平线的最终结果显示在右下角.您可以看到它们不是完全水平的,因为我使用了这么大的角度公差窗口.这是一个可调参数,具体取决于您想要达到目标角度的精确程度.

R0fDp.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值