一、实验原理

本次实验的原理来源于由Oliva、Torralba和 Schyns 在2006年发明并在SIGGRAPH上发表了的论文 Hybrid images。该论文提出混合图像是基于人类视觉系统对图像的多尺度处理,由视觉掩蔽研究驱动的。这些图像可用于创建引人注目的显示,其中图像在不同的距离有不同的感知。通过滤波分离图像的高频和低频,将不同图像的高频和低频合并以创建相关尺度的图像。

二、实验目的

本实验要求实现一个图像滤波函数,对于给定的两幅图像,得到第一幅图像的高频信息,即细节信息;得到另外一幅图像的低频信息,即大概轮廓信息;然后进行混合得到混合图像,从远处与近处分别看混合后的图像会看到不同的效果(实验提供了5对对齐的图像)。

三、实验内容

这次实验的内容调用五个.py文件完成,分别是my_imfilter.py文件、gauss2D.py文件、proj1.py文件、basiccontrasttest.py文件以及proj1_test_filtering.py文件。下面将进行详细的描述。

1、my_imfilter.py文件

文件中只包含一个my_imfilter()函数,功能是在对于彩色图像(即三通道RGB图像)进行处理时,应该分别对每一个通道分别进行滤波处理。函数的输入是待处理的图像和3*3的滤波器,输出是滤波出来后的图像。这部分的主要内容有:

(1)通过numpy的shape函数得图像和滤波器的尺寸。

(2)为了避免因为卷积运算导致输出图像缩小和图像边缘信息丢失,常常采用图像边缘填充技术,即在图像四周边缘填充0,使得卷积运算后图像大小不会缩小,同时也不会丢失边缘和角落的信息。

(3)使用numpy的zero函数初始化填充数组为0,并把填充数组和原始图像相结合。

(4)进行卷积操作,过滤器从图像的最左上角像素移动到最右下角像素。

2、gauss2D.py文件

文件中只包含一个gauss2D()函数,是二维高斯掩模,通过模糊去除图像1中的高频。

3、proj1.py文件

文件中只包含五个函数,normalize()函数的功能是归一化;setup_image()函数的功能是读取图像并转换为浮点格式;gen_hybrid_image()函数的功能是使用滤波器得到第一张图像的低通滤波和第二张图像的高通滤波并加以混合;vis_hybrid_image()函数的功能是通过逐步向下采样图像并将所有图像连接在一起,来可视化混合图像;save_image()函数的功能是(可视化和)保存输出。

(1)对于不齐的一对图像,我们应该调整高斯模糊像素的标准差来进行对齐,然后对输入数组进行归一化。

这里我们用的图相对分别为

(2)读取图像,转换为浮点格式。

(3)使用滤波器得到第一张图像的低通滤波和第二张图像的高通滤波并加以混合,输入参数为一对图和高斯模糊函数的标准差,其中图一用来提供低通滤波,图二用来提供高通滤波。输出参数为通过图一得到的低通滤波图、通过图二得到的高通滤波图以及图一得到的低通滤波和图二得到的高通滤波的混合图。

(4)通过逐步向下采样图像并将所有图像连接在一起,来可视化混合图像。

(5)保存输出。

(6)按照项目要求进行输出图像的保存操作。

4、basiccontrasttest.py文件

basiccontrasttest.py文件用来测试函数,以猫的图像为例。

5、proj1_test_filtering.py文件

proj1_test_filtering.py文件用来测试my_imfilter()函数,在使用过滤器构造proj1.py文件中的混合图像之前,应该验证一下是否得到了合理的输出,这里所有输出都被保存。还是以猫的图像为例。

(1)将输入图像进行归一化处理,并对图像进行设置。

(2)确定滤波器,此时的滤波器不执行任何操作,打印出的图像和原图一样。

(3)使用新的滤波器blur_filter,这个滤波器应该会去除一些高频信息。

