• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

OpenCV图像锐化---USM锐化和Laplace锐化

武飞扬头像
Vaccae
帮助1

学更好的别人,

做更好的自己。

——《微卡智享》

学新通

本文长度为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
  1.  
    Mat src = imread("E:/DCIM/ryb/fx4.bmp");
  2.  
    resize(src, src, Size(), 0.3, 0.3);
  3.  
    imshow("src", src);
  4.  
     
  5.  
     
  6.  
    //USM锐化
  7.  
    Mat blur_usm, dst_usm;
  8.  
    cv::GaussianBlur(src, blur_usm, Size(0, 0), 25);
  9.  
    cv::addWeighted(src, 1.5, blur_usm, -0.5, 0, dst_usm);
  10.  
    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
  1.  
    Mat src = imread("E:/DCIM/ryb/fx4.bmp");
  2.  
    resize(src, src, Size(), 0.3, 0.3);
  3.  
    imshow("src", src);
  4.  
     
  5.  
        //Laplacian锐化
  6.  
        Mat blur_laplace, dst_laplacian;
  7.  
        cv::Laplacian(src, blur_laplace, -1);
  8.  
    cv::addWeighted(src, 1, blur_laplace, -0.5, 0, dst_laplacian);
  9.  
        imshow("dst_laplacian", dst_laplacian);

其中Laplacian方法也可以用filter2D来实现,定义一个kernel卷积,如下:

  1.  
    Mat src = imread("E:/DCIM/ryb/fx4.bmp");
  2.  
    resize(src, src, Size(), 0.3, 0.3);
  3.  
    imshow("src", src);
  4.  
     
  5.  
    //Laplacian锐化
  6.  
    Mat blur_laplace, dst_laplacian;
  7.  
        Mat kernel = (Mat_<float>(33) << 0101-41010);
  8.  
        cv::filter2D(src, blur_laplace, CV_8UC3, kernel);
  9.  
    cv::addWeighted(src, 1, blur_laplace, -0.5, 0, dst_laplacian);
  10.  
    imshow("dst_laplacian", dst_laplacian);

Demo完整代码

  1.  
    #include <opencv2/opencv.hpp>
  2.  
    #include <iostream>
  3.  
     
  4.  
     
  5.  
    using namespace cv;
  6.  
    using namespace std;
  7.  
     
  8.  
     
  9.  
    int main(int argc, char** argv) {
  10.  
     
  11.  
     
  12.  
    try
  13.  
    {
  14.  
     
  15.  
     
  16.  
    Mat src = imread("E:/DCIM/ryb/fx4.bmp");
  17.  
    resize(src, src, Size(), 0.3, 0.3);
  18.  
    imshow("src", src);
  19.  
     
  20.  
     
  21.  
    //USM锐化
  22.  
    Mat blur_usm, dst_usm;
  23.  
    cv::GaussianBlur(src, blur_usm, Size(0, 0), 25);
  24.  
    cv::addWeighted(src, 1.5, blur_usm, -0.5, 0, dst_usm);
  25.  
    imshow("dst_usm", dst_usm);
  26.  
     
  27.  
     
  28.  
    //Laplacian锐化
  29.  
    Mat blur_laplace, dst_laplacian;
  30.  
    //Mat kernel = (Mat_<float>(3, 3) << 0, 1, 0, 1, -4, 1, 0, 1, 0);
  31.  
    //cv::filter2D(src, blur_laplace, CV_8UC3, kernel);
  32.  
     
  33.  
     
  34.  
    cv::Laplacian(src, blur_laplace, -1);
  35.  
     
  36.  
     
  37.  
    cv::addWeighted(src, 1, blur_laplace, -0.5, 0, dst_laplacian);
  38.  
    imshow("dst_laplacian", dst_laplacian);
  39.  
     
  40.  
     
  41.  
     
  42.  
     
  43.  
    waitKey(0);
  44.  
    return 0;
  45.  
    }
  46.  
    catch (const std::exception& ex)
  47.  
    {
  48.  
    cout << ex.what() << endl;
  49.  
    }
  50.  
    }
学新通

学新通

学新通

学新通

学新通

学新通

局部对比效果

学新通

学新通

学新通

学新通

往期精彩回顾

学新通

Android Studio 2021.1.1的getNdkVersion的Bug及解决办法


学新通

笔记--解决Android使用retrofit2 OkHttp3短时间内大量通讯提示Socket Failed:EMFILE


学新通

笔记---Linux安装OpenCV及VSCode的配置编译

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgagjhf
系列文章
更多 icon
同类精品
更多 icon
继续加载