CV小白成长记之二:使用空间滤波的方法去除图片上周期性线条噪声

  • 问题描述:
    在这里插入图片描述
    用空间滤波的方法去除lenna图片上周期性线条噪声。

  • 问题的分析:

    由于图片上有周期性的线条噪声,而常见的平滑处理应用就是降低噪声,所以我们需要做平滑处理。而平滑空间滤波器分为线性滤波器(均值滤波器、高斯滤波器)和非线性滤波器(中值滤波器)。

    我们知道,均值滤波何高斯滤波擅长处理高斯噪声,而中值滤波适合处理椒盐噪声。在上课时听到老师提到中值滤波可以去除图片上的划痕,同时需要用长方形的模板来做中值滤波。因为若是用正方形的模板,可能中值滤波取中值时中值取到了划痕上,造成去噪效果受到影响。而用长方形模板做中值滤波,更容易取到划痕周围的像素点来替代原划痕上的像素点。

    于是我想,可不可以取一个合适的长方形模板进行中值滤波,推广一下去除图片上的周期性线性线条噪声,下面开始实验。

  • 问题的解决:

    首先,我们还是读入原图到Matlab中,转化为灰度图。

I = imread('linelenna.jpg');  %读取原始图像
GG=rgb2gray(I);

但是使用从rgb转化为灰度图的Matlab函数时,报了如下的错误。
在这里插入图片描述

通过在网上检索,找到一个可能性,那就是原图不是一个三通道的rgb图像,那我们就通过如下代码查看原图的size。

[M, N, C] = size(I);

我们发现原图是单通道的图像(512×512×1),也就是灰度图像的概念,可以直接使用进行处理。
在这里插入图片描述

我们也可以使用如下代码将图像矩阵I归一化为图像矩阵G, 归一化后矩阵中每个元素的值都在0到1范围内(包括0和1),然后再进行处理。

G=mat2gray(I);

接下来我们可以进行最关键的一步——中值滤波。首先,我们使用默认的3×3模板来进行中值滤波,代码如下:

g1=medfilt2(G); %使用默认3×3的模板进行中值滤波

得到效果如下:
在这里插入图片描述
我们发现经过3×3的模板进行中值滤波之后的效果果然不算太好,于是我们按照使用长方形模板来进行中值滤波的思路来进行实验。

g2=medfilt2(G, [4,2]);
figure, imshow(g2);
g3=medfilt2(G, [6,3]);
figure, imshow(g3);
g4=medfilt2(G, [5,3]); %使用5×3的模板进行中值滤波
figure, imshow(g4);

经过实验,我们发现使用5×3的模板进行中值滤波能得到相对较好的结果,处理后的结果如下:
在这里插入图片描述
总的代码附后:

clear all;
clc;
I = imread('linelenna.jpg'); %读取原始图像
[M, N, C] = size(I);
figure,imshow(I); %显示原始图像
title('original');
% GG=rgb2gray(I);
G=mat2gray(I); 
figure,imshow(G)
title('gray');
g1=medfilt2(G); %使用默认3×3的模板进行中值滤波
figure, imshow(g1);
imwrite(g1,'3×3模板中值滤波结果.jpg','jpg');
% g2=medfilt2(G, [4,2]);
% figure, imshow(g2);
% g3=medfilt2(G, [6,3]);
% figure, imshow(g3);
g4=medfilt2(G, [5,3]); %使用5×3的模板进行中值滤波
figure, imshow(g4);
imwrite(g4,'5×3模板中值滤波结果.jpg','jpg');


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部