写在前面
HIT大三上学期视听觉信号处理课程中视觉部分的实验一,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验一。
由于时间紧张,代码没有进行任何优化,实验算法仅供参考。
实验要求
- 实现给图像添加高斯噪声和椒盐噪声 ,要求显示添加噪声之后的结果图。
- 实现图像的空域滤波:中值滤波和均值滤波算法,并选取适合的方法对1中的图像进行平滑处理,要求显示处理之后的结果。
- 实现图像的边缘检测:Roberts算子和Sobel算子。
- 选做:实现对BMP文件头的读取,并解析BMP图像文件。 PS:图像单通道形式读取
实验代码
代码首先贴在这里,仅供参考
知识总结
这一部分总结实验过程中查询的博客,介绍完成本实验所需的知识,并对其记录以便之后复习。
首先需要实现一个对bmp文件读取的程序,这里首先需要了解bmp图像的格式
BMP文件格式详解(BMP file format)
这里我使用的文件读取方式是pack
和unpack
python中struct.pack()函数和struct.unpack()函数
Python使用struct处理二进制(pack和unpack用法)
bmp文件读取程序中,如何保存读出的图像数据自己决定,但最好使用numpy库将其保存为数组,方便后续进行各种处理。(这里我选择将其按像素点储存为一维数组,理解上较为简单,但后续算法实现需要算一下下标,导致程序不是很简洁。)
接下来进行的各种操作都是在灰度图上进行的,因此首先需要将bmp图像数据转化成灰度图像数据
图像处理:图像灰度化
之后是实现高斯噪声和椒盐噪声
高斯噪声和椒盐噪声的python程序实现
均值滤波和中值滤波
图像处理:中值滤波&均值滤波
Roberts算子和Sobel算子
灰度图像--图像增强 Robert算子、Sobel算子
实验总结
很简单的一个实验,总时间加起来大致6个小时左右(后面几个算法程序结构都是完全一样的,看懂算法原理直接替换核心代码就可以了。