- 🚀 个人简介:CSDN「博客新星」TOP 10 , C/C++ 领域新星创作者
- 💟 作 者:锡兰_CC ❣️
- 📝 专 栏:【OpenCV • c++】计算机视觉
- 🌈 若有帮助,还请关注➕点赞➕收藏,不行的话我再努努力💪💪💪
文章目录
什么是边缘检测
边缘检测是图像处理与计算机视觉中最重要的技术之一,其目的是检测识别出图像中亮度变化剧烈的像素点构成的集合。图像边缘的正确检测对于分析图像中的内容、实现图像中物体的分割、定位等具有重要的作用。边缘检测大大减少了源图像的数据量,剔除了与目标不相干的信息,保留了图像重要的结构属性。
边缘检测算子是利用图像边缘的突变性质来检测边缘的,通常情况下边缘检测有以下三种类型。
- 一阶微分:以一阶微分为基础的边缘检测,通过计算图像的梯度值来检测图像边缘,如
Sobel
算子,Prewitt
算子,Roberts
算子及差分边缘检测。 - 二阶微分:以二阶微分为基础的边缘检测,通过寻求二阶导数中的过零点来检测边缘,如拉普拉斯算子,高拉普拉斯算子,
Canny
算子边缘检测。 - 混合一阶微分和二阶微分:以混合一阶微分和二阶微分为基础的边缘检测,综合利用一阶微分和二阶微分的特征,如
Marr-Hildreth
边缘检测算子。
什么是 Laplace 算子
Q:****什么是Laplace 算子?
A:Laplace 算子是最简单的各向同性二阶微分算子,具有旋转不变性,根据函数微分特性,该像素点值的二阶微分为零的点为边缘点。对于图像中灰度变化剧烈的区域,拉普拉斯算子能实现其边缘检测。拉普拉斯算子利用二阶微分特性与峰值间的过零点来确定边缘的位置,对奇异点或者边界点更为敏感,因此常用于图像锐化处理中。
图像的锐化操作的主要目的是突出图像的细节或者增强被模糊的图像细节,可实现灰度反差增强,同时使图像变得清晰。微分运算可以实现图像细节的突出,积分运算或加权平均可使图像变模糊。
对于原始图像
f(x,y)
,锐化操作可以通过拉普拉斯算子对源图像进行处理,进行微分运算操作后产生描述灰度突变的图像,再将拉普拉斯图像与原始图像叠加进而产生锐化图像。
拉普拉斯边缘检测算子和
Sobel
算子
Prewitt
算子不同,没有对图像进行平滑处理,所以会对噪声产生较大的相应,会将噪声作为边缘,得不到有方向的边缘,由于拉普拉斯算子只有一个卷聚合,所以计算成本比其他算子要低很多。
参考代码
对于拉普拉斯边缘检测算子,
OpenCV
提供了库函数:
voidLaplacian(InputArray src, OutputArray dst,int ddepth,int ksize =1,double scale =1,double delta =0,int borderType = BORDER_DEFAULT);
其中,
src
代表输入图像,
dst
表示输出图像,
ddepth
代表输出图像的数据类型(位深),
ksize
代表拉普拉斯核的类型,
scale
代表比例系数,
delta
代表平移系数,
borderType
代表边界扩充类型。
#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/types_c.h>#include<opencv2/imgproc.hpp>#include<iostream>usingnamespace std;usingnamespace cv;intmain(){
cv::Mat srcImage = cv::imread("C:\\Users\\86173\\Desktop\\cc.png");if(!srcImage.data)return1;
cv::imshow("原图", srcImage);
cv::Mat resultImage;//高斯平滑
cv::GaussianBlur(srcImage, srcImage, cv::Size(3,3),0,0, cv::BORDER_DEFAULT);//拉普拉斯变换
cv::Laplacian(srcImage, resultImage, CV_16S,3);
cv::convertScaleAbs(resultImage, resultImage);
cv::imshow("拉普拉斯", resultImage);
cv::waitKey();return0;}
其他:
更多专栏订阅:
- 👍 【开卷数据结构】
- 💛 【备战蓝桥,冲击省一】
- 💕 从零开始的 c++ 之旅
- 💖 【OpenCV • c++】计算机视觉
版权归原作者 锡兰_CC 所有, 如有侵权,请联系我们删除。