图像加强目的使得模糊图片变得更加清晰、图片模糊的缘由是由于像素灰度差值变化不大,图片各区域产生视觉效果彷佛都是同样的, 没有较为突出的地方,看起来不清晰的感受web

解决这个问题的最直接简单办法,放大像素灰度值差值、使图像中的细节更加清晰。数组

目前较为经常使用的几个方法:伽马变换、线性变换、分段线性变换、直方图均衡化,对于图像对比度加强,都能取得不错的效果!微信

本文将对每种方法 简单介绍一下,并借助于 Python 、OpenCV 进行代码实现,提早说一下哈,下面处理的图像对象都是单通道灰度图,不是三通道彩色图!函数

1,线性变换

线性变换的原理是对全部像素值乘上一个扩张因子 ,像素值大的变得越大,像素值小的变得越小,从而达到图像加强的效果,这里利用 Numpy 的数组进行操做;

ui

须要注意的是,像素值最大为255,所以在数组相乘以后须要进行数值截断操做,最终代码以下:this

def line_trans_img(img,coffient):

if len(img.shape) == 3:

img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

out = 2*img

#像素截断;;;

out[out>255] = 255

out = np.around(out)

return out

这里 设置为 2 ,变换结果以下,会看到强光处出现失真效果spa

line.png

(这里对排列图片作一下说明,从左到右依次为 原图灰度图、原图灰度直方图、处理以后的灰度图、处理以后的灰度直方图,如下的图片排列方式相同).net

2,伽马变换

伽马变换对像素值作的是幂次方变换,主要是图像的灰度级发生改变,转换的原理公式为:

参数  的设定 能够参照下面:3d

Snipaste_2020-05-26_20-18-17.png

当>1 时,会减少灰度级较高的地方,增大灰度级较低的地方;code

当 <1 时,会增大灰度级较高的地方,减少灰度级较低的地方;

def gama_transfer(img,power1):

if len(img.shape) == 3:

img= cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

img = 255*np.power(img/255,power1)

img = np.around(img)

img[img>255] = 255

out_img = img.astype(np.uint8)

return out_img

这里 Gamma 分别取 1.5,0.5,结果以下:

gamma1.5.png

gamma0.5.png

结果来看,相对来讲  对图像加强的结果会更好一点

3,分段线性分割

分段线性分割,提早把图像的灰度级分为几部分,而后对每一部分的像素值作不一样的线性变换,像素值基本变换原理:

这里写的代码总感受效率特别慢(逐像素改变),知道改进方法的小伙伴们望告知:

def seg_augment_img(img,start,c1,end,c2,b2,c3,b3):

if len(img.shape) == 3:

img= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

out_img = np.zeros(img.shape)

for i in range(img.shape[0]):

for j in range(img.shape[1]):

if img[i][j]

out_img[i][j] = img[i][j]*c1

elif img[i][j]

out_img[i][j] = img[i][j] *c2 + b2

else:

out_img[i][j] = img[i][j] * c3 +b3

out_img[out_img>255] = 255

out = np.around(out_img)

out = out.astype(np.uint8)

return out

函数中的参数分别为 50,0.5,150,3.6,-310,0.238,194,结果以下:

seg_line.png

4,直方图均衡化

每一个灰度图像都有本身的灰度直方图,均衡化的原理是,先根据灰度直方图计算累加灰度直方图,根据灰度图与累加灰度图的映射关系关联输入图像与输出图图像的映射关系

映射关系原理以下:

所以,这里几个重要部分:1,计算出灰度直方图;2,计算累加灰度直方图;3,根据 1 和 2 获得映射关系,最终输出灰度像素值;

def get_imghist(img):

# 判断图像是否为三通道;

if len(img.shape) == 3:

img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 无 Mask,256个bins,取值范围为[0,255]

hist = cv2.calcHist([img],[0],None,[256],[0,255])

return hist

def cal_equalhist(img):

if len(img.shape) == 3:

img= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

h,w = img.shape[:2]

grathist = get_imghist(img)

zerosumMoment = np.zeros([256],np.uint32)

for p in range(256):

if p ==0:

zerosumMoment[p] = grathist[0]

else:

zerosumMoment[p] = zerosumMoment[p-1] +grathist[p]

output_q = np.zeros([256],np.uint8)

cofficient = 256.0/(h*w)

for p in range(256):

q = cofficient *float(zerosumMoment[p]) - 1

if q >= 0:

output_q[p] = math.floor(q)

else:

output_q[p] = 0

equalhistimage = np.zeros(img.shape,np.uint8)

for i in range(h):

for j in range(w):

equalhistimage[i][j] = output_q[img[i][j]]

# 第二种方法,opencv 库函数自带一种:

#equalhistimage = cv2.equalizeHist(img)

return equalhistimage

结果以下,看起来仍是不错的!(这里图片失真是由于灯光的缘由)

equalhist.png

5,小总结

根据以上几个加强方法来看,针对于本案例选取的图像,线性加强方法相对效果并不太好,可能会适用于其它的种类图像,而 Gamma转换  和直方图均衡化取得相对不错的结果

