图像边缘检测原理

这篇具有很好参考价值的文章主要介绍了图像边缘检测原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



图像边缘检测原理

1:

图像的边缘指的是图像中像素灰度值突然发生变化的区域,如果将图像的每一行像素和每一列像素都描述成一个关于灰度值的函数,那么图像的边缘对应在灰度值函数中是函数值突然变大的区域。函数值的变化趋势可以用函数的导数描述。当函数值突然变大时,导数也必然会变大,而函数值变化较为平缓区域,导数值也比较小,因此可以通过寻找导数值较大的区域去寻找函数中突然变化的区域,进而确定图像中的边缘位置。图5-27给出一张含有边缘的图像,图像每一行的像素灰度值变化可以用图中下方的曲线表示。

图像边缘检测原理

通过像素灰度值曲线可以看出图像边缘位于曲线变化最陡峭的区域,对灰度值曲线求取一阶导数可以得到图5-28中所示的曲线,通过曲线可以看出曲线的最大值区域就是图像中的边缘。
图像边缘检测原理图像边缘检测原理

图像的边缘有可能是由高像素值变为低像素值,也有可能是由低像素值变成高像素值,通过式(5.13)和式(5.14)得到的正数值表示需要像素值突然由低变高,得到的负数值表示像素值由高到低,这两种都是图像的边缘,因此为了在图像中同时表示出这两种边缘信息,需要将计算的结果求取绝对值。

2:

数字图像的边缘检测在图像处理中起着十分重要的作用,十分简单又有效的方法就是微分算子,常见的微分算子包括:Sobel算子、Robert算子、Prewitt算子、Laplacian算子、Canny算子。

从名字也可以看出,微分算子,当然涉及到求导,为什么对图像进行求导就可以检测图像中的边缘呢?图像的边缘一般存在灰度变化强烈的地方,只有灰度变化的明显我们才可以从图像中清晰的看到没有一个物体的轮廓,要是一个图像灰度变化很均匀的话,整个图像就变得比较模糊。就如把一副图像均值滤波以后,图像变得模糊了。如何表示一个图像的灰度变化,当然是求导了,梯度值越大表示图像中灰度值变化越剧烈,越有可能是图像的边缘。图像求导包括一阶和二阶,二阶导数比一阶导数在细节方面处理的更好一点,但是也各有利弊,如含有噪声的图像就不适合二阶导,因为他会把图像中的噪声增强,所以需要先做平滑处理。

下面看一下在图像中一阶导和二阶导是怎么求的。在数学中一维函数的一阶导数的概念如下:
图像边缘检测原理

图像是一个二维的函数 f(x,y),所以需要求偏微分:
图像边缘检测原理

因为图像是离散的像素点,所以其中的 Δx、 Δ y 不能无限小,所以按照只能按照像素为单位, Δ x = 1, Δy=1 ;然后可以知道上面的微分方程就变成了如下的形式
图像边缘检测原理

所以一副图像x方向和y方向的梯度就是连个相邻像素之间的差值。那么求整体的梯度公式就如下:
图像边缘检测原理

这样图像的一阶导就完事了,然后同样的,二阶导的推理如下:
图像边缘检测原理

所以令 x = −1,就可以得到
图像边缘检测原理

整体图像的二阶导:
图像边缘检测原理

3:基本边缘检测算子

在介绍完滤波的知识后,学习基本边缘检测算法是一件很轻松的事情,因为边缘检测本质上就是一种滤波算法,区别在于滤波器的选择,滤波的规则是完全一致的

为了更好理解边缘检测算子,我们引入梯度(gradient)这一概念,梯度是人工智能(artificial intelligence)非常重要的一个概念,遍布机器学习、深度学习领域,学过微积分的同学应该知道一维函数的一阶微分基本定义为:

图像边缘检测原理

而我们刚才也提到了,图像的滤波一般是基于灰度图进行的,因此图像此时是二维的,因此我们在看一下二维函数的微分,即偏微分方程:
图像边缘检测原理

