图像滤波

本文介绍了如何使用OpenCV对图像进行卷积滤波:

  • 噪声
  • 图像卷积
  • 线性滤波
  • 非线性滤波
噪声

图像噪声,通常指图像中除了成像物体之外的其它信息(例如下面这张图片,红色方框区域部分有一些灰色斑点),这些额外的错误信息干扰了成像物体的显示,影响成像质量,所以往往需要通过图像滤波来消除噪声。通常图像滤波分为线性和非线性滤波。


图像的卷积

对图像的滤波通常都是通过卷积操作来完成的。那么什么是卷积?

我们有一个二维图像和一个二维的滤波器(卷积核)。然后,对于图像的每一个像素点,不断移动卷积核,计算它的邻域像素和卷积核的对应元素的乘积,然后加起来,作为该像素位置的值。这就是图像的卷积。


滤波器一般具备以下特点:
1)滤波器的大小通常是奇数,这样方便确定它的中心,例如3x3,5x5或者7x7。有中心,也就有了半径的定义,例如5x5大小的核的半径是2, 7x7大小的核的半径是3。
2)滤波器矩阵所有的元素之和通常要等于1,这是为了保证滤波前后图像的总体亮度保持不变。
3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像的亮度更高,反之亮度就会更低。
4)注意滤波后的结果可能发生溢出。例如对于CV_8UC3类型,计算出现负数或者大于255的数值。对这种情况,通常将结果截断到0和255之间。

线性滤波
  • 均值滤波

均值滤波其实就是对目标像素及周边像素取平均值后再填回目标像素的滤波方法。

如下图所示,我们采用了一个3x3的矩阵作为均值滤波矩阵。滤波矩阵里的每个值都是1/9,这样的话每个像素经过滤波后的值就是它自身加上邻近的8个像素的加权平均值。


下面是在OpenCV中创建并使用均值滤波的代码, OpenCV的滤波是通过filter2D()函数实现的。

    Mat image = imread("../book.jpg");
    Mat kernel = Mat::ones(3,3, CV_64F);

    kernel = kernel/9;
    Mat imgFiltered;
    filter2D(image, imgFiltered, -1 , kernel);
    imshow("Original", image);
    imshow("Blur", imgFiltered);

我们应用上面的代码对带有噪声的图像(左侧)进行均值滤波,可以看到滤波后的图像(右侧)中的噪点没有那么明显了。但均值滤波同样带来了一个副作用,就是所有像素值都被它的邻近像素“均匀”了,因此图片出现了模糊。


  • 高斯滤波

高斯模糊实质上也是一种均值滤波,不同的是,高斯滤波是按照加权平均的,距离中心店越近的点权重越大,距离越远的点权重越小。

下图就是一个参考的5x5高斯滤波器:

OpenCV已经实现了高斯滤波的函数GaussianBlur(),我们可以直接调用。

    Mat image = imread("../book.jpg");
    Mat kernel = Mat::ones(5,5, CV_64F);
    double SigmaX, SigmaY;

    kernel = kernel / 25;
    Mat imgFiltered;
    GaussianBlur(image, imgFiltered, Size(5,5), SigmaX=0, SigmaY=0);
    imshow("Original", image);
    imshow("Blur", imgFiltered);

右图是高斯滤波的结果。由于考虑了邻近像素的权重,因此相比于均值滤波,输出图像的模糊程度减轻了。
非线性滤波
  • 中值滤波

中值滤波的思想很简单,取卷积核当中所覆盖像素中的中值作为锚点的像素值即可。

在OpenCV中使用中值滤波非常简单,直接调用medianBlur()并且指定卷积核的大小即可。下面的代码中使用了5x5的卷积核。

    Mat image = imread("../book.jpg");

    Mat imgFiltered;
    medianBlur(image, imgFiltered, (5,5));
    imshow("Original", image);
    imshow("Blur", imgFiltered);

右图是滤波后的结果,可以看到噪声几乎被完全被滤除了。这也是中值滤波的特点,它对椒盐噪声的效果非常好。

  • 双边滤波

双边滤波是图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。

在OpenCV中可以使用bilateralFilter()来进行双边滤波。

    Mat image = imread("../lena_noised.png");

    Mat imgFiltered;
    /* 第三个参数d,表示在过滤过程中每个像素邻域的直径。如果这个值我们设其为非正数,那么OpenCV会从第五个参数sigmaSpace来计算出它来。
     * 第四个参数sigmaColor,颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
     * 第五个参数sigmaSpace, 坐标空间中滤波器的sigma值,坐标空间的标注方差。他的数值越大,意味着越远的像素会相互影响,
       从而使更大的区域内相似的颜色获取相同的颜色。当d>0,d指定了邻域大小且与sigmaSpace无关。否则,d正比于sigmaSpace。*/
    bilateralFilter(image, imgFiltered, 9, 75, 75);
    imshow("Original", image);
    imshow("Blur", imgFiltered);

注意bilateralFilter()需要设置合适的参数来取得理想的滤波效果。因为椒盐噪声是一种高频噪声,因此我们不能使用双边滤波器进行滤波。双边滤波器适用的场景是低频噪声+边缘较多的场景。例如下面的左图,使用双边滤波器在取得了比较好的去噪效果,同时也很好的保留了图像中的边缘信息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容