有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计算两个像素之间的“亮度差”

经过数小时的搜索,我相信你的专业知识!请帮忙

基本上,我试图从灰度图像中的单个像素访问数据

这里有一个链接指向我正在谈论的图像:-http://s14.postimg.org/ak092kza5/WORKS.jpg?noCache=1382913709(它应该是全黑的。我知道我可以把它涂上颜色,但这不是我想学的——我想知道如何消除噪音!)

 public static void handlesinglepixel(int x, int y, int pixel) {
        int alpha = (pixel >> 24) & 0xff;
        int red = (pixel >> 16) & 0xff;
        int green = (pixel >> 8) & 0xff;
        int blue = (pixel) & 0xff;
        // Deal with the pixel as necessary...
    }

    public static void handlepixels(Image img, int x, int y, int w, int h) {
        int[] pixels = new int[w * h];
        PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
        try {
            pg.grabPixels();
        } catch (InterruptedException e) {
            System.err.println("interrupted waiting for pixels!");
            return;
        }
        if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
            System.err.println("image fetch aborted or errored");
            return;
        }
        for (int j = 0; j < h; j++) {
            for (int i = 0; i < w; i++) {
                handlesinglepixel(x + i, y + j, pixels[j * w + i]);
            }
        }
    }

所以使用这个我可以访问单个像素。我真的很开心!但是我现在想比较一下相邻的像素,看看它们是否比另一个像素亮。我这样做是因为我想消除照片中的噪音。有什么建议吗

另外,我尝试使用“重新缩放”并更改了所有像素的亮度因子,然后再次将它们相乘,但这只会使图像无法识别。我真的被困在如何消除噪音的问题上了

我期待着阅读您的回复


共 (1) 个答案

  1. # 1 楼答案

    这在很大程度上取决于要消除的噪声类型。如果遇到一些相邻像素比设定区域中的大多数像素亮得多的情况,通常需要使用简单的内核进行某种类型的2D滤波

    我们遗漏了你的一些信息,比如噪音的类型。因此,我将在手头有限的情况下尽我所能继续进行

    首先,什么构成“太亮”?“太亮”仅仅是强度比相邻像素高出几个标准差,还是基本上是黑色或白色的像素

    在后一种情况下,需要去除椒盐/脉冲噪声

    你基本上要做一个3x3的空间滤波器,然后选择模式或中值。瞧,没有太亮的像素了。然而,这将有效地模糊你的图像,所以你可能会考虑使用自适应滤波,所以你只修改一个像素,如果它比周围的像素更亮,而不是修改所有像素。p>

    最后,我们必须考虑到,你只需要根据一些统计值去除比周围像素更亮的像素,而不是仅仅是潜在的极端离群点(即:脉冲/椒盐噪声)。最后一种方法在CPU时间方面非常昂贵,但可以处理局部极值

    1. 对于NxN过滤器内核,计算内核重叠的所有像素的平均/平均强度值,即:E(X)。(即:将每个像素除以N^2,然后求和,以避免溢出)
    2. 对于相同的NxN面积,计算标准偏差E(X^2)。(即:计算平均值,然后为每个像素计算(像素强度-平均值)的绝对值,然后将其平方。)。将所有这些差异相加,然后除以N^2
    3. 循环浏览NxN区域中的所有像素。如果单个像素超出平均值2.5个标准差,则将其强度降低固定的百分比

    http://www.mathsisfun.com/data/standard-deviation.html

    如果将这种统计方法与自适应滤波技术相结合(即:检测哪些像素需要修改,而不是盲目修改所有可用像素),则可以删除问题像素,而不会对整体图像质量造成任何明显影响

    <>最后,你还应该考虑关于图像处理的拉普拉斯算子。它可以作为一个简单的边缘检测器,也可以引导你朝着正确的方向前进

    http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm

    祝你好运