图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码)

(y(m,n)=x(m,n)+lambda*z(m,n))

其中(x(m,n))是处理前图片,(y(m,n))是锐化后,(z(m,n))代表增强图像的边缘和细节(高频部分),(lambda)是增强因子,如下图所示:

1.laplacian 增强

def laplacianSharpen(im, alpha):

k = np.array([[0, 0, 0, ], [0, 1, 0], [0, 0, 0]])+alpha *

np.array([[0, -1, 0], [-1, 4, -1], [0, -1, 0]])

# k = np.array([[-1, -1, -1], [-1, 9, -1], [-1, -1, -1]])

dst = cv2.filter2D(im, -1, k)

return dst

注:当然(lambda)也可以不固定为1,原图像加上(lambda)乘拉普拉斯锐化的结果,(lambda)控制增强效果,如果觉得过于锐利,可以调小一点。

2.usm和改进usm

usm(unsharp masking):将原图像低通滤波后产生一个模糊图像,原图像与这模糊图像相减得到保留高频成份的图像。再将高频图像用一个参数放大后与原图像叠加,得到增强的图像。

def usmSharpen(src,m,sigma,amount):

blur_img = cv2.GaussianBlur(src, (m, m), sigma)

dst = cv2.addWeighted(src, 1+amount, blur_img, -1*amount, 0)

return dst

improved usm:

1.假设原图为S,以半径r计算高斯模糊图G

2.value=S(i,j)-G(i,j)

3.锐化后的图为D:

[D(i,j)=left {egin{aligned} S(i,j)+amount*value, && abs(value)>threshold \ S(i,j), & & otherwise end{aligned} ight.

]def improveUSM(src, m, sigma, threshold, amount):

blur = cv2.GaussianBlur(src, (m, m), sigma)

diff = src-blur

mask = diff < threshold

dst = cv2.addWeighted(src, 1+amount, blur, -1*amount, 0)

res = src*mask+dst*(1-mask)

return res

注:在使用改进usm时发现出现黑点(尤其是参数高斯模糊半径m变很大时),因为对黑暗区域的增强带来的感觉上更加明显(韦伯定律),所以可以对value为负值时使用更小的增强因子。

def improveUSM2(src, m, sigma, threshold, amount):

'''

reduce black specles

'''

blur = cv2.GaussianBlur(src, (m, m), sigma)

diff = src-blur

mask = cv2.convertScaleAbs(diff) < threshold

dst = np.zeros_like(src, dtype=np.int16)

src = src.astype(np.int16)

blur = blur.astype(np.int16)

diff2 = src-blur

mask2 = diff2 < 0

neg = diff2*mask2

pos = diff2*(1-mask2)

dst = src+amount*pos+amount*0.5*neg

dst = dst.clip(0, 255)

return dst2

另一种usm的优化:

根据阈值比较结果,处理更平滑自然(主要是对mask做了模糊处理)

def improveUSM3(src, m, sigma, threshold, amount):

blur = cv2.GaussianBlur(src, (m, m), sigma)

diff = src-blur

mask = diff < threshold

dst = cv2.addWeighted(src, 1+amount, blur, -1*amount, 0)

mask = mask.astype(np.int16)

mask2 = cv2.GaussianBlur(mask, (m, m), sigma)

res = src*mask2+dst*(1-mask2)

return res

3.其他改进

two drawbacks of USM:

1.noise amplification(噪声也属于高频部分,所以增强细节同时会增强噪声)

2.overshoot effect(见下图)

改进思路,无非是从(lambda)和(z(m,n))两个方面去优化,下面几篇论文,第一篇改进usm的根据阈值截断处理,使用更平滑的处理方式,第二篇是从改变(z(m,n))的计算上,使用非线性核(二次滤波器和多项式滤波器)。第三篇和第四篇是从优化(lambda)上,使得增强因子和位置相关,而非全局的一个常数:

paper:An image sharpening algorithm based on fuzzy logic

paper:Nonlinear unsharp masking methods for image contrast enhancement

paper:rational unsharp masking technique

paper:Image Enhancement via Adaptive Unsharp Masking

不过上述方法计算复杂,所以具体应用时还应取舍。

c语言bmp图片拉普拉斯锐化,图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码)...相关推荐

  1. 图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码)

    y(m,n)=x(m,n)+λ∗z(m,n)y(m,n)=x(m,n)+λ∗z(m,n) 其中x(m,n)x(m,n)是处理前图片,y(m,n)y(m,n)是锐化后,z(m,n)z(m,n)代表增强图 ...

  2. C语言数字图像处理---3.3图像锐化

    本篇将介绍图像增强范畴中的图像锐化部分,以经典的LAPLACE锐化和Photoshop USM锐化为例,通过C语言编程实现,教会大家这两种锐化算法,增强大家对图像锐化的理解以及对图像增强范畴的认知. ...

  3. 基于Python的图像拉普拉斯变化/图像锐化实现

    博主本学习选修数字图像处理课程,用到的教材是冈萨雷斯的<数字图像处理>,作业要求完成图像拉普拉斯变化,虽然用Matalb比较容易就能实现,但还是想尝试用python完成. Python+O ...

  4. C语言 BMP图片的中值滤波

    工作用到了这方面的知识,记录一下,用大白话说明一下. 一.BMP图片 1.一个BMP格式的图片可以分为三块,文件头信息,位图信息,位图数据(有的带调色板,可选). BMP文件头:    存储了该文件的 ...

  5. C语言 BMP图片处理

    http://feng88724.iteye.com/blog/316651 BMP是bitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图.它一般由4部分组成:文件头信息块.图 ...

  6. C语言bmp图片读写,画点,画线

    bmp文件信息头.文件头结构体: #pragma pack(1)typedef struct {uint16_t bfType;//位图类别,根据不同的操作系统而不同,在Windows中,此字段的值总 ...

  7. c语言bmp图片合并,C语言实现对bmp格式图片打码

    相信大家看到上面的标题一定觉的是上面高大上的技术,其实很简单. 前提准备:一张bmp格式的图片,如果没有的话,可以用Windows的画图软件来才裁剪.设置像素大小为(1024,768): 程序原理:将 ...

  8. mysql显示bmp图片_BMP格式图像的显示

    使用多文档编程 也可以使用单文档编程 建立一个DIB图像的显示类 ImageDib 成员变量: 4个指针: LPBYTE m_lpDib;      //指向DIB的指针 LPBITMAPINFOHE ...

  9. c语言休眠函数useconds类型,带你了解C语言中的Sleep函数(附代码)

    Sleep函数: 功 能: 执行挂起一段时间 用 法:unsigned sleep(unsigned seconds); 注意: 在VC中使用带上头文件#include ,在Linux下,gcc编译器 ...

最新文章

  1. 服务器装什么系统可以模拟器多开,安卓模拟器多开哪个最好 流畅不卡、省资源、群控刷机都有...
  2. java排序的几种方法
  3. DefaultServlet
  4. 钉钉机器人自动回复消息_用Python自动发送钉钉数据消息
  5. PHP5.3以上版本没有libmysql.dll,以及由此带来的困扰
  6. android 获取已安装应用的安装包,Android获取设备已安装的应用
  7. 发现一个厉害的关于html ui的网站 http://amazeui.org以后可能会用机会用!
  8. Qt引用Boost问题
  9. mongodb 命令补充
  10. DelegatingFilterProxy详解
  11. python如何制作一个任意列表_我要悄悄学Python之列表(一)
  12. DB2的下载、图解安装、可能出现的问题(一篇解决)
  13. win10护眼模式_这6个电脑操作技巧,会让你爱上Win10系统
  14. [Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
  15. 虚拟化技术的优点和缺点
  16. [wordpress搬家]马来西亚 你好
  17. ISO 8601时间格式时间创建
  18. 威斯康星麦迪逊计算机科学专业,威斯康星大学麦迪逊分校计算机科学专业申请条件汇总...
  19. 微信jssdk图片上传给服务器,使用微信JSSDK进行图片选择和上传
  20. 红旗linux如何硬盘安装教程,硬盘安装红旗Linux教程

热门文章

  1. ubuntu系统下使用jenkins自动构建Android项目
  2. 安卓app接入银联支付
  3. 爬虫IP代理资源汇总
  4. HVR日志分析简单应用
  5. 《电路基础》有源元件、支路、节点、回路
  6. 智能工作平台那么多,我们为什么选择了华为云WeLink?
  7. npm 更新升级(最新版本 | 指定版本)
  8. 基于CPLD和LVPECL门电路的脉宽可调窄脉冲信号发生器设计
  9. OneNote的安装教程 如何解决Win10登录微软账号报错问题
  10. 自动白平衡基本原理与应用实例看图说话(转载)