使用中心为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##