Canny边缘检测算子的实现
这学期学了数字图像分析这门课,感觉很多东西听得半懂不懂,觉得还是一个一个实践下比较好,希望自己能坚持下来。canny边缘检测算子被认为是最好的边缘检测算子,在此给出我的matlab实现方法,以及结果的大概分析。本文主要参考了两位大神的博文,链接如下:
https://blog.csdn.net/q664111/article/details/51116378
https://blog.csdn.net/kezunhai/article/details/11620357
canny算法的matlab实现
function [] = cannyFun(imagepath)
%功能: 获得图像的边缘
%步骤:
% 1. 用高斯滤波器平滑图像;(图像去噪)
% 2. 用一阶偏导有限差分计算梯度幅值和方向;(特征增强)
% 3. 阈值化处理,再对梯度幅值进行非极大值抑制 ;(边缘检测)
% 4. 用双阈值算法检测和连接边缘。
%1. 高斯平滑
%imagepath = 'Fig0233(a).tif';
data = imread(imagepath);
data = im2double(data);
w = fspecial('gaussian', [5, 5]);
dataFiltered = imfilter(data, w, 'replicate');
%2. 用一阶偏导有限差分计算梯度幅值和方向
%在这里用sobel算子计算水平和竖直的梯度,以及梯度幅值,方向暂时不算。
sobelx = [-1, 0, 1; -2, 0, 2; -1, 0, 1];
sobely = [-1, -2, -1; 0, 0<