拉普拉斯是一种基于图像倒数的高通线型滤波器,计算二阶导数以衡量图像的弯曲度。
2D函数的拉普拉斯变换定义为他的二阶导数之和
拉普拉斯核如下:
0 | 1 | 0 |
1 | -4 | 1 |
0 | 1 | 0 |
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
class LaplacianZC
{
private:
Mat img;//原图
Mat laplace;//包含Laplacian的32位浮点图像
int aperture;//卷积核的大小
public:
LaplacianZC():aperture(3) { }
//设置卷积核的大小
void setAperture(int a)
{
aperture=a;
}
//计算浮点数Laplacian
Mat computeLaplacian(const Mat & image) {
Laplacian(image,laplace,CV_32F,aperture);
img=image.clone();
return laplace;
}
Mat getLaplacianImage(double scale=-1.0){
if(scale<0)
{
double lapmin,lapmax;
minMaxLoc(laplace,&lapmin,&lapmax);
scale=127/std::max(-lapmin,lapmax);
}
Mat laplaceImage;
laplace.convertTo(laplaceImage,CV_8U,scale,128);
return laplaceImage;
}
};
int main()
{
Mat image=imread("g:\\carlicense\\2.jpg");
LaplacianZC laplacian;
laplacian.setAperture(7);
Mat flap=laplacian.computeLaplacian(image);
Mat laplace=laplacian.getLaplacianImage();
imshow("a",flap);
imshow("b",laplace);
waitKey();
return 0;
}
运行结果: