据平日学习内容推断,本以为会用一道简单而无脑的算法题结束一学期的学习。不曾想乍一看却毫无头绪中值滤波,虽说仔细研究后发现其实并不难,在这里记录一下思考和解决过程。

首先我们要了解一下什么叫均值滤波和中值滤波,在这里摘录两段题目中给出的介绍。

(a) Local is a to (i.e. noise) where a small of odd size (e.g. 3x3, 5x5) each pixel from the noisy image is taken and the of this is . A new ‘’ image is then where each pixel is the from the local of the pixel in the noisy image.

(b) is an to where a small of odd size (e.g. 3x3, 5x5) each pixel from the noisy image is taken and the value of this is . A new ‘’ image is then where each pixel is the from the local of the pixel in the noisy image.

倘若未曾接触过图像处理,乍一看可能你也跟我一样毫无头绪。在写程序的过程中,我习惯遵循一个解决问题的方法,即提出问题,解决问题,遇到困难,针对性学习。

在这道题目中,我们要解决的第一个问题是是如何处理图像数据的。

根据我最初的构想,因为有RGB三个通道,图像数据应该由一个三维矩阵构成,形状类似于这样。

中值滤波_滤波值是什么意思_滤波结果

但在实际读取的时候,我只得到了一个二维矩阵。

滤波结果_滤波值是什么意思_中值滤波

因为没有接触过图像运算,在这里纠结了蛮久也不清楚是什么原因,最后到问了一下。

原来我们作业中的位图是 Image,已经经过了灰度处理,所以成为了二维矩阵。而未经过灰度处理的图像结构和我推测的相似,是一个三位矩阵包含RGB三个通道。如果我们要处理RGB三通道的图像,进行简单的公式换算即可。公式如下:

第一个问题解决,下一步我希望确定这个Numpy数组的形状中值滤波,以及它与这张图像之间的关系。首先我们看一下这个图片的基本信息。

这是一个是一个像素的图像,不出意外的话理论上应该是每个像素对应了一个灰度值,把这个数组的形状打印一下看看。

果然和猜测的相同,每一个灰度值代表了一个像素点。到这里,我们可以回到最初的问题,什么是均值滤波和中值滤波。其实那段话已经解释的比较明确,均值和中值都是指代像素值。由此可见,我们只要对每个像素点周边的3x3或者5x5的像素进行分析,然后重新生成一个降噪后的图像即可。

使用一个四层的循环嵌套,其中的高度和宽度为数组形状,与指代 size定义的需要均值或中值的像素点规模,减去 size的目的是防止到达图片边界时超出范围引起数组溢出。

最后根据中值和均值的定义进行计算即可,在这里以中值为例,首先对获取到的周边像素点进行排序,随后选择中间值为新图像的灰度值,赋予新的图像数组即可。

至此,一个基于中值滤波和均值滤波的降噪算法完成,这个只考虑了灰度图,所以其实并不具有普适性,也并不算难,只是涉及了一些图像处理的基础。

最后来一个降噪前与降噪后对比的效果图。

List of

Huang, T., G. J. T. G. Y. Yang, and Tang. "A fast two- ." IEEE on , , and 27.1 (1979): 13-18.

[][]


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注