我可没直接调用系统函数,要是那样就太水了。其实我的matlab代码很容易就能翻译成c/c++的。
canny边缘检测一共四个部分:
1.对原图像高斯平滑
2.对高斯平滑后的图像进行sobel边缘检测。这里需要求横的和竖的还有联合的,所以一共三个需要sobel边缘检测图像。
3.对联合的sobel检测图像进行非极大抑制
4.连接边缘点并进行滞后阈值处理。
下面是代码:
main.m
clear all;
close all;
clc;
img=imread('lena.jpg');
imshow(img);
[m n]=size(img);
img=double(img);
%%canny边缘检测的前两步相对不复杂,所以我就直接调用系统函数了
%%高斯滤波
w=fspecial('gaussian',[5 5]);
img=imfilter(img,w,'replicate');
figure;
imshow(uint8(img))
%%sobel边缘检测
w=fspecial('sobel');
img_w=imfilter(img,w,'replicate'); %求横边缘
w=w';
img_h=imfilter(img,w,'replicate'); %求竖边缘
img=sqrt(img_w.^2+img_h.^2); %注意这里不是简单的求平均,