opencv拉普拉斯边缘锐化cvLaplace算法的运用
来源:互联网 发布:java 修改final变量 编辑:程序博客网 时间:2024/05/16 04:54
Laplacian变换
Laplacian 算子是n维欧几里得空间中的一个二阶微分算子,定义为梯度grad()的散度div()。因此如果f是二阶可微的实函数,则f的拉普拉斯算子定义为:
(1) f的拉普拉斯算子也是笛卡尔坐标系xi中的所有非混合二阶偏导数求和。
(2) 作为一个二阶微分算子,拉普拉斯算子把C函数映射到C函数,对于k ≥ 2。表达式(1)(或(2))定义了一个算子Δ : C(R) → C(R),或更一般地,定义了一个算子Δ : C(Ω) → C(Ω),对于任何开集Ω。
对于阶跃状边缘,魂不附体导数在边缘点出现零交叉,即边缘点两旁二阶导数取异号。据此,对数字图像{f(i,j)}的每个像素,取它关于x轴方向和y轴方向的二阶差分之和,表示为:
函数的拉普拉斯算子也是该函数的黑塞矩阵的迹,可以证明,它具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。如果邻域系统是4 邻域,Laplacian 算子的模板为:
如果邻域系统是8 邻域,Laplacian 算子的模板为:
前面提过,Laplacian 算子对噪声比较敏感,所以图像一般先经过平滑处理,因为平滑处理也是用模板进行的,所以,通常的分割算法都是把Laplacian 算子和平滑算子结合起来生成一个新的模板。
算子要求所有输入和输出图像都必须是单通道的,并且具有相同的图像尺寸或者ROI尺寸。为防止溢出,当输入图像是 8 位的,要求输出图像是 16 位的。可以用函数 cvConvertScale 或 cvConvertScaleAbs 把运算结果(dst)转换为 8 位的
void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 );
src 输入图像
dst 输出图像
aperture_size 核大小(和sobel一样)
本实验通过摄像头来拍摄图片,直接进行边缘锐化。
代码:
#include<cv.h>
#include<highgui.h>
#include<stdio.h>
#include<malloc.h>
///#pragma comment(lib,"cv.lib")
//#pragma comment(lib,"cxcore.lib")
//#pragma comment(lib,"highgui.lib")
//#pragma comment(lib,"cvaux.lib")
int main(int argc,char**argv)
{
CvCapture* capture=NULL;
IplImage* frame =NULL;
IplImage* laplace=NULL;//拉普拉斯转换后的单通道图像
IplImage * ColorImage = NULL;//用于显示最终转换后的图像
capture = cvCaptureFromCAM(-1);
if(!capture)
{
fprintf(stderr,"未发现摄像头");
return 1;
}
cvNamedWindow("Laplace",1);
IplImage *panel[3];//三个通道
while(true)
{
frame = cvQueryFrame(capture);
if(!frame)
{
break;
}
if(!laplace) //创建需要创建的变量
{
for(int i=0;i<3;i++)
panel[i] = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1);
laplace = cvCreateImage(cvGetSize(frame),IPL_DEPTH_16S,1);
ColorImage = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3);
}
cvSplit(frame,panel[0],panel[1],panel[2],NULL); //分割图像到单通道
for(int i=0;i<3;i++)
{
cvLaplace(panel[i],laplace,3); //每一个通道做拉普拉斯变换
cvConvertScaleAbs(laplace,panel[i],1,0); //做类型转换,转换到8U
}
cvMerge(panel[0],panel[1],panel[2],NULL,ColorImage);//合并图像通道
ColorImage->origin = 0;//0--正面对摄像头;1--倒过来对摄像头
cvShowImage("Laplace",ColorImage);
cvWaitKey(10);
}
return 0;
}
效果:
没错!你看到的就是我!背景是我们的秘密实验室。
- opencv拉普拉斯边缘锐化cvLaplace算法的运用
- opencv之拉普拉斯边缘锐化
- opencv实现拉普拉斯锐化的总结
- opencv学习笔记(二十二)拉普拉斯算子cvLaplace()
- 【算法学习】【图像增强】基于拉普拉斯算子的图像锐化
- cvLaplace() 拉普拉斯变换
- 高斯拉普拉斯锐化(边缘检测)vc实现
- 高斯拉普拉斯锐化(边缘检测)vc实现
- opencv cvLaplace()
- 拉普拉斯 锐化
- 拉普拉斯锐化
- 基于OpenCV的Laplace图像锐化算法
- 图像变换 -拉普拉斯变换(cvLaplace)
- 基于拉普拉斯算子的图像锐化
- 实验五图像的拉普拉斯锐化
- 基于拉普拉斯算子的图像锐化
- 利用拉普拉斯算子进行图像的锐化
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
- PE文件结构详解(四)PE导入表
- 基于STM32的学习型通用红外遥控设备的设计实现(三)
- (10) 反射(基石class类、Constructor类、Field类、Method类、数组的反射、HashCode的分析)
- mongodb操作
- 公民身份号码
- opencv拉普拉斯边缘锐化cvLaplace算法的运用
- [leetcode] Valid Parentheses
- 基于STM32的学习型通用红外遥控设备的设计实现(四)
- linux下打开windows txt文件中文乱码问题
- NetBeans 下使用EJB的例子
- 黑马程序员---Method,数组反射和反射的作用
- Java系列之JDBC和ODBC之间的区别与联系
- 优化算法——拟牛顿法之L-BFGS算法
- 字符串倒转