canny边缘检测算法matlab代码
时间: 2023-10-02 15:09:35 浏览: 98
以下使用MATLAB实现Canny边缘检测算法的代码示例:
```matlab
% 读取图像
I = imread('example.jpg');
% 转换为灰度图像
Igray = rgb2gray(I);
% 高斯滤波
Iblur = imgaussfilt(Igray, 2);
% 计算梯度
[Gmag, Gdir] = imgradient(Iblur, 'sobel');
% 非极大值抑制
BW = imregionalmax(Gmag);
Gmag(~BW) = 0;
% 双阈值检测
th_high = 0.2 * max(Gmag(:));
th_low = 0.1 * max(Gmag(:));
edge_map = zeros(size(Gmag));
edge_map(Gmag >= th_high) = 1;
edge_map(Gmag >= th_low & Gmag < th_high) = 2;
% 边缘跟踪
edge_map = bwselect(edge_map, 1, 1, 8);
% 显示结果
imshow(I);
hold on;
[B, L] = bwboundaries(edge_map);
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2);
end
```
代码中使用了MATLAB内置函数`imgaussfilt`进行高斯滤波,`imgradient`计算梯度,`imregionalmax`进行非极大值抑制,`bwselect`进行边缘跟踪,`bwboundaries`提取边界。
使用时,将代码保存为.m文件,将所需图像放置在与.m文件同一目录下,替换代码中的`example.jpg`为实际图像文件名,并在MATLAB命令窗口中运行即可。
阅读全文