视觉实验一 混合图像
目标是将用低通滤波与高通滤波处理的图像混合,生成新的图像。该图像放大时看到的以高频信号为主,缩小时看到的以低频信号为主,呈现出两种图像。实验需要通过python、numpy、OpenCV,设计函数实现图像卷积、高斯模糊、得到滤波处理后的图像。不能使用已有的卷积与滤波函数。
这个项目需要实现 5 个函数,每个函数都建立在前面函数的基础上:
- cross_correlation_2d :互相关函数
- convolve_2d :卷积函数
- gaussian_blur_kernel_2d :产生高斯核函数
- low_pass :图像与高斯核卷积,实现低通滤波
- high_pass :图像减去低通滤波,实现高通滤波
一、环境配置
首先是安装python(这里使用的是python3)
安装pip,再通过pip安装numpy与opencv-python以及pillow
当然也可以使用conda或直接安装Anaconda
IDE我用的是pycharm
二、互相关函数
这个函数是难度最大的部分,写出了这个函数剩下的就简单多了。为了方便测试,将test.py的互相关测试部分提取出来边做边测试
1 |
|
numpy与图像处理基础:
1 |
|
先从简单的让灰度图像向右平移一个像素写起。
基本思路:生成一个3*3的数组,其[0,1]值为1,剩下值为0。让灰度图中以每个像素为中心的3*3图像与该数组做互相关运算(超出图像边界取零),得到的结果填入新的图像中对应位置。
测试成功后,将灰度图像换成RGB图像,加入通道分离与合并的部分,这样互相关函数就算做完了。
代码如下:
1 |
|
三、产生高斯核的函数
根据公式写出lambda表达式,其中π是np.pi,e是np.e,注意高斯核要求的和为1.
1 |
|
剩下的两个函数就非常简单了,其实整个实验做下来也不是特别难,对numpy更熟悉了一些。
完整的代码放在github上
https://github.com/Xiayue09/VisionExp