由上面的公式我们可以看到,图像梯度即当前所在像素点对于X轴、Y轴的偏导数,所以梯度在图像处理领域我们可以也理解为像素灰度值变化的速度,下面我们举一个简单的例子:
图像边缘检测原理

图中我们可以看到,100与90之间相差的灰度值为10,即当前像素点在X轴方向上的梯度为10,而其它点均为90,则求导后发现梯度全为0,因此我们可以发现在数字图像处理,因其像素性质的特殊性,微积分在图像处理表现的形式为计算当前像素点沿偏微分方向的差值,所以实际的应用是不需要用到求导的,只需进行简单的加减运算

而另一个概念梯度的模则表示f(x, y),在其最大变化率方向上的单位距离所增加的量,即:
图像边缘检测原理

代码演示:

Mat img = imread("D:/OpenCV4.5.1/opencv/sources/doc/js_tutorials/js_assets/lena.jpg", IMREAD_GRAYSCALE);

	if (img.empty())
	{
		cout << "请确认图像文件名称是否正确" << endl;
		return -1;
	}

	// 创建边缘检测滤波器
	Mat kernel2 = (Mat_<float>(1, 3) << -1, 0, 1); // X方向边缘检测滤波器
	Mat kernel3 = (Mat_<float>(3, 1) << -1, 0, 1); // Y方向边缘检测滤波器

	Mat result1, result2, result3, result4, result5, result6;

	// 检测图像边缘

	// 以 [1 0 -1] 检测水平方向边缘
	filter2D(img, result2, CV_32F, kernel2);
	convertScaleAbs(result2, result2);

	// 以 [1 0 -1]' 检测由垂直方向边缘
	filter2D(img, result3, CV_32F, kernel3);
	convertScaleAbs(result3, result3);

	// 相加后整幅图像的边缘梯度
	result6 = result2 + result3;

	//先转换为浮点型,下面求平方开方会报错 类型不对
	result2.convertTo(result4, CV_32F);
	result3.convertTo(result5, CV_32F);

	// 求平方和再开方后整幅图像的边缘梯度
	pow(result4, 2.0, result4);
	pow(result5, 2.0, result5);
	sqrt(result4 + result5, result1);
	// 将 result1 归一化到 [0, 255] 范围内,不然直接显示 会超出255
	Mat result1_normalized;
	normalize(result1, result1_normalized, 0,  255, NORM_MINMAX, CV_8UC1);


	// 显示边缘检测结果
	imshow("X方向边缘", result2);
	imshow("Y方向边缘", result3);
	imshow("X+Y后整幅图像的边缘", result6);
	imshow("sqrt(X²+Y²)整幅图像的边缘", result1_normalized);

	waitKey(0);

图像边缘检测原理

利用Sobel算子一阶和31卷积和13卷积 实现上面一样的功能

    Mat img = imread("D:/OpenCV4.5.1/opencv/sources/doc/js_tutorials/js_assets/lena.jpg", IMREAD_GRAYSCALE);

	if (img.empty())
	{
		cout << "请确认图像文件名称是否正确" << endl;
		return -1;
	}

	Mat resultX, resultY, resultXY;

	//X方向一阶边缘
	Sobel(img, resultX, CV_16S, 1, 0, 1);
	convertScaleAbs(resultX, resultX);

	//Y方向一阶边缘
	Sobel(img, resultY, CV_16S, 0, 1, 1);
	convertScaleAbs(resultY, resultY);

	//整幅图像的一阶边缘
	resultXY = resultX + resultY;

	//显示图像
	imshow("resultX", resultX);
	imshow("resultY", resultY);
	imshow("resultXY", resultXY);


	

图像边缘检测原理
文章来源地址https://www.toymoban.com/news/detail-494236.html

