OpenCV学习笔记:图像锐化

一、锐化

(1)基础知识

①锐化滤波器用于突出显示图像的边界和其他精细细节。

②锐化是基于一阶导数和二阶导数的,一幅图像的一阶导数计算〔图像强度梯度〕的逼近,而二阶导数定义为该梯度的散度。

③由于数字图像处理研究离散量(像素值),因而将一阶导数和二阶导数离散过程用于锐化处理。

▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂
◆ 一阶导数会产生粗的图像边缘,因此广泛应用于图像边缘。
◆ 二阶导数对精细细节的响应更好,常被应用于图像增强。
▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂

(2)常用算子

用于获取导数的两种常用算子是Sobel和Laplacian。

① Sobel算子计算图像I的一阶导数,公式如下:

OpenCV学习笔记:图像锐化_第1张图片

通过整合两个梯度逼近值,可以获得如下的Sobel梯度幅值:

② 一幅图像的离散Laplacian值,可以作为下述核的卷积给出:

二、锐化算法

(1)Sobel算法

void Sobel(InputArray src,OutputArray dst,int ddepth,int dx,int dy,int ksize=3,double scale=1,double delta=0,int borderType=BORDER_DEFAULT);

说明:
①该函数使用Sobel算子计算图像src的一阶导数、二阶导数、三阶导数或混合图像导数。
②参数ddepth表示输出图像的深度,值为-1时。使用核输入图像相同的深度。
③用ksize表示核的大小,希望的导数阶为dx和dy。
④使用scale可以建立用于计算导数值的尺度因子。
⑤参数borderType表示边界类型,在dst中存储计算结果之前可以增加一个delta值。

(2)Scharr算法

void Scharr(InputArray src,OutputArray dst,int ddepth,int ksize=1,double scale=1,double delta=0,int borderType=BORDER_DEFAULT);

说明:
①该函数计算了一个大小为3×3的核更精确的导数。
②Scharr函数与Sobel函数等价。

(3)Laplacian算法

void Laplacian(InputArray src,OutputArray dsft,int ddepth,int ksize=1,double scale=1,double delta=0,int borderType=BORDER_DEFAULT);

①该函数计算图像的Laplacian值。
②除了参数ksize之外,所有的参数都等同于函数的Sobel和Scharr中的参数。
③ksize>1时,使用一个3×3的核(中心值为-4,4个角上的值为0,其余系数值为1)对该图像滤波来计算该Laplacian值。

三、代码实现

//27.08.2019 by yh

#include "opencv2/opencv.hpp"

using namespace cv;

int main()
{
     
	//读取源文件
	Mat src;
	src = imread("C:\\Users\\86151\\Pictures\\图像处理常用图片\\CBSD68\\295087.png");


	//应用Sobel核Laplacian
	Mat dst,dst2;
	Sobel(src,dst,-1,1,1);
	Laplacian(src,dst2,-1);

	//显示结果
	namedWindow("ORIGINAL",WINDOW_NORMAL);
	imshow("ORIGINAL",src);
	namedWindow("SOBEL", WINDOW_NORMAL);
	imshow("SOBEL",dst);
	namedWindow("LAPLACIAN", WINDOW_NORMAL);
	imshow("LAPLACIAN", dst2);

	cvWaitKey();
	return 0;
}

四、运行结果

OpenCV学习笔记:图像锐化_第2张图片

End && Enjoy!

你可能感兴趣的:(OpenCV学习笔记,OpenCV,图像锐化,Sobel,Laplacian)