由于成像系统散焦、设备与物体的相对运动等因素易造成对成像系统影响,同时设备本身的缺陷或部分图像存在异物遮挡,也常常会导致图像质量无法达到理想化水平。

图像复原基本原理

图像退化是指图像受采集设备、光线等影响,在生成、传输过程中出现质量下降、信息丢失的现象。理论上,图像退化是图像主动或被动融入噪声。因此,图像x在噪声n的作用下,形成模糊图像y的数学表达如下:
y=x⨂k+ny=x\bigotimes k+n y=x⨂k+n
其中, k称为点扩散函数,反应了光源成像系统对点源的解析能力。

通过图像复原技术,能够得到表达效果好、清晰度高的新图像。由上式可知,要想得到一个清晰的图像 ,通常需要对公式求解逆过程。因此,可视作对积分方程的逆变换。由于模糊核 k和噪声 n 未知,得到的 x不唯一。

图像退化和复原的基本流程如下图所示。受到各种因素的影响,清晰图像形成降质退化或模糊图像,分别研究退化模型和去模糊算法,进而对图像进行复原,生成清晰图像。常见的模糊图像类型包括高斯模糊、椒盐模糊、运动模糊等。

高斯模糊图像

高斯模糊图像是依据高斯曲线对图像周围像素进行加权平均处理去掉图像细节使图像变得模糊。高斯模糊的数学公式如下:
h(x,y)=12πσexp⁡(−x2+y2(2σ2)h(x,y)=\frac{1}{\sqrt{2πσ}} exp⁡(-\frac{x^2+y^2}{(2σ^2}) h(x,y)=2πσ​1​exp⁡(−(2σ2x2+y2​)
其中,h(x,y)h(x,y)h(x,y) 为高斯模糊函数, σ\sigmaσ 为标准差, x、y 为模糊点d 相对坐标。如图所示,中心点(0,0)附近坐标如下。

椒盐模糊图像

椒盐噪声也称为脉冲噪声,表现为在图像中随机出现白/黑点。其中,未受到污染的像素仍会保留原始信息,不会影响原有图像的所有像素以及结构等信息。定义如下:
p(x)={pa,x=apb,x=b0,other{} p(x)=\left\{ \begin{array}{lr} p_a, x=a \\ p_b, x=b \\ 0, other \end{array} \right . {} p(x)=⎩⎨⎧​pa​,x=apb​,x=b0,other​
其中,a,b均为常数,表示像素值的取值范围。当 pa=0p_a=0pa​=0或 pb=0p_b=0pb​=0时,表示单极脉冲,当 pa≠0、pb≠0p_a\neq 0、p_b \neq 0pa​​=0、pb​​=0且 pa≈pbp_a \approx p_bpa​≈pb​时,称之为椒盐噪声。

运动模糊图像

运动模糊通常是物体与相机的相对运动引起的,其中最简单的就是匀速直线运动。用公式表示如下:
h(x,y)={1d,y=xtanθ,0≤x≤dcosθ0{} h(x,y)=\left\{ \begin{array}{lr} \frac{1}{d}, y=xtan\theta,0\leq x \leq dcos\theta \\ 0 \end{array} \right . {} h(x,y)={d1​,y=xtanθ,0≤x≤dcosθ0​
其中,d表示运动的距离, θ\thetaθ表示运动方向。但是在实际生活中除速度、角度等变化外,运动模糊产生的原因往往比较复杂。

模糊图像仿真

Lean图像下载,对于高斯模糊采取的模糊策略是模糊半径为2px;对于椒盐噪声采取的模糊策略是添加10%噪声;对于运动模糊,采取的模糊策略是模糊距离为10px;对于异物遮挡图像采取的模糊策略是用黑色遮挡30*30px的图像区域。

仿真结果

仿真代码

import os
import cv2
import pylab
import random
import numpy as np
from skimage import io
from matplotlib import pyplot as plt
from PIL import Image, ImageFilter, ImageDraw#默认10%的椒盐噪声
def salt_and_pepper_noise(noise_img, proportion=0.1):height, width, _ = noise_img.shapenum = int(height * width * proportion)  # 多少个像素点添加椒盐噪声for i in range(num):w = random.randint(0, width - 1)h = random.randint(0, height - 1)if random.randint(0, 1) == 0:noise_img[h, w] = 0else:noise_img[h, w] = 255return noise_img'''
生成运动模糊图像 模糊距离10px
'''def motion_blur(image, degree=10, angle=45):image = np.array(image)# 这里生成任意角度的运动模糊kernel的矩阵, degree越大,模糊程度越高M = cv2.getRotationMatrix2D((degree / 2, degree / 2), angle, 1)motion_blur_kernel = np.diag(np.ones(degree))motion_blur_kernel = cv2.warpAffine(motion_blur_kernel, M, (degree, degree))motion_blur_kernel = motion_blur_kernel / degreeblurred = cv2.filter2D(image, -1, motion_blur_kernel)# convert to uint8cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)blurred = np.array(blurred, dtype=np.uint8)return blurred'''生成马赛克图像
:param rgb_img
:param int x :  马赛克左顶点
:param int y:  马赛克左顶点
:param int w:  马赛克宽
:param int h:  马赛克高
:param int neighbor:  马赛克每一块的宽
'''def do_mosaic(img, x, y, w, h, neighbor=9):for i in range(0, h , neighbor):for j in range(0, w , neighbor):rect = [j + x, i + y]color = img[i + y][j + x].tolist()  # 关键点1 tolistleft_up = (rect[0], rect[1])x2=rect[0] + neighbor - 1   # 关键点2 减去一个像素y2=rect[1] + neighbor - 1if x2>x+w:x2=x+wif y2>y+h:y2=y+hright_down = (x2,y2)cv2.rectangle(img, left_up, right_down, color, -1)   #替换为为一个颜值值return imgdef main():#对before文件夹下的所有图片加入噪声,保存到after_salt文件夹中# for root, dirs, files in os.walk(r"../dataset/before/"):#     for file in files:#         img = io.imread(os.path.join(root, file))#         noise_img = salt_and_pepper_noise(img)#         io.imsave(os.path.join('../dataset/after_salt/', file),noise_img)#原lena图像路径path='./lena512color.tiff'#高斯模糊仿真im = Image.open(path)im = im.filter(ImageFilter.GaussianBlur(radius=2))im.save('./lena_gaussian.png')#椒盐噪声模糊仿真img = io.imread(path)lean_noise=salt_and_pepper_noise(img)io.imsave('./lena_noise.png',lean_noise)#运动模糊仿真img = cv2.imread(path)motion_img = motion_blur(img)cv2.imwrite('./lena_motion.png',motion_img)#遮挡图像仿真(图像裁剪)im = Image.open(path)draw = ImageDraw.Draw(im)#裁剪矩形,左上角和右下角的坐标,像素用0填充draw.rectangle((70, 100, 100, 130), fill=(0))im.save('./lena_crop.png')#马赛克图像仿真img=cv2.imread(path)lena_mosaic=do_mosaic(img, 200, 200, 200, 200, neighbor=10)cv2.imwrite('./lena_mosaic.png',lena_mosaic)if __name__ == '__main__':main()

几种常见的图像模糊处理相关推荐

  1. 最新开源LiDAR数据集LSOOD:四种常见的室外物体分类

    点云PCL免费知识星球,点云论文速读. 标题:最新开源LiDAR数据集LSOOD:四种常见的室外物体分类 作者:Y Tian 来源:https://github.com/Tian-Yifei/LSOO ...

  2. 【特征提取+分类模型】4种常见的NLP实践思路

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈琰钰,清华大学,Datawhale成员 越来越多的人选择参加算法 ...

  3. Java的几种常见接口用法

    2019独角兽企业重金招聘Python工程师标准>>> Java的几种常见接口用法 今天在看阎宏的< Java与模式>,里面对 java的 几种 接口的常用方法的总结: ...

  4. android内存池,两种常见的内存管理方法:堆和内存池

    描述 本文导读 在程序运行过程中,可能产生一些数据,例如,串口接收的数据,ADC采集的数据.若需将数据存储在内存中,以便进一步运算.处理,则应为其分配合适的内存空间,数据处理完毕后,再释放相应的内存空 ...

  5. 计算机故障的现象有哪些,八种常见CPU故障现象的分析与处理_计算机硬件与网络_IT /计算机_信息...

    八种常见CPU故障现象的分析和处理214 Mini Games http: 1.机箱噪声: 故障现象: 在使用CPU升级计算机之后,每次打开计算机时,噪声都会很大. 但是使用一段时间后,声音恢复正常. ...

  6. 收藏 | 神经网络的 5 种常见求导,附详细的公式过程

    来源:机器学习与生成对抗网络 本文约1800字,建议阅读5分钟 本文为你介绍5种常见求导的详细过程! 01 derivative of softmax 1.1 derivative of softma ...

  7. 神经网络的5种常见求导,附详细的公式过程

    来源:机器学习与生成对抗网络 本文约2000字,建议阅读5分钟 本文为你介绍神经网络的5种常见求导方式. 01 derivative of softmax 1.1 derivative of soft ...

  8. 四种常见NLP框架使用总结

    作者:哈工大SCIR 狄东林 刘元兴 朱庆福 胡景雯 引言 随着人工智能的发展,越来越多深度学习框架如雨后春笋般涌现,例如PyTorch.TensorFlow.Keras.MXNet.Theano和P ...

  9. 使用定制的NSDictionary的方法,对NSArray进行排序(附:数组排序两种常见方法)

    NSArray中存放的是NSDictionary,可以使用策略的方法对NSDictionary进行定制,增加比较的方法.然后调用NSArray的sortUsingSelector方法对数组进行排序,这 ...

  10. 五种常见的PHP设计模式

    2019独角兽企业重金招聘Python工程师标准>>> 五种常见的PHP设计模式 设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm ...

最新文章

  1. Linux 下 hosts 应用
  2. python获取电脑硬件信息_Python实现的读取电脑硬件信息功能示例
  3. 【Node】node编译(windows)
  4. ios模拟器的路径-打开沙盒路径
  5. matchers依赖_Hamcrest Matchers,Guava谓词和Builder设计模式
  6. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 27丨每次访问的交易次数【难度困难-提前放出来】​
  7. android.os.networkonmainthredexception,android.os.NetworkOnMainThreadException 解决办法:
  8. Django model select的各种用法详解
  9. nginx学习笔记之安装
  10. 计算机与信息安全基本概念和知识,第8章计算机网络应用与信息安全知识.ppt
  11. Android简单实现汉字笔顺动画——Java版
  12. Nginx跨域配置 proxy_pass
  13. iperf 安卓 灌包命令_iperf工具测速
  14. TCP接收到重叠数据(overlap)后的行为解析-附带一个有关Delay ACK和超时重传的优化
  15. 沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第七章 GTP的IP核配置
  16. 教师资格证-教育知识与能力
  17. 【备份】git命令行
  18. 并查集算法(有趣的讲解)
  19. MySQL 推荐书目
  20. [bx]与loop指令

热门文章

  1. 需求分析和架构设计总结--利用DODAF方法
  2. matlab时空地理回归,★时空地理加权回归space-time GWR GTWR分析软件-香港中文大学-黄波教授...
  3. dp交换机命令_H3C-交换机维护命令大全
  4. 视频教程-WPF MVVM 编程模式/框架 基础+提高 项目开发实战视频教程-.NET
  5. 【Sql】—Sql开发利器Sql Prompt
  6. 量化指标公式源码_通达信博尔量化指标 看了就明白 源码
  7. python游戏编程讲解之凯撒密码
  8. python实现简单计算器
  9. 社工库源码mysql_社工库源码
  10. Java eclipse汉字乱码解决