OpenCV拉普拉斯变换

拉帕拉斯变换用来检测物体的边缘信息
在图像平坦(灰度值无变换的区域),拉普拉斯滤波后的图像在该区域的强度值为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;
	}
};

结果:
这里写图片描述
这里写图片描述
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值