在工作和学习中,我们可能会遇到需要提取试验或仿真图像的边缘特征的情况,边缘检测作为一个预处理过程, 广泛应用于图像分割、模式识别和运动分析等领域,所以今天就来介绍一下Matlab的边缘检测算法。 Matlab主要使用"edge"函数进行边缘检测,其中包含了“sobel”、“canny”、“prewitt”、“roberts”、“log”等算法。 这里我们使用下图进行演示 边缘检测代码如下:
clc clear close all %% 边缘检测 I=imread('jisimulation.png'); imshow(I) BW1 = edge(I,'sobel'); BW2 = edge(I,'canny'); BW3 = edge(I,'prewitt'); BW4 = edge(I,'roberts'); BW5 = edge(I,'log'); BW6 = edge(I,'zerocross'); %% 图像对比 tiledlayout(2,3) nexttile imshow(BW1) title('Sobel Filter') nexttile imshow(BW2) title('Canny Filter') nexttile imshow(BW3) title('prewitt') nexttile imshow(BW4) title('roberts') nexttile imshow(BW5) title('log') nexttile imshow(BW6) title('zerocross')
我们运行代码可以得到如下结果:
其中:
sobel、prewitt算法对图像进行了平滑处理,对噪声具有一定抑制能力,但容易出现多像素宽度。 log算法的抗噪声能力较强,但会造成一些尖锐的边缘无法检测到。 Robert算法的边缘定位精度较高,对于陡峭边缘且噪声低的图像效果较好,但没有进行平滑处理,没有抑制噪声的能力。 canny算法采用高斯函数对图像进行平滑处理,但会造成将高频边缘平滑掉,造成边缘丢失,采用双阈值算法检测和连接边缘。
|