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.提取的水平線的最終結果顯示在右下角.您可以看到它們不是完全水平的,因為我使用了這么大的角度公差窗口.這是一個可調參數,具體取決于您想要達到目標角度的精確程度.
總結
以上是生活随笔為你收集整理的matlab canny边缘,matlab – 定向Canny边缘检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php繁体拼音字母,php获取中文字符串
- 下一篇: wordpress 主机伪静态404.p