(4)使用另一个滤波器large_2d_blur_filter,该滤波器将在使用gauss2D()函数的基础上使用my_imfilter()函数,在每个方向上进行了模糊。

(5)定义了一个新的滤波器sobel_filter,使用Sobel算子。

(6)定义了一个新的离散拉普拉斯滤波器laplacian_filter。

(7)定义了一个新的滤波器High pass filter,做法是简单的减去低频内容。

四、实验器材(设备、元器件)

硬件配置:Windows 10 64位操作系统。

软件配置:Jupyter Notebook 6.0.0版本。

五、实验步骤

读取图片路径,并对图像进行预处理操作;将预处理后的图像进行滤波操作和融合操作;按照项目要求进行输出图像的保存操作。具体步骤是新建一个Untitled.ipynb文件,在代码行依次执行操作,见下图。

六、实验数据及结果分析

运行my_imfilter.py文件、gauss2D.py文件以及proj1.py文件(5次,一次对应data中的一对图像)后,生成图像在results文件夹中。

生成的图片是乱序的,进行了一些简单处理,如下图。

运行basiccontrasttest.py文件,可视化图像如下。

运行proj1_test_filtering.py文件,生成7张图像。

上面的四张图(从左至右)分别为归一化处理过的图像,不经过任何处理的图像,去掉高频信息的图像,高斯模糊了的图像。

上面的三张图(从左至右)分别为使用Sobel算子的滤波器处理的图像,离散拉普拉斯滤波器生成的图像,简单的减去低频信息的图像,可以看到最后一张的图像效果是最好的。

七、实验结论

以猫狗的这对图片为例,从最后融合的图像可以看出,当图像较大时,即近看,看到的是猫。这是因为融合图像的高频来自猫。当图像逐渐变小时,即变成远看,看到的是狗,这是因为融合图像的低频信息来自狗,低频信息代表远看时的信息,高频信息代表近看时的信息。其他四对生成的四个混合图像也证实了这一理论。

八、总结及心得体会

在本次实验中,基本上实现了混合图像,取得了较好的实验效果,使用的填充策略是简单地用0填充图像,对图像进行了卷积和归一化处理,并逐步向下采样图像将所有图像连接在一起,来可视化混合图像。

通过实验发现就算是图像大小,图像中目标大小都基本相同,有了一个好的高斯滤波方差,有时候仍然得不到一个好的结果。两个例子,一是当摩托车与自行车融合的时候,可能是由于摩托车的颜色过于鲜艳,经过高频之后的信息也比较淡化,从而导致融合效果不好;二是当猫与狗融合的时候,可能是由于猫和狗胡须的差异使得图像的轮廓不够清晰,从而导致融合效果不佳。

九、对本实验过程及方法、手段的改进建议

本次实验所使用的5对图像都是对齐的,所以可以很好的混合图像。对于没有对齐的图像对而言,一定要考虑到对齐操作,即选取两个关键点并且进行对齐,使得不同大小的图像,图像中不同大小的目标能够很好的进行融合。

在实验的过程中也出现了一些问题,比如高斯滤波的方差这个超参数难以调到最优而且很麻烦,还有的就是由于某些图像额度特征导致融合效果无法取得更好的效果,这些都是以后继续研究的重点所在。

配套代码在相关博客里。

