python数字图像处理之估计噪声参数

估计噪声参数

周期噪声的参数通常是通过检测图像的傅里叶谱来估计的。

只能使用由传感器生成的图像时,可由一小片恒定的背景灰度来估计PDF的参数。

来自图像条带的数据的最简单用途是,计算灰度级的均值和方差。考虑由 S S S表示的一个条带(子图像),并令 P S ( z i ) P_{S}(z_i) PS​(zi​), i = 0 , 1 , 2 , … , L − 1 i = 0, 1, 2, \dots, L-1 i=0,1,2,…,L−1表示 S S S中的像素灰度的概率估计(归一化直方图值),其中 L L L是整数个图像中的可能灰度(对8比特而言, L L L为256)。则均值和方差估计如下:

直方图的形状确认最接近的PDF匹配。若形状大致为高斯分布的,则均值和方差就是我们所需要的,因为高斯PDF完全由这两个参数规定。对于其它PDF,我们可以使用均值和方差来求解参数 a和 b。

对于冲激噪声的处理是不同的,因为需要的估计是黑、白像素出现的实际概率。要获得这个估计,就需要看到黑色像素和白色像素,因此要算出噪声的有意义的直方图,图像中就需要有一个相对恒定的中灰度区域。对应于黑色像素和白色像素的峰值高度是式(5.16)中 P p和Ps​的估计。

# 一些重要的噪声对应灰度的直方图
img_ori = cv2.imread("DIP_Figures/DIP3E_Original_Images_CH05/Fig0503 (original_pattern).tif", 0)
# 竖图[40:210, 35:60],横图[40:60, 35:220]
img_gauss    = add_gaussian_noise(img_ori, mu=0, sigma=0.05)[40:60, 35:220]
img_rayleigh  = add_rayleigh_noise(img_ori, a=1)[40:60, 35:220]
img_gamma    = add_gamma_noise(img_ori, scale=2)[40:60, 35:220]
img_exponent  = add_exponent_noise(img_ori, scale=3)[40:60, 35:220]
img_average   = add_average_noise(img_ori, mean=10, sigma=1.5)[40:60, 35:220]

ps = 0.05
pp = 0.02
img_salt_pepper = add_salt_pepper(img_ori, ps=ps, pp=pp)[40:60, 35:220]

show_list = ['img_gauss', 'img_rayleigh', 'img_gamma', 'img_exponent', 'img_average', 'img_salt_pepper']

fig = plt.figure(figsize=(15, 15))

for i in range(len(show_list)):
    if i >= 3:
      # 显示图像
      ax = fig.add_subplot(4, 3, i + 3 + 1)
      ax.imshow(eval(show_list[i]), 'gray'), ax.set_xticks([]), ax.set_yticks([]), ax.set_title(show_list[i].split('_')[-1])
      # 对应图像的直方图
      ax = fig.add_subplot(4, 3, i + 1 + 6)
      hist, bins = np.histogram(eval(show_list[i]).flatten(), bins=255, range=[0, 255], density=True)
      bar = ax.bar(bins[:-1], hist[:]), ax.set_xticks([]), ax.set_yticks([]),
    else:
      # 显示图像
      ax = fig.add_subplot(4, 3, i + 1)
      ax.imshow(eval(show_list[i]), 'gray'), ax.set_xticks([]), ax.set_yticks([]), ax.set_title(show_list[i].split('_')[-1])
      # 对应图像的直方图
      ax = fig.add_subplot(4, 3, i + 1 + 3)
      hist, bins = np.histogram(eval(show_list[i]).flatten(), bins=255, range=[0, 255], density=True)
      bar = ax.bar(bins[:-1], hist[:]), ax.set_xticks([]), ax.set_yticks([]),

plt.tight_layout()
plt.show()

# 椒盐噪声的参数估计
hist, bins = np.histogram(img_salt_pepper.flatten(), bins=255, range=[0, 255], density=True)
print(f"Original pp -> {pp:.3f}, ps -> {ps:.3f}")
print(f'Estimate PP -> {hist[0]:.3f}, PS -> {hist[-1]:.3f}')
Original pp -> 0.020, ps -> 0.050
Estimate PP -> 0.018, PS -> 0.050
# 内嵌图像
fig, main_ax = plt.subplots()
hist, bins = np.histogram(img_gauss.flatten(), bins=255, range=[0, 255], density=True)
bar = main_ax.bar(bins[:-1], hist[:]), main_ax.set_xticks([]), main_ax.set_yticks([])

inset_ax = fig.add_axes([0.1, 0.3, 0.2, 0.5])
inset_ax.imshow(img_gauss.reshape(185, 20), 'gray'), inset_ax.set_xticks([]), inset_ax.set_yticks([])

plt.show()

