java - 向图像添加噪声

标签 java image bufferedimage noise gaussian

我正在尝试向 Java 中的 BufferedImage 添加噪声,但我对用于向图像添加噪声的算法更感兴趣,而不是 Java 或任何其他特定于语言的实现。

我在网上搜索并找到了有关高斯噪声的信息,但教程/文章要么只显示对我来说不太有用的代码示例,要么显示复杂的数学解释。

最佳答案

目前尚不清楚您的问题是什么,但以下是一些随机观察结果,以防有帮助:

  • 如果图像相对未经处理(尚未缩放尺寸),则每个像素中的噪声大致是独立的。因此,您可以通过依次循环每个像素、计算新的噪声值并将其相加来进行模拟。

  • 即使图像已经过处理,上述方法通常也是合理的近似值。

  • 图像中的噪声量取决于很多因素。对于数字传感器生成的典型图像,常见的近似是每个像素中的噪声大致相同。换句话说,您选择一些标准差 (SD),然后在上面的循环中,从具有该 SD 的高斯分布中选择一个值。

  • 对于天文图像(和其他低噪声电子图像),存在一个噪声分量,其中 SD 与像素亮度的平方根成正比。

很可能您想要做的是:

  • 选择 SD(您希望图像的噪点有多大)

  • 在循环中,对于每个像素:

    • 使用给定的 SD(平均值为零)从高斯生成一个随机数,并将其添加到像素(假设是灰度图像)。对于彩色图像,生成三个值并将它们分别添加到红色、绿色和蓝色。

更新 我想夜视仪将类似于天文成像。在这种情况下,您可以尝试改变每个像素的 SD,使其包含一个常数加上一些取决于亮度平方根的值。因此,如果一个像素的亮度为 b,那么您可以使用 100 + 10 * sqrt(b) 作为 SD。您需要使用这些值,但这可能看起来更现实。

关于java - 向图像添加噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383045/

相关文章:

java - Haxe Java 窗口

JavaMail 在 osgi 包中失败

jquery检查img是否有src

java - 删除 BufferedImage 像素值和/或将其设置为透明

java - 如何将图像从 Applet 传递到 JSF 支持 bean

java - 滚动屏幕位图,在 SurfaceView 上向下一行不起作用

java - 在 Apache Camel 中上传到 ftp 后删除文件

html - 固定背景不拉伸(stretch)到整个窗口

css - 无法通过css应用图片

Java 绘制图像 JPanel : Working but weird