当前位置: 首页 > article >正文

[Python图像处理] 基于离散余弦变换的图像去噪

基于离散余弦变换的图像去噪

    • 基于离散余弦变换的图像去噪原理
    • 利用 DCT 实现图像去噪
    • 相关链接

基于离散余弦变换的图像去噪原理

在本节中,我们将学习如何使用离散余弦变换( Discrete Cosine Transform, DCT) 对带有噪声的 RGB 彩色图像执行去噪操作,得到纯净的原始图像。为了实现此操作,我们使用 OpenCV 库中的一个简单有效的去噪函数 dctDenoising(),该函数为了达到去噪的目的在内部使用了局部 DCT 阈值。算法在去相关之后,将阈值分别应用于每个颜色通道。由于该算法的简单性和高性能,通常被视为开发新算法时的比较基准和性能下限。函数 dctDenoising() 的调用方式如下所示:

cv2.xphoto.dctDenoising(src, sigma, psize)

该函数实现了简单的基于 DCT 的图像降噪。

利用 DCT 实现图像去噪

(1) 首先,我们从 scikit-image.restoration 模块中导入 estimate_sigma() 函数以估算噪声 σ σ σ,并导入其他相关库与函数:

from skimage import img_as_float
from skimage.restoration import estimate_sigma
import cv2
from skimage.io import imread
import numpy as np
import matplotlib.pylab as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib.ticker import LinearLocator, FormatStrFormatter
from scipy.fftpack import dct, idct

(2) 读取输入 RGB 彩色图像,并使用 np.random.standard_normal() 函数和参数 sigma = 0.25 在图像中添加噪声,然后,使用 np.random() 函数缩放每个通道的像素值至范围 [0,1] 之间:

im = img_as_float(imread('1.png'))
sigma = 0.25
noisy = im + sigma * np.random.standard_normal(im.shape)
noisy = np.clip(noisy, 0, 1)

(3) 使用 estimate_sigma() 函数估算带有噪声的图像的标准噪声差 sigmma ( σ σ σ):

sigma_est = np.mean(estimate_sigma(noisy, multichannel=True))
print("estimated noise standard deviation = {}".format(sigma_est))

(4) 使用 cv2.xphoto.dctDenoising() 函数获得降噪后的输出图像:

out = noisy.copy()
cv2.xphoto.dctDenoising(noisy, out, sigma_est)
out = np.clip(out, 0, 1)

(5) 通过使用 matplotlib.subplot() 绘制原始、带有噪声的图像和降噪后的输出图像:

plt.figure(figsize=(20,10))
plt.subplot(131), plt.imshow(im), plt.axis('off'), plt.title('original', size=10)
plt.subplot(132), plt.imshow(noisy), plt.axis('off'), plt.title('noisy', size=10)
plt.subplot(133), plt.imshow(out), plt.axis('off'), plt.title('denoised (DCT)', size=10)
plt.tight_layout()
plt.show()

获得的结果图像如下所示,在下图中可以看出使用 dctDenoising() 函数后得到的图像可以消除图像中的大部分图像噪声,得到较为纯净的图像,但相比原始图像,降噪后得到的图像中的细节和边缘会部分丢失:

基于DCT执行图像去噪

相关链接

Python图像处理【1】图像与视频处理基础
Python图像处理【2】探索Python图像处理库
Python图像处理【3】Python图像处理库应用
Python图像处理【4】图像线性变换
Python图像处理【5】图像扭曲/逆扭曲
Python图像处理【6】通过哈希查找重复和类似的图像
Python图像处理【7】采样、卷积与离散傅里叶变换
Python图像处理【8】使用低通滤波器模糊图像
Python图像处理【9】使用高通滤波器执行边缘检测
Python图像处理【10】基于离散余弦变换的图像压缩


http://www.kler.cn/a/2595.html

相关文章:

  • Sql 创建用户
  • OSPF - 2、3类LSA(Network-LSA、NetWork-Sunmmary-LSA)
  • flutter 独立开发之笔记
  • 《繁星路》V1.8.3(Build16632266)官方中文学习版
  • Numpy数组的属性
  • 23.行号没有了怎么办 滚动条没有了怎么办 C#例子
  • 计算机网络学习1
  • Django 实现瀑布流
  • EventLoop(回顾)
  • JVM系统优化实践(11):GC如何搞垮线上系统
  • Unity脚本类 ---- Input类,虚拟轴与插值方法
  • 第四季新星计划即将开启,博客之星取消拉票你怎么看?
  • 音乐制作:Ableton Live 11 Suite Mac
  • 全面比较Aptos和Sui:Aptos已上线 来看看Sui
  • 56 | fstab开机挂载
  • 【刷题之路Ⅱ】牛客 NC107 寻找峰值
  • 01. Vue核心 Vue简介 初识
  • 智能灯泡一Homekit智能家居系列
  • 【算法题】2191. 将杂乱无章的数字排序
  • Spring教程——Spring IoC(控制反转)
  • Docker—苹果Mac安装Docker的两种方式
  • 真要被00后职场整顿了?老员工纷纷表示真的干不过.......
  • Java - 配置中心初体验
  • Nginx可视化管理工具 - Nginx Proxy Manager
  • three.js中创建文字(Creating text)
  • 难以置信,已经有人用 ChatGPT 做 Excel 报表了?