当前位置: 首页 > 知识库问答 >
问题:

java去除高斯噪声

卫嘉泽
2023-03-14

我试图写一个程序,将消除噪声从一个高斯滤波器的图像。我试图编写以下代码:

public class Main {
    public static void main(String[] args) {
        File file = new File("src/main/resources/123.jpg");
        BufferedImage source;

        try {
            source = ImageIO.read(file);
            BufferedImage result = new BufferedImage(source.getWidth(), source.getHeight(), source.getType());

            int n = 3;
            double[][] w = new double[n][n];
            genGaussTemplate(w, n, 0.5);
            for (int i = 1; i < source.getWidth() - 1; i++) {
                for (int j = 1; j < source.getHeight() - 1; j++) {

                    // Получаем цвет текущего пикселя
                    Color color = new Color(source.getRGB(i, j));

                    // Получаем каналы этого цвета
                    int blue = color.getBlue();
                    int red = color.getRed();
                    int green = color.getGreen();

                    red = (int) ((float) red * w[1][1]);
                    green = (int) ((float) green * w[1][1]);
                    blue = (int) ((float) blue * w[1][1]);

                    //  Cоздаем новый цвет
                    Color newColor = new Color(red, green, blue);

                    // И устанавливаем этот цвет в текущий пиксель результирующего изображения
                    result.setRGB(i, j, newColor.getRGB());
                }
            }
            // Сохраняем результат в новый файл
            File output = new File("src/main/resources/output/321.jpg");
            ImageIO.write(result, "jpg", output);
        }
        catch (IOException e) {
            System.out.println("Произошла ошибка - " + e.getMessage());
        }
    }

    static void genGaussTemplate(double[][] window, int ksize, double sigma) {
        final double pi = 3.1415926;
        int center = ksize / 2;
        double x2, y2;
        double sum = 0;
        for (int i = 0; i < ksize; i++) {
            x2 = Math.pow(i - center, 2);
            for (int j = 0; j < ksize; j++) {
                y2 = Math.pow(j - center, 2);
                double g = Math.exp(-(x2 + y2) / (2 * sigma * sigma));
                g /= 2 * pi * sigma * sigma;
                sum += g;
                window[i][j] =g;
            }
        }
        for (int i = 0; i < ksize; i++) {
            for (int j = 0; j < ksize; j++) {
                window[i][j] /=sum;
            }
        }
    }
}

但我并没有消除噪声,反而使图像变暗了。我做错了什么?

高斯噪声是具有等于正态分布概率密度的概率密度的统计噪声,也称为高斯。换句话说,这种噪声的值具有高斯分布。以卡尔·高斯的名字命名。

一个特例是高斯白噪声,那么在任何给定时间的值都是独立的且均匀分布的随机变量(这意味着它们在一起不相关)。在对通信信道进行测试建模时,将高斯噪声作为加性白噪声,产生加性高斯白噪声。

在电信中,通信信道可能受到来自各种自然源的宽带高斯噪声的影响,例如导体中原子的热振动(热噪声或约翰逊-奈奎斯特噪声)、散粒噪声、来自地球或其他温暖物体的黑体辐射以及来自诸如太阳等天体源的辐射

共有1个答案

岳和泽
2023-03-14

您正在创建一个3*3高斯模板w,但是您只使用了中心元素w[1][1],而不是计算当前位置周围9个像素的加权组合。

这有效地将所有像素值与一个常量W[1][1]相乘,该常量的值低于1,只产生原始图像的较暗版本。

 类似资料:
  • 目标 在这一章当中, 您将了解非局部均值消噪算法,以消除图像中的噪声。 你会看到几个不同的函数,如 cv2.fastNlMeansDenoising(),cv2.fastNlMeansDenoisingColored() 等 理论基础 在前面的章节中,我们看到了许多像高斯模糊,中值模糊等图像平滑技术,它们在一定程度上消除了少量的噪声。在这些技术中,我们在像素周围采取了一个小的邻域,并进行了一些像高

  • 图像去噪 作者|OpenCV-Python Tutorials 编译|Vincent 来源|OpenCV-Python Tutorials 目标 在本章中, 你将学习用于去除图像中噪声的非局部均值去噪算法。 你将看到不同的函数,例如cv.fastNlMeansDenoising(),cv.fastNlMeansDenoisingColored()等。 理论 在前面的章节中,我们已经看到了许多图像平

  • 我知道我听起来很蠢,但我真的需要理解高斯-乔丹消去c程序。我已经试图理解编码,但逐行阅读代码仍然令人困惑。尤其是for(j = 1;英语字母表中第十个字母

  • 我正在编写代码以在python中消除高斯 - 乔丹。我的指示如下: 到目前为止,我已经: 这是正确的开始吗?我对下一步该去哪里感到很迷茫。输入将是一个 Numpy 数组。任何想法都非常感谢!

  • 我想创建一个基于网络的差异隐私演示。为此,我需要一个Laplace噪声分布的JavaScript实现。 我在JavaScript中找不到基本的噪声分布,比如高斯分布。这是令人惊讶的,因为我希望有很多很酷的JavaScript演示,展示发行版是如何构建的,一个图一个图,生成一个漂亮的钟形曲线。 如何在JavaScript中生成拉普拉斯噪声分布?

  • 问题内容: 我的Java堆栈跟踪中有很多我不关心的条目,它们显示了通过代理和Spring反射方法以及类似内容进行的方法调用。很难从我的代码中挑选出堆栈跟踪的一部分。Ruby on Rails包含一个“堆栈跟踪清理器”,您可以在其中指定要从打印的堆栈跟踪中忽略的堆栈跟踪模式列表-对于Java而言,这样做的最佳方法是什么? 最好在任何地方都可以使用它,包括在Eclipse jUnit运行程序中。 问题