• 空域图像增强-图像滤波处理


    3.图像滤波处理。自选一张图片,完成以下图像处理:①给图像分别添加随机噪声和椒盐噪声;②采用不同的平滑滤波模板进行滤波对比(不同模板、不同尺寸);③采用中值滤波对图像进行滤波对比;④对添加随机噪声的多幅图片取平均。重点对比分析:不同空间域卷积器模板的滤波效果有何不同?空间域卷积器模板的大小的滤波效果有何影响?

    图像平滑处理的基本方法:

    图像在获取、传输过程中, 受干扰的影响, 会产生噪声. 噪声是一种错误的信号, 干扰正常信号, 造成图像毛糙. 这时就需要对图像进行平滑处理.

    图像去噪是一种信号滤波的方法, 目的是保留有用信号, 去除噪音信号.

    图像噪声:

    噪声干扰一般是随机产生的, 分布不规律, 大小也不规则. 噪声像素的灰度是空间不相关的, 与邻近像素显著不同.

    平滑处理的目的:

    1. 模糊: 在提取较大目标前, 先去除太小的细节, 或将目标内的小间断连接起来.
    2. 消除噪声: 改善图像质量, 降低干扰.

       平滑滤波使图像的低频分量增强, 同时削弱高频分量, 用于消除图像中的随机噪声, 起到平滑作用.

    图像增强:

    ·空间域法: 在原图像上直接对像素的灰度值进行处理. 分为两类, 点运算局部运算(邻域有关的空间域运算).

    ·频域法: 在图像的变换域上进行处理, 增强感兴趣的频率分量, 然后进行反变换, 得到增强后的图像.

    空间域滤波增强技术:

    图像平滑处理技术:

    邻域处理方法: 用某一模板对每个像元与其周围邻域的所有像元进行某种数学运算, 得到该像元新的灰度值. 新的灰度值不仅与该像元的灰度值有关, 还与其邻域内像元的灰度值有关.

    邻域处理——模板:

    平滑处理的基本方法:

    ·线性平滑: 对于每一个像素的灰度值用它的邻域值代替, 邻域为N×M, N取奇数.

    ·非线性平滑: 改进, 取一个阈值, 当像素值与其邻域平均值之间的差大于阈值时, 以均值代替; 反之取其本身值.

    ·自适应平滑: 物体边缘在不同的方向上有不同的统计特性, 即不同的均值和方差, 为保留一定的边缘信息, 采用自适应法.

    空域卷积滤波: 空域卷积滤波借助模板操作.

    模板操作:

        模板操作是数字图像处理中常用的一种运算方式. 图像的平滑、锐化以及后面将要讨论的细化、边缘检测等都要用到模板操作.

    模板:

    · 模板: 所有系数都是正数. 也叫滤波器、掩模、核或窗, 与邻域具有相同维数.

    ·邻域平均模板所有系数均为1.

    · 星号表示为中心元素, 将要处理的元素. 将原图中一个像素的灰度值和相邻近的8个像素值相加, 平均值作为中心值.

    卷积运算:

    • 卷积就是做加权求和的过程. 卷积核就是模板, 大小与邻域相同.

    · 领域中的每个像素分别与卷积核中的每一个元素相乘, 求和的结果即为中心像素的新值.

    · 卷积核中的元素称作加权系数(卷积系数), 系数的大小及排列顺序, 决定了处理的类型. 改变加权系数与符号, 影响新值.

    模板操作:

    · 邻域运算: 某个像素点的结果不仅和本像素灰度有关, 而且和其邻域点的值有关.

    • 模板运算的数学含义是卷积运算.
    • 卷积是一种用途很广泛的算法, 可用卷积来完成各种处理变换.

    边界问题的解决:

    • 忽略图像边界数据, 多采用该方法.
    • 在图像四周复制原图像边界像素的值, 从而使卷积核悬挂在图像四周时可以进行正常的运算.
    • 计算出来的像素值超出范围问题, 对此可简单地将其值置为0或255.

    卷积步骤:

    ·将模板在图中漫游, 并将模板中心与图中某个像素位置重合;

    ·将模板上系数与模板下对应像素相乘;

    ·将所有乘积相加;

    ·将和赋值给图中对应模板中心位置的像素.

    3.1 给数字图像添加Gaussian Noise (高斯噪声)和Salt and Pepper Noise (椒盐噪声

    1. %给图像添加高斯噪声和椒盐噪声
    2. I = imread('Durant.png');
    3. I_gray = rgb2gray(I);
    4. %加入Gaussian noise
    5. I_gray1 = imnoise(I_gray, 'Gaussian', 0, 0.01);
    6. %加入salt and pepper noise
    7. %椒盐噪声也称为脉冲噪声, 是图像中常见的一种噪声.
    8. %它是一种随机出现的白点或者黑点.
    9. I_gray2 = imnoise(I_gray, 'Salt & Pepper', 0.01);
    10. %
    11. subplot(1, 3, 1);
    12. imshow(I_gray);
    13. title('原图的灰度图像');
    14. %
    15. subplot(1, 3, 2);
    16. imshow(I_gray1);
    17. title('加入Gaussian noise');
    18. %
    19. subplot(1, 3, 3);
    20. imshow(I_gray2);
    21. title('加入Salt & Pepper noise');

    3.2 邻域平均法为图像降噪 

    3.2.1 含Gaussian Noise的图像 

    1. %给图片加入高斯噪声, 然后使用邻域平均法降噪
    2. I = imread('Durant.png');
    3. I_gray = rgb2gray(I);
    4. %加入Gaussian Noise
    5. I_gray1 = imnoise(I_gray, 'Gaussian', 0, 0.01);
    6. %模板为3×3, 平滑滤波
    7. image = filter2(fspecial('average', 3), I_gray1) / 255;
    8. %
    9. subplot(1, 3, 1);
    10. imshow(I_gray);
    11. title('原图的灰度图像');
    12. %
    13. subplot(1, 3, 2);
    14. imshow(I_gray1);
    15. title('加入高斯噪声的灰度图像');
    16. %
    17. subplot(1, 3, 3);
    18. imshow(image);
    19. title('3×3模板平滑滤波后的灰度图像');

     

    3.2.2 含Salt and Pepper Noise的图像 

    1. %给图片加入椒盐噪声, 然后使用邻域平均法降噪
    2. I = imread('Durant.png');
    3. I_gray = rgb2gray(I);
    4. %加入Gaussian Noise
    5. I_gray1 = imnoise(I_gray, 'Salt & Pepper', 0.01);
    6. %模板为3×3, 平滑滤波
    7. image = filter2(fspecial('average', 3), I_gray1) / 255;
    8. %
    9. subplot(1, 3, 1);
    10. imshow(I_gray);
    11. title('原图的灰度图像');
    12. %
    13. subplot(1, 3, 2);
    14. imshow(I_gray1);
    15. title('加入高斯噪声的灰度图像');
    16. %
    17. subplot(1, 3, 3);
    18. imshow(image);
    19. title('3×3模板平滑滤波后的灰度图像');

    中值滤波法: 

    · 邻域平均法: 属于低通滤波的处理方法, 它在抑制噪声的同时使图像变得模糊. 即图像的细节(例如边缘信息)被削弱.

    • 中值滤波: 抑制噪声又要保持细节. 将窗口中奇数个数据按大小顺序排列, 处于中心位置的那个数作为处理结果. 中值滤波法是一种非线性信号处理方法, 1971年提出并应用在一维信号分析中, 被图像信号处理引用. 在一定条件下, 克服线性滤波器(如邻域平滑滤波等)的模糊, 对滤除脉冲干扰及图像扫描噪声最为有效. 不需要统计特性, 使用方便. 但是对一些细节多, 特别是点、线、尖顶细节多的图像不宜采用中值滤波法.
    • 中值滤波就是用一个奇数点的移动窗口, 将窗口中心点的值用窗口内各点的中值代替. 假设窗口内共有5点, 其值分别为200、80、90、110和120, 那么此窗口内各点的中值即为110. 平均滤波为120.

    中值滤波的性质:

    · 中值滤波器不影响阶跃函数斜坡函数. 周期小于窗口长度一半脉冲受到抑制, 另外三角函数的顶部变平.

    • 二维中值滤波的窗口形状和尺寸对滤波效果影响较大, 不同的图像内容和不同的应用要求, 往往采用不同的窗口形状和尺寸. 窗口尺寸: 先用3×3, 再用5×5, 窗口尺寸不断增大, 直到满意为止.

    窗口的选择:

    • 窗口: 线状、方形、圆形、十字形及圆环等.
    • 方形或圆形窗口: 缓变的较长轮廓线物体为宜.
    • 十字形窗口: 含有尖顶物体适用, 窗口大小则以不超过图中最小有效物体的尺寸为宜.
    • 不宜采用中值滤波的情况: 图像中点、线、尖角细节较多.

    中值滤波主要特性:

    • 输入不变性: 在窗口内单调增加或单调减少的序列、一些周期性的序列, 中值滤波存在不变性, 输出信号仍保持输入信号不变.
    • 对大的边缘高度, 中值滤波较邻域均值好; 对于较小边缘高度, 两种滤波差别很小.
    • 是非线性的.
    • 在抑制图像随机脉冲噪声方面有效, 运算速度快, 便于实时处理.
    • 去除孤立线或点干扰, 保留空间清晰度较平滑滤波好, 但对高斯噪声则不如平滑滤波.

    3.3 数字图像的中值滤波法 

    3.3.1 含Salt and Pepper Noise的图像

    1. %给图片加入椒盐噪声, 然后使用中值滤波法降噪
    2. I = imread('Durant.png');
    3. I_gray = rgb2gray(I);
    4. %加入salt and pepper noise
    5. I_gray1 = imnoise(I_gray, 'Salt & Pepper', 0.01);
    6. %中值滤波是一种非线性数字滤波器技术, 用于降噪.
    7. %medfilter2(image, [n, n]):
    8. %image: 需要过滤的图像
    9. %[n, n]: 模板大小为n×n
    10. %medfilter2为二维中值滤波函数, 使用前须将图像灰度化.
    11. image = medfilt2(I_gray1, [3, 3]);
    12. %
    13. subplot(1, 3, 1);
    14. imshow(I_gray);
    15. title('原图的灰度图像');
    16. %
    17. subplot(1, 3, 2);
    18. imshow(I_gray1);
    19. title('加入椒盐噪声的灰度图像');
    20. %
    21. subplot(1, 3, 3);
    22. imshow(image);
    23. title('3×3模板中值滤波后的灰度图像');

     

     3.3.2 含Gaussian Noise的图像 

    1. %给图片加入高斯噪声, 然后使用中值滤波法降噪
    2. I = imread('Durant.png');
    3. I_gray = rgb2gray(I);
    4. %加入salt and pepper noise
    5. I_gray1 = imnoise(I_gray, 'Gaussian', 0, 0.01);
    6. %中值滤波是一种非线性数字滤波器技术, 用于降噪.
    7. %medfilter2(image, [n, n]):
    8. %image: 需要过滤的图像
    9. %[n, n]: 模板大小为n×n
    10. %medfilter2为二维中值滤波函数, 使用前须将图像灰度化.
    11. image = medfilt2(I_gray1, [3, 3]);
    12. %
    13. subplot(1, 3, 1);
    14. imshow(I_gray);
    15. title('原图的灰度图像');
    16. %
    17. subplot(1, 3, 2);
    18. imshow(I_gray1);
    19. title('加入高斯噪声的灰度图像');
    20. %
    21. subplot(1, 3, 3);
    22. imshow(image);
    23. title('3×3模板中值滤波后的灰度图像');

     3.4 对多幅含Gaussian Noise的图像取平均(降噪) 

    3.4.1 5幅图片取平均 

    1. %对多幅添加高斯噪声的图片取平均
    2. I = imread('Durant.png');
    3. I_gray = rgb2gray(I);
    4. %对原图的灰度图像I_gray分别添加5次Gauss噪声.
    5. %Gaussian noise: EX = 0,
    6. temp1 = imnoise(I_gray, 'Gaussian', 0, 0.01);
    7. temp2 = imnoise(I_gray, 'Gaussian', 0, 0.01);
    8. temp3 = imnoise(I_gray, 'Gaussian', 0, 0.01);
    9. temp4 = imnoise(I_gray, 'Gaussian', 0, 0.01);
    10. temp5 = imnoise(I_gray, 'Gaussian', 0, 0.01);
    11. %先将temp1, ..., temp5矩阵转换为double类型,
    12. %这样temp1, ..., temp5相加后, 求和结果数值不会失真.
    13. G = double(temp1) + double(temp2) + double(temp3) + double(temp4) + double(temp5);
    14. %将矩阵G中的数据除以5, 相当于5幅图片取平均.
    15. G = G / 5;
    16. %将矩阵G的元素转换为uint8类型.
    17. G = uint8(G);
    18. %显示原图的灰度图像.
    19. subplot(1, 2, 1);
    20. imshow(I_gray);
    21. title('原图的灰度图像');
    22. %显示取平均后的图片.
    23. subplot(1, 2, 2);
    24. imshow(G);
    25. title('5幅含噪图片取平均');

     3.4.2 10幅图片取平均 

    1. %对多幅添加高斯噪声的图片取平均
    2. I = imread('Durant.png');
    3. I_gray = rgb2gray(I);
    4. %获取图片矩阵的行数和列数, 创建一个height×width的零矩阵G.
    5. [height, width, channels] = size(I_gray);
    6. G = zeros(height, width);
    7. %对原图的灰度图像I_gray分别添加5次Gauss噪声.
    8. for i = 1 : 10
    9. G = G + double(imnoise(I_gray, 'Gaussian', 0, 0.01));
    10. end
    11. %将矩阵G中的数据除以10, 相当于10幅图片取平均.
    12. G = G / 10;
    13. %将矩阵G的元素转换为uint8类型.
    14. G = uint8(G);
    15. %显示原图的灰度图像.
    16. subplot(1, 2, 1);
    17. imshow(I_gray);
    18. title('原图的灰度图像');
    19. %显示取平均后的图片.
    20. subplot(1, 2, 2);
    21. imshow(G);
    22. title('10幅含噪图片取平均');

     

  • 相关阅读:
    【Cross-Direction and Progressive Network:交叉的挖掘信息】
    三、RTMP协议 视频Chunk和音频Chunk到底长啥样?
    python使用matplotlib可视化线图(line plot)、将图像保存为svg格式(将图像保存为png、jpg、jpeg等其他格式的语法类似)
    前端安全:构建坚不可摧的Web应用防线
    基于百度地图的交通查询的毕业设计(android)
    学生选修课程管理系统c++
    【重识云原生】第四章容器基础6.4.11.1节——Ingress综述
    【模型推理加速系列】05: 推理加速格式TorchScript简介及其应用
    HTML笔记
    机器学习基础概念与常见算法入门【机器学习、常见模型】
  • 原文地址:https://blog.csdn.net/weixin_42048463/article/details/128128399