什么是边缘检测

2024年11月21日 23:05
有1个网友回答
网友(1):

两个具有不同灰度值的相邻区域之间总存在边缘,边缘是灰度值不连续的表现。由于边缘是图像上灰度变化最剧烈的地方,传统的边缘检测就是利用了这个特点,对图像各个像素点进行微分或求二阶微分来确定边缘像素点。

以下是一段函数是关于边缘检测的一些算法,希望对你有帮助。。

I=imread('D:\10.jpg'); %读取图像

I1=im2double(I); %将彩图序列变成双精度

I2=rgb2gray(I1); %将彩色图变成灰色图

[thr, sorh, keepapp]=ddencmp('den','wv',I2);

I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp); %小波除噪

I4=medfilt2(I3,[9 9]); %中值滤波

I5=imresize(I4,0.8,'bicubic'); %图像大小

BW1=edge(I5,'sobel'); %sobel 图像边缘提取

BW2=edge(I5,'roberts'); %roberts 图像边缘提取

BW3=edge(I5,'prewitt'); %prewitt 图像边缘提取

BW4=edge(I5,'log'); %log 图像边缘提取

BW5=edge(I5,'canny'); %canny 图像边缘提取

h=fspecial('gaussian',5); %高斯滤波

BW6=edge(I5,'zerocross',[ ],h); %zerocross 图像边缘提取

figure;

subplot(1,3,1); %图划分为一行三幅图,第一幅图

imshow(I2); %绘图

title(' 原始图像'); %标注

subplot(1,3,2); %第二幅图

imshow(I3);

title(' 消噪后图像');

subplot(1,3,3); %第三幅图

imshow(I4);

title(' 中值滤波图像');

figure;

subplot(1,3,1);

imshow(BW1);

title('Sobel 算子');

subplot(1,3,2);

imshow(BW2);

title('Roberts 算子');

subplot(1,3,3);

imshow(BW3);

title('Prewitt 算子');

figure;

subplot(1,3,1);

imshow(BW4);

title('log 算子');

subplot(1,3,2);

imshow(BW5);

title('Canny 算子');

subplot(1,3,3);

imshow(BW6);

title('Zerocross');