• 基于MATLAB的均值滤波算法实现


      在图像采集和生成中会不可避免的引入噪声,图像噪声是指存在于图像数据中的不必要的或多余的干扰信息,这对我们对图像信息的提取造成干扰,所以要进行去噪声处理,常见的去除噪声的方法有均值滤波、中值滤波、高斯滤波等,这一篇要实现的是均值滤波。

      均值滤波的方法是将图像数据生成3x3的矩阵或是5x5等其他模板,然后对这个矩阵模板进行处理。在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围 8 个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。说白了就是对这九个数求个平均值代替中间的那个数。在FPGA中我们为了简便运算只将目标像素周围八个点求和然后除以8,取代目标像素点。

     

        MATLAB对数字图像处理有各种函数支持,各种滤波和边缘检测都可以之间用几行函数实现,但是博主本着学习算法的基本原理,所以不用函数自己根据滤波原理写代码。本设计是在上一篇RGB转Gray后的灰度图进行滤波处理。

    添加噪声污染函数

    g = imnoise(I,type,parameters)

    g=imnoise(f,'salt & pepper',d)用椒盐噪声污染图像f,其中d是噪声密度(即包括噪声值的图像区域的百分比)。因此,大约有d*numel(f)个像素受到影响。默认的噪声密度为0.05。

        本设计只用到了对椒盐噪声的处理,所以仅记录这一种噪声的添加。

    均值滤波代码

     1 %Mean Filter
     2 clc;
     3 clear all;
     4 close all;
     5 
     6 RGB_data = imread('lena.jpg');
     7 
     8 R_data =    RGB_data(:,:,1);
     9 G_data =    RGB_data(:,:,2);
    10 B_data =    RGB_data(:,:,3);
    11 
    12 %imshow(RGB_data);
    13 
    14 [ROW,COL, DIM] = size(RGB_data); 
    15 
    16 Y_data = zeros(ROW,COL);
    17 Cb_data = zeros(ROW,COL);
    18 Cr_data = zeros(ROW,COL);
    19 Gray_data = RGB_data;
    20 
    21 for r = 1:ROW 
    22     for c = 1:COL
    23         Y_data(r, c) = 0.299*R_data(r, c) + 0.587*G_data(r, c) + 0.114*B_data(r, c);
    24         Cb_data(r, c) = -0.172*R_data(r, c) - 0.339*G_data(r, c) + 0.511*B_data(r, c) + 128;
    25         Cr_data(r, c) = 0.511*R_data(r, c) - 0.428*G_data(r, c) - 0.083*B_data(r, c) + 128;
    26     end
    27 end 
    28 
    29 Gray_data(:,:,1)=Y_data;
    30 Gray_data(:,:,2)=Y_data;
    31 Gray_data(:,:,3)=Y_data;
    32 
    33 figure;
    34 imshow(Gray_data);
    35 
    36 %Gray Mean Filter
    37 
    38 Gray_data = im2double(Gray_data);
    39 imgn = imnoise(Gray_data,'salt & pepper',0.05); 
    40 
    41 %imgn = Gray_data;
    42 
    43 figure;
    44 imshow(imgn);
    45 
    46 for r = 2:1:ROW-1
    47     for c = 2:1:COL-1
    48         Mean_Img(r,c) = (imgn(r-1, c-1) + imgn(r-1, c) + imgn(r-1, c+1) + imgn(r, c-1) + imgn(r, c) + imgn(r, c+1) + imgn(r+1, c-1) + imgn(r+1, c) + imgn(r+1, c+1)) / 9;
    49     end
    50 end
    51 
    52 figure;
    53 imshow(Mean_Img);

    处理前后图片结果比较

    Gray lena

    Mean_Filter lena

           从处理前后的图片中可以看到处理过后的图片变模糊了一些,这是因为均值滤波就是将图像做平滑处理,像素值高的像素会被拉低,像素值低像素会被拉高,趋向于一个平均值,所以图像会变模糊一些。

    加入椒盐噪声后的lena

    加入椒盐噪声后Mean_Filter lena

      椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素。椒盐噪声是一种因为信号脉冲强度引起的噪声。这里可以看出均值滤波对虽然是对图像进行平滑处理,但是对椒盐噪声基本无作用,要对椒盐噪声处理就要用中值滤波了,博主下一篇再接着做。

    转载请注明出处:NingHeChuan(宁河川)

    个人微信订阅号:开源FPGA

    如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号

    知乎ID:NingHeChuan

    微博ID:NingHeChuan

    原文地址:https://www.cnblogs.com/ninghechuan/p/9526100.html 

  • 相关阅读:
    This is a thoughtful essay
    MSSQL 模糊搜索全文(过程、函数、触发器等)
    MSSQL 高并发下生成连续不重复的订单号
    MSSQL sql numeric转字符串显示不补0
    iOS 开发之UIStackView的应用
    Java day 5
    Java day 4
    Java day 3-1
    Java day 3
    Java day 2
  • 原文地址:https://www.cnblogs.com/ninghechuan/p/9526100.html
Copyright © 2020-2023  润新知