gpt4 book ai didi

python - 基于直方图的图像噪声估计

转载 作者:行者123 更新时间:2023-12-01 07:33:02 26 4
gpt4 key购买 nike

我想估计输入图像的噪声水平。

我制作了一些噪声图像和原始图像的直方图并进行了比较,通过查看图像的两个不同阶段的直方图,我们可以判断哪一个是噪声图像以及存在什么类型的噪声。 (我所说的噪声是指常见类型的噪声,如高斯噪声、泊松噪声、散斑噪声等)

我想知道是否有一种方法可以检测噪声模型,然后从图像直方图估计噪声水平(基于特定噪声模型,例如高斯标准差)?比如识别密度函数?或者这个任务可能需要空间域以外的其他形式的输入,比如它需要转换图像,然后可能执行任务。

我使用像素值变化非常小的图像(例如渐变),然后我自己应用噪声来比较无噪声和噪声图像的直方图。

编辑:为了清除,我知道您可以根据查看直方图来检测噪声。我正在寻找一种方法,让我自己不用“视觉上”这样做。我想检测噪声,也许是密度函数,然后做一些事情,如果它是高斯或泊松或......。

如果有人能够提供任何有关解决此问题的正确路径的提示,我将不胜感激。

最佳答案

一般来说,通过分析直方图来确定噪声分布是不可能的。因为,很难确定这些变化是由于图像纹理和光照变化还是噪声造成的。以下是海滩沙子的原始噪声图像(高斯噪声)的简单示例直方图:

comparison of histogram of noisy and unnoisy images

由于图像方差相当大并且本身具有高斯分布,因此噪声确实会稍微改变直方图。请注意,我们没有现实世界中的原始图像来进行比较。
对于您的情况,如上所述,原始图像是平滑的,因此图像的方差很低。任何噪声都会大大增加方差,这在直方图中很明显。所以对于问题的基本部分,

I want to estimate noise level of an input image.

用于估计图像噪声的最简单技术是找到图像中最平滑的部分,找到该部分的直方图,并根据该部分估计整个图像的噪声分布。以下是使用 Opencv 进行噪声估计的示例:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('cameraman.bmp',0)
row, col = img.shape
gauss = np.random.normal(10,10,(row,col))
noisy = img + gauss
smooth_part = noisy[:30, :30]

plt.subplot(221),plt.imshow(noisy,cmap = 'gray')
plt.title('Noisy Image'), plt.xticks([]), plt.yticks([])
plt.subplot(222),plt.imshow(smooth_part,cmap = 'gray')
plt.title('Smooth Part'), plt.xticks([]), plt.yticks([])
plt.subplot(223),plt.hist(noisy.ravel(),256,[0,256])#; plt.show()
plt.title('Noisy Image Histogram'), plt.xticks([]), plt.yticks([])
plt.subplot(224),plt.hist(smooth_part.ravel(),256,[0,256])#; plt.show()
plt.title('Estimated Noise Distribution'), plt.xticks([]), plt.yticks([])
plt.show()

结果:

Estimated Noise

关于python - 基于直方图的图像噪声估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57133157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com