拉帕拉斯变换用来检测物体的边缘信息
在图像平坦(灰度值无变换的区域),拉普拉斯滤波后的图像在该区域的强度值为0.在图像灰度值剧烈变换的区域(边缘),拉普拉斯滤波后的图像的强度值(绝对值)相对较大。
物体边缘一般在强度值的零交点(注意:并不是在强度值为0的点,而是在强度值从正变换到负,或从负变换到正的过程中,隐含存在的为0的亚像素级的点)。

拉普拉斯变换变换可用于图像增强(原图像减去拉普拉斯变换的图像),原理大体为:
图像相对平坦的区域拉普拉斯变换后的值约等于0。像素(原)-0=像素(原),即该区域图像几乎没有变化。
在图像中强度值变换剧烈的地方,通常是物体的边缘处,拉普拉斯变换后的该区域的强度值(绝对值)较大。那么 像素(原)-像素(变换后),肯定会发生变化。例如:150(原)-50(变换后的 )=100,该点处的像素变黑。(拉普拉斯变换后的图像为32位浮点数,需要转换为8位的灰度图。本文转换后,负值和0值,统一变为0,正值仍为正值。具体看下面的代码)
这就相当于,拿了一根黑色的笔,在物体的边缘处描了一圈,让物体的边缘更加凸显(图像增强)。

因为拉普拉斯变换(滤波)的凸显边缘(高频信息)的特性,其属于高通滤波
代码实现
源.cpp

#include"Laplacain.h"
int main()
{
	cv::Mat image = cv::imread("D:/images/111.jpg", 0);
	Laplacain h;
	//拉普拉斯滤波
	h.computeLaplacian(image);
	//滤波后图像转CV_8U格式
	cv::Mat result=h.getLaplacianImage(1);
	cv::namedWindow("原图", CV_WINDOW_FREERATIO);
	cv::namedWindow("拉普拉斯增强", CV_WINDOW_FREERATIO);
	cv::namedWindow("拉普拉斯", CV_WINDOW_FREERATIO);
	cv::imshow("原图", image);
	//减去拉普拉斯变换图片(CV_8U)格式
	//平坦的图像区域不变,边缘区域增强(边缘线条变黑)
	image = image - result;
	cv::imshow("拉普拉斯增强", image);
	cv::imshow("拉普拉斯", result);
	cv::waitKey(0);
}

Laplacain.h

#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\core\core.hpp>

class Laplacain
{
private:
	cv::Mat image;
	cv::Mat laplacian;
	int aperture;
public:
	Laplacain() :aperture(3){}
	//设置核的大小
	void setAperture(int i)
	{
		aperture = i;
	}
	//拉普拉斯滤波
	cv::Mat computeLaplacian(const cv::Mat& image)
	{
		cv::Laplacian(image, laplacian, CV_32F, aperture);
		this->image = image.clone();
		return laplacian;
	}
	//转换为可显示的灰度图格式
	cv::Mat getLaplacianImage(double scale = -1.0)
	{
		cv::Mat laplaceImage;
		if (scale < 0)
		{
			double lapmin, lapmax;
			cv::minMaxLoc(laplacian, &lapmin, &lapmax);
			scale = 127 / std::max(-lapmin, lapmax);
			laplacian.convertTo(laplaceImage, CV_8U, scale, 255);
		}
		else
		{
			//0(平坦地区),在边缘处的绝对值大
			//通过适当的设置scale和beta(本例-50),可以改变增强图像效果
			// newgray=oldgray*scale+(-50)。计算后值大于255设为255,小于0为0。
			laplacian.convertTo(laplaceImage, CV_8U, scale, -50);
		}
		
		
		return laplaceImage;
	}
};

结果:

Python 图像拉普拉斯变换 图像的拉普拉斯变换_opencv


Python 图像拉普拉斯变换 图像的拉普拉斯变换_opencv_02


Python 图像拉普拉斯变换 图像的拉普拉斯变换_opencv_03