【C++】图像处理中的微分算子原理与实现(四)

简介: 一阶微分边缘算子:经典算子比如:Roberts(罗伯特)、Prewitt(普鲁伊特)、Sobel(索贝尔),Canny(坎尼)等。二阶微分边缘算子:Laplacian算子,LoG( Laplace of Gaussian function)边缘检测算子和DoG(Difference of Gaussian)高斯差分算子。

Laplace算子

1812年,拉普拉斯(Laplace, 1749 – 1827)发表了重要的《概率分析理论》一书,在该书中总结了当时整个概率论的研究,论述了概率在选举审判调查、气象等方面的应用,导入「拉普拉斯变换」等。

拉普拉斯(Laplacian) 算子是  维欧几里德空间中的一个二阶微分算子,常用于图像增强领域和边缘提取。它通过灰度差分计算邻域内的像素。


算法基本流程


1)判断图像中心像素灰度值与它周围其他像素的灰度值,如果中心像素的灰度更高,则提升中心像素的灰度;反之降低中心像素的灰度,从而实现图像锐化操作;

2)在算法实现过程中,Laplacian算子通过对邻域中心像素的四方向或八方向求梯度,再将梯度相加起来判断中心像素灰度与邻域内其他像素灰度的关系;

3)最后通过梯度运算的结果对像素灰度进行调整。

Laplacian算子分为四邻域和八邻域,四邻域是对邻域中心像素的四个方向求梯度,八邻域是对八个方向求梯度。

其中,Laplacian算子四邻域模板如下所示:

3c4869acc340431c8bf1e4105fc560ff.gif

Laplacian算子的八邻域模板如下所示:

5a210b4e5d3f4852b013dda0ca28fe1e.gif

通过Laplacian算子的模板可以发现:

1)当邻域内像素灰度相同时,模板的卷积运算结果为0;

2)当中心像素灰度高于邻域内其他像素的平均灰度时,模板的卷积运算结果为正数;

3)当中心像素的灰度低于邻域内其他像素的平均灰度时,模板的卷积为负数。对卷积运算的结果用适当的衰弱因子处理并加在原中心像素上,就可以实现图像的锐化处理。

voidquick_opencv::laplacian_Demo(Mat&img)
{
Matsrc_gray;
intkernel_size=3;
constchar*window_name="Laplacian Demo";
cvtColor(img, src_gray, COLOR_RGB2GRAY);
namedWindow(window_name, WINDOW_AUTOSIZE);
Matdst, abs_dst;
Laplacian(src_gray, dst, CV_16S, kernel_size);
convertScaleAbs(dst, abs_dst);
imshow(window_name, abs_dst);
}
目录
相关文章
|
2月前
|
C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(二)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
编译器 C++ 开发者
【C++】深入解析C/C++内存管理:new与delete的使用及原理(三)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
存储 C语言 C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(一)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
C++
C++番外篇——虚拟继承解决数据冗余和二义性的原理
C++番外篇——虚拟继承解决数据冗余和二义性的原理
42 1
|
6月前
|
存储 自然语言处理 安全
C++ STL标准库 《string原理与实战分析》
C++ STL标准库 《string原理与实战分析》
95 0
|
7月前
|
小程序 编译器 Linux
C++ 异常原理:以一个小程序为例
作者在调查某个 bug 时涉及到 C++ 异常,借此机会以本文把 C++ 异常机制梳理清楚供大家参考。
|
7月前
|
设计模式 算法 C++
【C++】STL之迭代器介绍、原理、失效
【C++】STL之迭代器介绍、原理、失效
137 2
|
6月前
|
大数据 C++ 索引
C++ STL标准库 《vector向量原理与实战分析》
C++ STL标准库 《vector向量原理与实战分析》
58 0
|
6月前
|
C++ 容器
C++ STL标准库 《queue单向队列原理与实战分析》
C++ STL标准库 《queue单向队列原理与实战分析》
49 0
|
7月前
|
编译器 C++ 容器
C++模板的原理及使用
C++模板的原理及使用