到了这里,关于图像边缘检测原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【canny边缘检测】canny边缘检测原理及代码详解

    【canny边缘检测】canny边缘检测原理及代码详解

    本文通过介绍canny边缘检测原理与代码解析,希望能让大家深入理解canny边缘检测 canny边缘检测主要分为4个部分,本文分别从每一个部分进行解析并附代码。 图像降噪 梯度计算 非极大值抑制 双阈值边界跟踪 图像去噪是进行边缘检测的第一步,通过去噪可以去除图像中的一些

    2024年02月10日
    浏览(6)
  • 【边缘检测】基于matlab八方向sobel图像边缘检测【含Matlab源码 1865期】

    【边缘检测】基于matlab八方向sobel图像边缘检测【含Matlab源码 1865期】

    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划

    2024年02月05日
    浏览(18)
  • 图像分割--点、线和边缘检测

    图像分割是指将图像细分为构成它的子区域或物体 本章算法基于灰度值的两个基本性质之一:不连续性和相似性 就像局部平均平滑一幅图像那样,假设平均处理类似于积分,对于灰度的突变,局部变化可以用微分来检测 使用空间滤波器来计算图像中每个像素位置处的一阶导

    2024年02月09日
    浏览(10)
  • opencv(七)Canny边缘检测和图像轮廓检测

    opencv(七)Canny边缘检测和图像轮廓检测

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 1、检测步骤 1)使用高斯滤波器,以平滑图像,滤掉噪声。 2)计算图像中每个像素点的梯度强度和方向 3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应 4)应用双阈值(

    2024年02月04日
    浏览(8)
  • 数字图像处理:图像分割——边缘检测与区域分割

    数字图像处理:图像分割——边缘检测与区域分割

    1.图像分割:根据图像的某些局部特征(灰度级、纹理、彩色或统计特征等)的相似性和互斥性,将图像分割成若干子区域,在每个子区域内部具有相似(相同或相近)特性,而相邻子区域的特性互斥。所以图像分割是利用图像局部特征的相似性和互斥性。 2.图像分割方法分

    2024年02月05日
    浏览(10)
  • 【OpenCv • c++】图像识别边缘检测 图像差分运算

    【OpenCv • c++】图像识别边缘检测 图像差分运算

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪 边缘检测是图像处理与计算机视觉中最重要的技术之一,其目的是检

    2024年02月03日
    浏览(11)
  • 图像处理——边缘检测(MATLAB实现)

    图像处理——边缘检测(MATLAB实现)

    实验表明,人眼对图像中边缘的识别不是通过设置阈值来分割的,目标的边缘一般表现为灰度(对彩色图像还包括色度)的特变。对于人类的视觉感知,图像边缘对理解图像内容起到关键作用。在灰度渐变的图像中无法区分其灰度变化的边界,但如果边界灰度有突变,则可以区

    2024年02月03日
    浏览(8)
  • 【图像处理】基于matlab蚁群聚类图像边缘检测

    目录 基于matlab蚁群聚类图像边缘检测 蚁群聚类是一种模拟自然界中蚂蚁群体行为的算法,常用于解决优化问题。该算法可以用于图像处理中的边缘检测。下面给出一个基于MATLAB的蚁群聚类图像边缘检测的示例代码。 我们首先读入待处理图像,并将其转换为灰度图像。然后,

    2023年04月22日
    浏览(9)
  • LabVIEW开发3D颈动脉图像边缘检测

    LabVIEW开发3D颈动脉图像边缘检测

    LabVIEW开发3D颈动脉图像边缘检测 近年来,超声图像在医学领域对疾病诊断具有重要意义。边缘检测是图像处理技术的重要组成部分。边缘包含图像信息。边缘检测的主要目的是根据强度和纹理等属性识别图像中均匀区域的边界。超声(US)图像存在视觉感知比其他医学成像系

    2024年02月14日
    浏览(10)
  • 图像处理之梯度及边缘检测算子

    图像处理之梯度及边缘检测算子

    梯度是一个量变化的速度,在数学中通常使用求导、求偏导获取梯度或者某一方向上的梯度。 在数字图像中梯度可以看为像素值分别在x,y方向上的变化速度,因为数字图像的离散型,以及像素是最小处理单元的特性,求数字图像的梯度时,不需要求导,只需要进行加减运算即

    2024年02月16日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包