OpenCV图像锐化---USM锐化和Laplace锐化
学更好的别人,
做更好的自己。
——《微卡智享》
本文长度为1832字,预计阅读4分钟
前言
图像锐化 (image sharpening) 是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。
实现效果
原图
USM锐化
Laplace锐化
上面三图从左到右分别是原图、USM锐化、Laplace锐化后的效果,从效果上看,USM锐化和Laplace锐化都将原图的文字变得更清晰了,不过Laplace锐化的效果要更好一点。
锐化介绍
微卡智享
USM锐化
USM 锐化增强算法(Unsharpen Mask),是图像卷积处理实现锐化常用的算法,这种锐化的方法就是对原图像先做一个高斯模糊,然后用原来的图像减去一个系数乘以高斯模糊之后的图像,然后再把值Scale到0~255的RGB像素值范围之内。基于USM锐化的方法可以去除一些细小的干扰细节和噪声,比一般直接使用卷积锐化算子得到的图像锐化结果更加真实可信。
USM锐化公式:
(源图像– w*高斯模糊)/(1-w)
w表示权重(0.1~0.9),默认为0.6
# | 实现方式 |
---|---|
1 | 高斯模糊GaussianBlur |
2 | 图像加权混合addWeighted |
-
Mat src = imread("E:/DCIM/ryb/fx4.bmp");
-
resize(src, src, Size(), 0.3, 0.3);
-
imshow("src", src);
-
-
-
//USM锐化
-
Mat blur_usm, dst_usm;
-
cv::GaussianBlur(src, blur_usm, Size(0, 0), 25);
-
cv::addWeighted(src, 1.5, blur_usm, -0.5, 0, dst_usm);
-
imshow("dst_usm", dst_usm);
其中高斯模糊中的Size默认为Size(0,0),sigma的值一般用5,15,25即可,我这里用的是25,这样和Laplace对比比较明显,后面改为5后,两个效果比较接近了。
Laplace锐化
Laplace算子属于空间锐化滤波操作。由于Laplacian算子使用了图像梯度,它内部的代码其实是调用了Sobel算子的。
公式这里就不再列了,我们知道Laplace算子常用的一个滤波器如下:
# | 实现方式 |
---|---|
1 | 拉普拉斯滤波Laplacian |
2 | 图像加权混合addWeighted |
-
Mat src = imread("E:/DCIM/ryb/fx4.bmp");
-
resize(src, src, Size(), 0.3, 0.3);
-
imshow("src", src);
-
-
//Laplacian锐化
-
Mat blur_laplace, dst_laplacian;
-
cv::Laplacian(src, blur_laplace, -1);
-
cv::addWeighted(src, 1, blur_laplace, -0.5, 0, dst_laplacian);
-
imshow("dst_laplacian", dst_laplacian);
其中Laplacian方法也可以用filter2D来实现,定义一个kernel卷积,如下:
-
Mat src = imread("E:/DCIM/ryb/fx4.bmp");
-
resize(src, src, Size(), 0.3, 0.3);
-
imshow("src", src);
-
-
//Laplacian锐化
-
Mat blur_laplace, dst_laplacian;
-
Mat kernel = (Mat_<float>(3, 3) << 0, 1, 0, 1, -4, 1, 0, 1, 0);
-
cv::filter2D(src, blur_laplace, CV_8UC3, kernel);
-
cv::addWeighted(src, 1, blur_laplace, -0.5, 0, dst_laplacian);
-
imshow("dst_laplacian", dst_laplacian);
Demo完整代码
-
-
-
-
-
using namespace cv;
-
using namespace std;
-
-
-
int main(int argc, char** argv) {
-
-
-
try
-
{
-
-
-
Mat src = imread("E:/DCIM/ryb/fx4.bmp");
-
resize(src, src, Size(), 0.3, 0.3);
-
imshow("src", src);
-
-
-
//USM锐化
-
Mat blur_usm, dst_usm;
-
cv::GaussianBlur(src, blur_usm, Size(0, 0), 25);
-
cv::addWeighted(src, 1.5, blur_usm, -0.5, 0, dst_usm);
-
imshow("dst_usm", dst_usm);
-
-
-
//Laplacian锐化
-
Mat blur_laplace, dst_laplacian;
-
//Mat kernel = (Mat_<float>(3, 3) << 0, 1, 0, 1, -4, 1, 0, 1, 0);
-
//cv::filter2D(src, blur_laplace, CV_8UC3, kernel);
-
-
-
cv::Laplacian(src, blur_laplace, -1);
-
-
-
cv::addWeighted(src, 1, blur_laplace, -0.5, 0, dst_laplacian);
-
imshow("dst_laplacian", dst_laplacian);
-
-
-
-
-
waitKey(0);
-
return 0;
-
}
-
catch (const std::exception& ex)
-
{
-
cout << ex.what() << endl;
-
}
-
}
局部对比效果
完
往期精彩回顾
Android Studio 2021.1.1的getNdkVersion的Bug及解决办法
笔记--解决Android使用retrofit2 OkHttp3短时间内大量通讯提示Socket Failed:EMFILE
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgagjhf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24