主要参考学习《数字图像处理 原理与实践 matlab版》
边缘检测的算法通常对领域内像素灰度求一阶导数、二阶导数以及梯度来实现,这些计算经过化简的结果成为算子(operator)。
在使用算子进行边缘检测时,我们定义边缘为像素集合:
{x|F(x)>th}
其中x为像素编号,F(x)为算子计算结果,th为临界值。边缘检测的过程可以分解为对图像的每个像素分别计算判断的过程。
边缘检测结果图中的灰度值可以直接通过算子计算原图像中对应像素的灰度差分来得到。几乎所有边缘检测的共同思想都是以像素灰度差分为基础的。在实现时,只需一次对原图像中每个元素进行计算,并把结果保存为灰度图中的像素即可。在计算时,由于灰度差分的结果进行缩放,从而得到清晰的边缘图像。
1、基于梯度的方法
计算两个指定方向的离散梯度;在通过已有的卷积核(Roberts、sobel、prewitt)计算出两个定向的梯度的差值。得到一个领域的边缘,卷积的过程对每一个位置进行这样的操作,最后得到整幅图的边缘。
matlab代码
clear;
I=imread('D:\Desktop\example.jpg');
Igray=rgb2gray(I);
im1=edge(Igray,'roberts');
im2=edge(Igray,'sobel');
im3=edge(Igray,'prewitt');
subplot(221),imshow(I),title('original');
subplot(222),imshow(im1),title('roberts');
subplot(223