首页 > 编程知识 正文

拉普拉斯变换公式表,拉普拉斯定理

时间:2023-05-04 18:11:36 阅读:270449 作者:2428

使用中心为5的8邻域拉普拉斯算子与图像卷积可以达到锐化增强图像的目的,拉普拉斯算子如下图所示:

Mat image = imread("test.jpg", 1);imshow("原图像", image);Mat imageEnhance;Mat kernel = (Mat_<uchar>(3, 3) << 0, -1, 0, 0, 5, 0, 0, -1, 0);filter2D(image, imageEnhance, CV_8UC3, kernel);imshow("拉普拉斯算子增强效果", imageEnhance);

 拉普拉斯算子还可以表示成模板的形式 

Mat image = imread("test.jpg");imshow("image", image);Mat kernel = (Mat_<uchar>(3, 3) << 1, 1, 1, 1, -8, 1, 1, 1, 1); //0, 1, 0, 1, -4, 1, 0, 1, 0 //0, -1, 0, -1, 4, -1, 0, -1, 0 //-1, 1, -1, 1, 8, -1, -1, 1, -1Mat matlaplacian;filter2D(image, matlaplacian, CV_8UC3, kernel);imshow("matlaplacian", matlaplacian);

 

 参考:https://blog.csdn.net/li_wen01/article/details/72864291

Sobel 算子 ,其基础来自于一个事实,即在边缘部分,像素值出现”跳跃“或者较大的变化。如果在此边缘部分求取一阶导数,你会看到极值的出现。正如下图所示:

 如果在边缘部分求二阶导数会出现什么情况?

 你会发现在一阶导数的极值位置,二阶导数为0。所以我们也可以用这个特点来作为检测图像边缘的方法。 但是, 二阶导数的0值不仅仅出现在边缘(它们也可能出现在无意义的位置),但是我们可以过滤掉这些点

 Laplacian 算子

从以上分析中,我们推论二阶导数可以用来 检测边缘 。 因为图像是 “2维”, 我们需要在两个方向求导。使用Laplacian算子将会使求导过程变得简单。Laplacian 算子 的定义:

OpenCV函数 Laplacian 实现了Laplacian算子。 实际上,由于 Laplacian使用了图像梯度,它内部调用了 Sobel 算子。 Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );函数接受了以下参数:src_gray: 输入图像。dst: 输出图像ddepth: 输出图像的深度。 因为输入图像的深度是 CV_8U ,这里我们必须定义 ddepth = CV_16S 以避免外溢。kernel_size: 内部调用的 Sobel算子的内核大小,此例中设置为3。scale, delta 和 BORDER_DEFAULT: 使用默认值 Mat image = imread("test.jpg", 1);imshow("原图像", image);/// 使用高斯滤波消除噪声GaussianBlur(image, image, Size(3, 3), 0, 0, BORDER_DEFAULT);/// 使用Laplace函数Mat imageEnhance;int kernel_size = 3;int scale = 1;int delta = 0;int ddepth = CV_32FC3;Laplacian(image, imageEnhance, ddepth, kernel_size, scale, delta, BORDER_DEFAULT);Mat abs_dst;convertScaleAbs(imageEnhance, abs_dst);imshow("拉普拉斯算子增强效果", imageEnhance);

 

Mat src, src_gray, dst; /// 装载图像src = imread("test.jpg", 1);imshow("原图", src);/// 使用高斯滤波消除噪声GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);/// 转换为灰度图cvtColor(src, src_gray, CV_RGB2GRAY);/// 使用Laplace函数Mat abs_dst;int kernel_size = 3;int scale = 1;int delta = 0;int ddepth = CV_16S;char* window_name = "Laplace Demo";Laplacian(src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT);convertScaleAbs(dst, abs_dst);/// 显示结果imshow(window_name, abs_dst);

 参考:

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/laplace_operator/laplace_operator.html

https://blog.csdn.net/dcrmg/article/details/53677739 

https://blog.csdn.net/iefenghao/article/details/84843318##

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。