• 数字图像处理实验记录四(图像的空间域增强-平滑处理)


    前言:要是是实验报告赶工的话,建议总结上网抄,或者重构我的总结,仅供学习参考,不要照抄

    一、基础知识

    1,噪声

    噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块。它以无用的信息形式出现,扰乱图像的可观测信息。通俗的说就是噪声让图像不清楚。
    一般在我们获取图像(也就是照相)的时候,可能会遇到一些电磁干扰,让我们的图像变得麻麻的。当然在图像传播的过程中也会出现这种问题。

    2,椒盐噪声

    椒盐噪声就是在图像中,一些像素点的灰度值突然变得很离谱,如下图:
    在这里插入图片描述
    在这里插入图片描述

    3,高斯噪声

    图像集体像素发生了随机变化,不过像素值符合正态分布。高斯噪声的平均值为零,即噪声的总体均值为图像的亮度平均值的偏移。
    如下图:
    在这里插入图片描述
    在这里插入图片描述

    4,滤波器

    在我看来,滤波器像是一个漏斗,如下图这样:在这里插入图片描述
    漏斗上面的大小就是滤波器的模板大小,最后输出就是过滤后的结果

    5,均值滤波器

    先求出装进漏斗里面的数的和,输出其平均值

    6,中值滤波器

    将漏斗中的数排序,输出大小在中间的那个数

    7,滑动窗口

    这个是一个有点意思的知识点。总之我们要知道一点,滤波器总是一直在图像里面滑过来滑过去。
    假设从1开始,lim是最大地方的边界,滤波器规模为f_size,我们可以对其位置进行分析:
    在这里插入图片描述
    一般目标i应该在滤波器的中心位置好些,这样可以得到滤波器的横坐标左边界应该是i-f_size/2,右边界应该是i+f_size/2:
    在这里插入图片描述
    当然我们要考虑是否超出边界,这样就有左边界为1,i-f_size/2两者中较大的数,右边界为i+f_size/2,lim两者中较小的数。
    纵坐标同理。

    二、实验要求

    读入一幅256 级灰度的数字图像
    图像的平滑滤波处理
    1)对原图像分别加入高斯噪声、椒盐噪声。
    2)利用邻域平均法,分别采用33,55, 77, 99模板对加噪声图像进行平滑处理,显示原图像、加噪图像和处理后的图像。
    3)利用中值滤波法,分别采用33,55, 77, 99模板对加噪声图像进行去噪处理,显示原图像、加噪图像和处理后的图像。
    4)比较各种滤波方法和滤波模板的处理结果

    三、实验记录

    读入图像并添加噪声:

    clc;
    clear;
    figure('NumberTitle', 'off', 'Name','噪音图');
    % 实验五 噪声处理
    I = imread('tp.jpg');
    
    subplot(2,2,1.5);imshow(I);
    xlabel('(a)原始图像');
    
    Salt = imnoise(I,'salt',0.02);
    
    subplot(2,2,3);imshow(Salt);
    xlabel('(b)椒盐噪声图像');
    
    gau = imnoise(I,'gaussian',0,0.01);
    subplot(2,2,4);imshow(gau);
    xlabel('(c)高斯噪声图像');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    滤波器函数my_filter:

    function [value] = my_filter(S,filter_size,kind)
    % 我的滤波处理器 输入:图S,滤波器大小:m,滤波器种类kind:0,均值滤波;1,中值滤波
    
    if(~exist('kind','var'))
        kind = 0;  % 如果未出现该变量,则对其进行赋值
    end
    [rows,cols,z] = size(S);%获取图的大小
    
    value = -1*ones(rows,cols,z);%初始化结果
    for i = 1:rows
        for j = 1:cols
             for k = 1:z
                % 获取滑动窗口的范围
                row_start = max(1, i - floor(filter_size / 2));
                row_end = min(rows, i + floor(filter_size / 2));
                col_start = max(1, j - floor(filter_size / 2));
                col_end = min(cols, j + floor(filter_size / 2));
    
                % 提取滑动窗口内的像素值
                window = S(row_start:row_end, col_start:col_end, k);
                if(kind == 0)
                    avg_value = mean(window(:));%mean 获取平均值
                else
                    window = sort(window);
                    avg_value = window(floor(round(length(window)/2)));
                end
                value(i,j,k) = uint8(avg_value);                                     
            end
            
        end
    end
    
    value = uint8(value);
    
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    主程序代码:

    clc;
    clear;
    figure('NumberTitle', 'off', 'Name','噪音图');
    % 实验五 噪声处理
    I = imread('tp.jpg');
    
    subplot(2,2,1.5);imshow(I);
    xlabel('(a)原始图像');
    
    Salt = imnoise(I,'salt',0.02);
    
    subplot(2,2,3);imshow(Salt);
    xlabel('(b)椒盐噪声图像');
    
    gau = imnoise(I,'gaussian',0,0.01);
    subplot(2,2,4);imshow(gau);
    xlabel('(c)高斯噪声图像');
    figure('NumberTitle', 'off', 'Name','均值椒盐');
    filter_size = [3,5,7,9];
    for i=1:4
        I_Salt = my_filter(Salt,filter_size(i),0);
        subplot(2,2,i);
        imshow(I_Salt);
        title([num2str(filter_size(i)),'x',num2str(filter_size(i)),'均值滤波器']);
    end
    figure('NumberTitle', 'off', 'Name','中值椒盐');
    for i=1:4
        I_Salt = my_filter(Salt,filter_size(i),1);
        subplot(2,2,i);
        imshow(I_Salt);
        title([num2str(filter_size(i)),'x',num2str(filter_size(i)),'中值滤波器']);
    end
    figure('NumberTitle', 'off', 'Name','均值高斯');
    
    for i=1:4
        I_gau = my_filter(gau,filter_size(i),0);
        subplot(2,2,i);
        imshow(I_gau);
        title([num2str(filter_size(i)),'x',num2str(filter_size(i)),'均值滤波器']);
    end
    figure('NumberTitle', 'off', 'Name','中值高斯');
    
    for i=1:4
        I_gau = my_filter(gau,filter_size(i),1);
        subplot(2,2,i);
        imshow(I_gau);
        title([num2str(filter_size(i)),'x',num2str(filter_size(i)),'中值滤波器']);
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    四、结果展示

    1,添加噪声:

    在这里插入图片描述

    2,均值滤波器过滤椒盐噪声:

    在这里插入图片描述

    3,中值滤波器过滤椒盐噪声:

    在这里插入图片描述

    4,均值滤波器过滤高斯噪声:

    在这里插入图片描述

    5,中值滤波器过滤高斯噪声:

    在这里插入图片描述

    五、反思总结与收获

    1,滤波器对不同噪声的效果:

    椒盐噪声是突然产生一个特别大的值。用中值滤波器就在一堆像素中选适中的,可以有效过滤掉椒盐。而一个太大的值对均值有着很大的影响,所以用均值滤波器过滤椒盐噪声效果不佳。
    高斯噪声的均值为0,所以当我们用均值过滤器的时候,就可以很好得将高斯噪声减小甚至去除。但是由于图像中的像素都改变了,中值滤波器过滤出来的值也有很大可能是一个离谱值,所以用中值滤波器过滤高斯噪声效果不佳。

    2,模板大小不同,处理效果有何不同?

    根据实验结果可知,滤波器模板越大,对噪声的处理效果越好,但是相应的图像会越模糊。因为模板越大,滤波器对指定像素的采样范围越大,这样减小了噪声对图像的影响,但是由于参与像素过多,指定像素与周围像素的差距减小,或者说是同一个窗口里每个像素之间的差距减小,这样图像就会变模糊

  • 相关阅读:
    Web3游戏基础设施提供商Stardust为Sui上的游戏开发者提供支持
    【前端】使用json-server报错
    Python自动化测试面试题精选(一)
    无意中发现腾讯Java开发手册
    针对Office宏病毒的高级检测
    前端基础(四十二):SVG入门
    【博主推荐】html好看的图片轮播多种风格(源码)
    【李航统计学习笔记】第九章:EM算法
    DC-9靶场下载及渗透实战详细过程(DC靶场系列)
    golang面试题总结
  • 原文地址:https://blog.csdn.net/qq_62791684/article/details/133937712