计算机视觉作业(一)Image Filtering and Hybrid Images相关推荐

  1. filtering and hybrid images

    filtering and hybrid images import cv2 import numpy as npimga = cv2.imread('../../data/fish.bmp') im ...

  2. 计算机视觉作业(二)Local Feature Matching

    一.实验原理 特征匹配是图像处理和计算机视觉的核心组成部分.在本次实验中,我们将创建一个局部特征匹配算法,并尝试匹配真实场景的多个视图.将实现一个简化版本的sift,用于解决局部特征匹配问题,使检测到 ...

  3. 计算机视觉作业(三)Scene Recognition with Bag of Words

    一.实验原理 本次实验是基于词袋模型的图像分类技术,利用提取的局部区域的分布对图像进行识别.在图像分类中,词袋模型算法需要通过监督或非监督的学习来获得视觉词典.基于词袋模型的图像分类算法一般分为四步, ...

  4. 西交计算机视觉作业,西安交通大学数字图像处理第三次作业.docx

    PAGE \* MERGEFORMAT1 数字图像与视频处理 第 三 次 作 业 姓名: / 班级: 学号: 提交日期: 2017. 3. 19 摘 要:灰度直方图是数字图像处理中最简单且有用的工具, ...

  5. 计算机视觉 Project 1:图像滤波和混合图像

    计算机视觉 Project 1:Image Filtering and Hybrid Images 计算机视觉 Project 1:Image Filtering and Hybrid Images ...

  6. 个性化习题推荐-Exercise recommendation based on knowledge concept prediction

    一.基本信息 时间:2020年 期刊:Knowledge-Based Systems(SCI1区) 作者:吴正洋等(作者主页链接:http://faculty.scholat.com/homepage ...

  7. 译文 - Recommender Systems: Issues, Challenges, and Research Opportunities

    REF: 原文 Recommender Systems: Issues, Challenges, and Research Opportunities Shah Khusro, Zafar Ali a ...

  8. 广州计算机专业王健,王健 - 教师简历 CV- 武汉大学计算机学院

    (注:*代表通讯作者): [1] Neng Zhang, Jian Wang*, and Yutao Ma, "Mining Domain Knowledge on Service Goal ...

  9. 计算机基础(笔记)——计算机网络(链路层)

    链路层 在链路层中,会讨论到两种截然不同类型的链路层信道.第一种类型是广播信道,这种信道用于连接有线局域网.卫星网和混合光纤同轴电缆( Hybrid Fiber Coaxialcable,HFC)接入 ...

最新文章

  1. Hibernate getCurrentSession()和openSession()的区别
  2. 团队项目第二阶段冲刺站立会议01
  3. linux last 命令年份,【帝联运维课堂】(第七十二期)Linux下last命令如何显示年份...
  4. 如何通过数据包套接字攻击Linux内核
  5. JAVA之编译期和运行期区别
  6. java excel 操作方式_Java读写Excel基本操作
  7. python 错误AttributeError: ‘dict_keys‘ object has no attribute ‘sort‘
  8. 在 vCenter Server 中触发了 vSphere Distributed Switch 绑定警报 (2057667)
  9. Linux 下常用 ftp 命令
  10. HTTP中的POST、GET区别
  11. 使用宝塔面板部署node.js后台:koa2+mysql+vue
  12. opengl 加载obj模型
  13. 计算机科学与技术班级,学院计算机科学与技术学院专业班级计算机科学与技术.doc...
  14. mysql mybatis批量删除,Mybatis批量删除多表
  15. 服务器系统进不了系统错误代码,重启服务器进入点晴OA的Email模块时提示子系统密码错误,错误代码2027:800403e9,如何解决?...
  16. 批量提取excel中包含特定关键字的单元格内容
  17. Eclipes 如何创建一个简单的servlet
  18. ubuntu开启php的curl扩展
  19. 算法基础系列第三章——层层推进的BFS
  20. emc存储java打开后报错_EMC 存储管理

热门文章

  1. JS三座大山之原型链
  2. bindec() 函数
  3. unity|火焰和烟效果(粒子系统)
  4. CTFshow-萌新 Writeup
  5. 笔记本html外接显示器,笔记本电脑外接显示器怎么设置?笔记本电脑接显示器实现双屏教程...
  6. C# Fleck Socket
  7. 从头来过教你PHP脚本语言(一)
  8. this java 错误_java异常错误处理
  9. SRC挖掘信息收集之JS文件中的秘密
  10. 我的世界超级英雄无限服务器,我的世界超级英雄无限整合包