图像去噪的意义是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像去噪的意义是啥?相关的知识,希望对你有一定的参考价值。

一些图像去噪和二值化的知识

噪点就是数码相机CCD光传感器产生的杂讯号,一般是CCD光传感器温度升高时会多一些。在图片上的表现是红蓝的点,如你拍的是雪白的墙,本不该有红、蓝的点出现,因为墙上没有,但是图片上有密集的红、蓝的点,那就是噪点。噪点是所有数码相机CCD光传感器都会产生的,只是程度不同。一般规律是CCD光传感器面积大,有利于抑制噪点产生。使用较低的ISO值(感光度)有利于抑制噪点产生。 去噪就是通过软件除去红、蓝噪点,但是照片一旦产生噪点,软件除噪只是权宜之计,除噪后图片的清晰度同时下降,除噪力度越大,图片质量下降越严重。 参考技术A 二值化处理意义:二值图像进行相关比用灰度级图像进行相关有更好的相关性能和去噪作用。 在用硬件实现时可避免乘法运算,从而提高硬件系统的速度和降低成本。在图像的符号匹配方面,二值图像比灰度级图像更适合于用符号来表达。二值图既保留了原始图像的主要特征,又使信息量得到了极大的压缩。
流程:二值图像进行相关比用灰度级图像进行相关有更好的相关性能和去噪作用。 在用硬件实现时可避免乘法运算,从而提高硬件系统的速度和降低成本。
在图像的符号匹配方面,二值图像比灰度级图像更适合于用符号来表达。二值图既保留了原始图像的主要特征,又使信息量得到了极大的压缩。二值化的方法固定门限二值化方法Dither 矩阵二值化方法基本自适应门限二值化方法确定门限和阔叶的方法基本全局门限OTSU 自适应门限

图像的高斯模糊

  通过手机获取的图像由于多方面的原因或多或少存在一些噪声,即图像的去噪处理。简单的来说就是用 的矩阵在灰度图像一个一个像素移动,以某种逻辑来消除灰度图像中的孤立点,即噪声。去噪的方法主要有均值滤波、中值滤波、自适应维纳滤波器、形态学噪声滤除器、高斯滤波器。

  图像高斯滤波是在二维空间利用正态分布(高斯函数)计算平滑模版,并利用该模板与灰度图像做卷积运算来达到滤波去噪的目的。若 是正态分布的标准差,n为模板的大小,则模板上 处元素的计算公式为:

      

根据正态分布的特性, 越大得到的图像越模糊。从理论上讲图像上灰度不为0的点都应该构成卷积矩阵与原图像做变换,也就是说每个像素的计算都得包括整幅图像。然而在实际中计算高斯函数的离散近似时候, 距离外的像素值可以看作不起作用,也就是模板大小为(6*sigma+1)*(6*sigma+1)

 

。本文实验选择的是 的模板矩阵, sigma取值越大越模糊。由所得的模板矩阵与原灰度图像做卷积运算即可去除图像中的部分噪声。

   因此高斯模糊一般分为以下四步:

1、获取高斯模板矩阵:

    public float[][] get2DKernalData(int n, float sigma) {
            int size = 2 * n + 1;
            float sigma22 = 2 * sigma * sigma;
            float sigma22PI = (float) Math.PI * sigma22;
            float[][] kernalData = new float[size][size];
            int row = 0;
            for (int i = -n; i <= n; i++) {
                int column = 0;
                for (int j = -n; j <= n; j++) {
                    float xDistance = i * i;
                    float yDistance = j * j;
                    kernalData[row][column] = (float) Math
                            .exp(-(xDistance + yDistance) / sigma22) / sigma22PI;
                    column++;
                }
                row++;
            }

            return kernalData;
        }
View Code

2、获取灰度矩阵

public int[][]getGrayMatrix(Bitmap bt)
    {
        int hdjz[][]=new int[h][w];
        for(int i=0;i<h;i++)
            for(int j=0;j<w;j++)
            {
        int argb=bt.getPixel(j , i);
        int r = (argb >> 16) & 0xFF;
        int g = (argb >> 8) & 0xFF;
        int b = (argb >> 0) & 0xFF;
        int grayPixel = (int) (r + g + b) / 3;
        hdjz[i][j]=grayPixel;
            }
        return hdjz;
    }
View Code

3、卷积运算

public int[][] GS(int[][] hd, int size, float sigma) {
        float[][] gs = get2DKernalData(size, sigma);
        int outmax = 0;
        int inmax = 0;
        for (int x = size; x < w - size; x++)
            for (int y = size; y < h - size; y++) {
                float hc1 = 0;
                if (hd[y][x] > inmax)
                    inmax = hd[y][x];
                for (int k = -size; k < size + 1; k++)
                    for (int j = -size; j < size + 1; j++) {
                        hc1 = gs[size + k][j + size] * hd[y + j][x + k] + hc1;

                    }
                hd[y][x] = (int) (hc1);
                if (outmax < hc1)
                    outmax = (int) (hc1);
            }
        float rate = inmax / outmax;

        for (int x = size; x < w - size; x++)
            for (int y = size; y < h - size; y++) {
                hd[y][x] = (int) (hd[y][x] * rate);
            }
        
        return hd;
    }    
View Code

4、将得到的灰度矩阵创建灰度图

//由灰度矩阵创建灰度图
    public Bitmap createGrayImage(int[][]hdjz)
    {
        int h=hdjz.length;
        int w = hdjz[0].length;
        Bitmap bt=Bitmap.createBitmap(w, h, image.getConfig());
        for(int i=0;i<h;i++)
            for(int j=0;j<w;j++)
            {
                int grayValue=hdjz[i][j];
                int color = ((0xFF << 24)+(grayValue << 16)+(grayValue << 8)+grayValue);
                bt.setPixel(j, i, color);
            }
        return bt;
    }
View Code

 

以上是关于图像去噪的意义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

数字图像处理,一维信号小波阈值去噪的C++实现

图像去噪的深度学习最新综述论文,36页pdf,Deep Learning on Image Denoising

图像的高斯模糊

小波变换后的图像如何去噪

请教小波去噪中wdencmp函数使用的问题

小波去噪和突变点去除