但图像加强、锐化没有最优方法,每种方法都有本身的特色,须要根据本身选择合适的

最后仍是要提醒一下感兴趣的小伙伴们,记得跟着敲一下代码,加深一下应用原理!

python图像锐化,图像加强、锐化,利用 Python-OpenCV 来实现 4 种方法!相关推荐

  1. python 运算符重载_Python 炫技操作:模块重载的五种方法

    点击上方"Python编程时光",选择"加为星标"第一时间关注Python技术干货!明哥原创的200页<PyCharm 中文指南> 震撼发布 系列文 ...

  2. Python 炫技操作(九):调用函数的九种方法

    系列导读 Python 炫技操作(一):条件语句的七种写法 Python 炫技操作(二):合并字典的七种方法 Python 炫技操作(三):判断是否包含子串的七种方法 Python 炫技操作(四):连 ...

  3. java list 删除 遍历_Java list利用遍历进行删除操作3种方法解析

    Java list利用遍历进行删除操作3种方法解析 这篇文章主要介绍了Java list利用遍历进行删除操作3种方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需 ...

  4. java 遍历删除list_Java list利用遍历进行删除操作3种方法解析

    这篇文章主要介绍了Java list利用遍历进行删除操作3种方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java三种遍历如何进行list ...

  5. java利用实现大数阶乘(三种方法)

    java利用实现大数阶乘(三种方法) 法一: for循环 import java.math.BigInteger; import java.util.Scanner; public class das ...

  6. 用matlab计算稳态误差,利用Matlab求稳态误差的两种方法.

    利用Matlab求稳态误差的两种方法 摘要:稳态误差是系统控制精度或抗扰动能力的一种度量,它是稳态性能的一个重要指标.本文介绍利用Matlab的控制系统工具箱和Simulink工具箱求取系统误差稳态的 ...

  7. opencv 图像增强_图像增强、锐化,利用 Python-OpenCV 帮你实现 4 种方法!

    图像增强目的使得模糊图片变得更加清晰.图片模糊的原因是因为像素灰度差值变化不大,如片各区域产生视觉效果似乎都是一样的, 没有较为突出的地方,看起来不清晰的感觉 解决这个问题的最直接简单办法,放大像素灰 ...

  8. python实现背景抠除_利用Python代码实现一键抠背景功能

    这篇文章主要给大家介绍了关于如何利用Python代码实现一键抠背景的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 前 ...

  9. python单词软件哪个好_利用Python分析背单词软件的惊人真相

    摘要:利用python分析背单词软件,揭秘你不知道的惊人真相 0×00 前言 你想知道背单词软件有大概多少人注册第一天都没有背完嘛 你想知道背单词软件这么火,这么多人在使用,真的有多少人真的在背诵嘛 ...

  10. 动态照片墙 python 实现_python入会生成照片墙 利用python生成照片墙代码

    本篇文章小编给大家分享一下利用python生成照片墙代码,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. PIL(Python Image Libr ...

最新文章

  1. 命令行下从bak文件恢复sqlserver数据库方法
  2. C++学习笔记-----函数调用时的决议:名字查找,重载决议,可访问性检测
  3. Kafka入门之分组的理解
  4. 2016蘑菇街编程题:搬圆桌
  5. easyswoole和mixphp_swoole框架都有哪些
  6. Python连接MySQL数据库(pymysql),DataFrame写入 MySQL(create_engine)- Python代码
  7. linux-目录查询命令-目录内容查看-ls查询-tree查询-查询类容分类-不同颜色对应不同类型
  8. 过去几小时,以太坊2.0信标链主网超过75位验证者被Slash罚款
  9. ajax验证本服务器,jquery – 使用Ajax调用的http基本身份验证
  10. Ant的使用 - 简单介绍
  11. Dynamips结合Dynagen使用手册
  12. CANTest软件安装成功经验
  13. Oracle数据库分页
  14. android 多媒体列表,android – 使用Exoplayer的流媒体视频列表
  15. python 等腰三角形的性质,相似三角形性质判定().ppt
  16. 狄利克雷卷积_狄利克雷卷积学习笔记
  17. 3.Navicat Premium:导入excel文件
  18. 【笔记-uni app】《uni-app 快速入门 从零开始实现新闻资讯类跨端应用》
  19. java.awt包_Java中awt包
  20. 【C语言】随机数函数rand和srand

热门文章

  1. 互联网新机遇: 移动社交电商将成为下一个风口?
  2. WSO2 API Manager的使用
  3. html在线翻译,HTML实现调用百度在线翻译API
  4. 数据库大作业——学生选课系统(基于SpringBoot+Mysql)
  5. 劲牌连续两年问鼎全国质量大奖背后的密码
  6. 企业防病毒体系建设的探讨
  7. PADS-电阻、电容、电感门封装
  8. 明孝陵的石象道:南京最美600米
  9. AD中出现off grid pin问题的解决方法
  10. 计算机控制系统的框图,计算机控制系统软件框图