以上就是python数字图像处理之估计噪声参数的详细内容,更多关于python图像处理估计噪声的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python深度学习之图像标签标注软件labelme详解

    前言 labelme是一个非常好用的免费的标注软件,博主看了很多其他的博客,有的直接是翻译稿,有的不全面.对于新手入门还是有点困难.因此,本文的主要是详细介绍labelme该如何使用. 一.labelme是什么? labelme是图形图像注释工具,它是用Python编写的,并将Qt用于其图形界面.说直白点,它是有界面的, 像软件一样,可以交互,但是它又是由命令行启动的,比软件的使用稍微麻烦点.其界面如下图: 它的功能很多,包括: 对图像进行多边形,矩形,圆形,多段线,线段,点形式的标注(可用于目

  • Python深度学习之使用Albumentations对图像做增强

    目录 一.导入所需的库 二.定义可视化函数显示图像上的边界框和类标签 三.获取图像和标注 四.使用RandomSizedBBoxSafeCrop保留原始图像中的所有边界框 五.定义增强管道 六.输入用于增强的图像和边框 七.其他不同随机种子的示例 一.导入所需的库 import random import cv2 from matplotlib import pyplot as plt import albumentations as A 二.定义可视化函数显示图像上的边界框和类标签 可视化函数

  • 用Python给图像算法做个简单应用界面

    以前在Windows上做界面用MFC,现在做算法都是基于Python,所以转用Python的Tkinter库来做.主要是能使用Opencv和Torch处理数据,然后在界面上显示. 效果如下: 主要包括3个板块,其余还有一些小功能: 1.显示固定的图片.或从电脑加载一张图片并显示(涉及到按钮的响应函数编写和弹窗) 2.下拉框和文本框的使用 3.进度条的使用(涉及到多线程) Tkinter支持控件自动调整布局,但是时间比较赶就不研究了,使用固定位置布局,界面也不给调整. 控件名称 Buttom 按钮

  • python-opencv实现视频指定帧数间隔图像的保存功能

    使用opencv-python,把一段视频中指定帧频间隔的图像保存到新建的文件中 首先安装好python ,配置好opencv-python # 导入所有必要的库 import cv2 import os # 从指定的路径读取视频 cam = cv2.VideoCapture("F:/video1.mp4") try: # 创建名为data的文件夹 if not os.path.exists('data'): os.makedirs('data') # 如果未创建,则引发错误 exce

  • python调用stitcher类自动实现多个图像拼接融合功能

    使用stitcher需要注意,图像太大会报错而且计算慢. 特点和适用范围:图像需有足够重合相同特征区域. 优点:适应部分倾斜/尺度变换和畸变情形,拼接效果好,使用简单,可以一次拼接多张图片. 缺点:需要有足够的相同特征区域进行匹配,速度较慢(和图像大小有关). 原图(可下载) 代码(两张图片拼接) import sys import cv2 if __name__ == "__main__": img1 = cv2.imread('C:/Users/Guaguan/Desktop/im

  • python 图像增强算法实现详解

    使用python编写了共六种图像增强算法: 1)基于直方图均衡化 2)基于拉普拉斯算子 3)基于对数变换 4)基于伽马变换 5)限制对比度自适应直方图均衡化:CLAHE 6)retinex-SSR 7)retinex-MSR其中,6和7属于同一种下的变化. 将每种方法编写成一个函数,封装,可以直接在主函数中调用. 采用同一幅图进行效果对比. 图像增强的效果为: 直方图均衡化:对比度较低的图像适合使用直方图均衡化方法来增强图像细节 拉普拉斯算子可以增强局部的图像对比度 log对数变换对于整体对比度

  • python使用matplotlib显示图像失真的解决方案

    在python显示图象时,我们用matplotlib模块时会遇到图像色彩失真问题,究竟是什么原因呢,下面就来看看究竟. 待显示图像为: import cv2 from matplotlib import pyplot as plt img = cv2.imread('demo_2.jpg',0) plt.imshow(img, cmap = 'gray', interpolation = 'bicubic') plt.xticks([]), plt.yticks([]) # to hide ti

  • python+opencv图像分割实现分割不规则ROI区域方法汇总

    在图像分割领域,一个重要任务便是分割出感兴趣(ROI)区域.如果是简易的矩形ROI区域其实是非常容易分割的,opencv的官方python教程里也有教到最简易的矩形ROI分割(剪裁),其本质是多维数组(矩阵)的切片.但是现实情况中,ROI是不规则的多边形,也可能是曲线边界,那么该如何分割出来呢?下面总结几种思路. 可能只提供核心部分的代码示例,具体应用要结合你自己的项目来修正. 一.已知边界坐标,直接画出多边形 例:最基础的画个四边形 # 定义四个顶点坐标 pts = np.array([[10

  • python 基于opencv实现图像增强

    为了得到更加清晰的图像我们需要通过技术对图像进行处理,比如使用对比度增强的方法来处理图像,对比度增强就是对图像输出的灰度级放大到指定的程度,获得图像质量的提升.本文主要通过代码的方式,通过OpenCV的内置函数将图像处理到我们理想的结果. 灰度直方图 灰度直方图通过描述灰度级在图像矩阵中的像素个数来展示图像灰度级的信息,通过灰度直方图的统计我们可以看到每个灰度值的占有率.下面是一个灰度直方图的实现: import cv2 import numpy as np import sys import

  • python实现求纯色彩图像的边框

    本文实例为大家分享了python实现求纯色彩图像的边框,供大家参考,具体内容如下 先上效果图,这里显示有点色差, 实际数值是纯色的, 而不是混色的. 放大局部细节看是这样的 原图是下面这样的 这个算法最大的特点是保留原始像素的数值, 而不是把边框统一变成白色. 实现的算法也超级简单. 就是有点慢. 考虑到我这个应用场景对性能要求不高, 比人快就行. 人工是它的几百倍. 所以也就无所谓啦. 测试结果一张1080*1920的图用时3秒, 如果换成c语言估计0.5秒左右. 算法原理, 每次4个田子形像

随机推荐