Hybrid Image

11 篇文章 4 订阅
11 篇文章 16 订阅

      以下是做 Hybrid Image的实验报告,主要实现了图像的高频与低频的融合,从而达到了远看图像与近看图像产生不同的效果。而且使用了对象对齐操作,使得不同尺寸的图像,图像中的不同大小的目标的融合成为了可能。

    源码见文章末尾。

一、问题分析

1.问题描述

一副图像的高频信息往往代表着该图像的该图像的细节信息,基本主导者人们对于图像的主要感知,然后对于图像的低频信息,则是描述着图像的大概轮廓的信息,这是人们在远处看图像的时候所看到的信息。

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

2.数据集分析

数据集一共提供了10张图片,每两张图片进行得到一幅HybridImage, 根据观察,实验给出的需要融合的两张图片具有如下性质:尺寸长宽相同;图像中的目标基本相似,比如鸟与飞机;图像均为 彩色图像,即为RGB图像。

数据集数目比较小,但是需要我们考虑三通道,而且虽然数据集中的图像大小一样,图中目标相似,我们仍然可以考虑去融合图像大小不同,目标大小不同的情况。

3.现有方法

现在有的方法大概分为两种。

第一种方法是将图像先进行傅里叶变换,即将图像从空间域转到频率域,然后进行滤波操作得到低频信息,最后用原图像减去得到的低频信息就可以得到相应的高频信息。用上述方法分别得到两幅图像的低频与高频信息,然后直接相加,最后将相加之后的结果进行反傅里叶变换就可以得到最后的融合图像HybridImage。

第二种方法就是直接在空间域对图像进行滤波得到低频信息,剩下的与第一种方法类似。最后用原图像减去得到的低频信息就可以得到相应的高频信息。用上述方法分别得到两幅图像的低频与高频信息,然后直接相加就可以得到最后的融合图像HybridImage。

经过小组讨论,认为第一种方法与第二种方法没有太大的区别,可能转到频率域较快一点,最后我们还是选用了第一种方法,并且与第二种方法进行了对比,发现实验结果相同。

 

二、模型建立

1.算法流程

                                                                                   图2.1 算法流程框架

如图2.1, 对于需要融合的两幅图像,我们先进行图像对齐操作,对齐之后的两幅图像大小一样,而且目标也相应的进行了对齐。接着再用对齐之后的图像分别得到高频信息,与低频信息,最后进行高频信息与低频信息的融合得到HybridImage。

2. 对齐操作

实验中采用的对齐主要是分别在两幅图像中选取两点,然后将两幅图中的这两点进行对齐。具体操作步骤如下。

(1)图像A中任意选取需要对齐的两点A1,A2,图像B中任意选取需要对齐的两点B1, B2。

(2)通过对图像进行padding,将A1,A2的中心点AC1变为图像A的中心,对于图像B同理,将B1,B2的中心点BC1变为图像B的中心

(3)缩放B1与B2两点之间的间隔使之等于A1与A2之间的间距,这里的缩放会让图像也进行相应的缩放

(4)将B1与B2两点连线的斜率通过旋转使之等于A1与A2连线的斜率,图像随之旋转。

(5)选取图像A与图像B的最大的宽,通过对图像左右进行裁剪,使之与两幅图像的最小宽相等;对于两幅图像的高同理,不过这个时候裁剪的是图像的上下边。

3. 提取图像低频信息

实验中采用将图像进行高斯滤波,即可得到图像的低频信息,这里需要调节的是高斯滤波的方差,方差越大,图像就会趋于模糊,需要找到一个合适的方差使之与另外一幅图像的高频信息进行融合后可以得到效果更好的融合图像。

 

4. 提取图像高频信息

实验中对于图像的高频信息的提取采取的是先用高斯滤波得到图像的低频信息,接着用原图像减去该低频信息就可以得到图像的高频信息。这里同样需要控制的高斯滤波的方差,而且这里的方差与上一节提到的方差值是不一样的,需要通过实验得到最好的方差值。

5. 高频与低频信息融合

实验中对于高频信息与低频信息的融合就是直接将高频信息与低频信息进行相加,就可以得到最后的融合图像HybridImage。

 

 

三、实验

实验在matlab2016a 上进行。对于高斯滤波的方差根据实验效果来确定。

1.无需对齐操作

这里选取以下两张图片进行融合。

 

                                                   

 

(1)分别得到高频信息与低频信息

       

 

(2)将高频与低频进行融合,并且以下采样的图像金字塔形式展现。

 

 

从最后融合的图像可以看出,当图像较大时,即近看,看到的是einstein。这是因为融合图像的高频来自einstein。当图像逐渐变小时,即变成远看,看到的是marilyn,这是因为融合图像的低频信息来自marilyn,低频信息代表远看时的信息,高频信息代表近看时的信息。

2.需对齐操作

现实中往往两幅图像的大小不能完全一样,图像中想要融合的目标大小也往往无法完全一样,所以这里采用简单的对齐操作。下面给出需要对齐的两张图片的融合过程。

                                                

 

(1)很显然,这两幅图的大小,已经图片中的目标分别为人与猫大小都是不一样的,这里我们采用第二节中描述的对齐操作,分别选取第一张图片中人的双眼与第二张图片中猫的双眼作为关键字,之后进行对齐操作得到如下图人对齐后的低频信息,与猫对齐后的高频信息。

             

可以发现对齐操作之后的两幅图像大小是一样的,而且想要对齐的关键点,也就是这里的眼镜也是位于图片的中心,这样可以保证两幅图像中的眼睛完全重合,从而达到对齐的操作。这里也可以发现图片中出现了一些黑边,这是对齐过程中padding的影响,后续会对融合之后的图像进行裁剪。

融合人的低频信息与猫的高频信息得到融合图像。

 

从最后融合的图像可以看出,当图像较大时,即近看,看到的是cat。这是因为融合图像的高频来自cat。当图像逐渐变小时,即变成远看,看到的是person,这是因为融合图像的低频信息来自person,低频信息代表远看时的信息,高频信息代表近看时的信息。

 

3.实验结果

 

 

 

 

 

 

四、分析与总结

1.实验中的发现

通过实验发现就算是图像大小,图像中目标大小都基本相同,然后尽量去调节高斯滤波的方差,有时候仍然得不到一个好的结果。

(1)比如当摩托车与自行车融合的时候,可能是由于摩托车的颜色过于鲜艳,经过高频之后的信息也比较淡化,从而导致融合效果不好

 

当我们将去自行车的高频,摩托车的低频时,融合效果也稍微好一些,如下图所示。

 

(2)如果图像的轮廓不够清晰,比如猫狗的胡须会导致融合效果不佳。

 

 

3.总结与体会

在这个实验中,我们基本完全了HybridImage的实验,取得了较好的实验效果,而且考虑到了对齐操作,即选取两个关键点并且进行对齐,使得不同大小的图像,图像中不同大小的目标融合成为了可能。

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

 

源码已经数据集:https://download.csdn.net/download/breeze_blows/11965004(内含详细注释)

参考:

https://github.com/coldmanck/Image-Filtering-and-Hybrid-Images

https://blog.csdn.net/Sengo_GWU/article/details/79336511

https://jeremykun.com/2014/09/29/hybrid-images/

Hybrid Image

 

混合图像是一种特殊类型的图像,通过将两个具有不同空间频率的图像进行叠加而产生的视觉效果。在Python中,可以使用OpenCV库对混合图像进行处理。 首先,需要导入OpenCV库: import cv2 然后,可以使用cv2.imread()函数加载两个不同的图像,并确保它们具有相同的尺寸。在加载图像时,可以使用cv2.IMREAD_COLOR参数将图像以彩色模式加载: image1 = cv2.imread('image1.jpg', cv2.IMREAD_COLOR) image2 = cv2.imread('image2.jpg', cv2.IMREAD_COLOR) 接下来,可以使用cv2.pyrUp()函数将第一个图像上采样,以增加其空间频率。上采样是通过在图像中插入更多像素来完成的,从而增加了图像的细节: up_image1 = cv2.pyrUp(image1) 然后,使用cv2.pyrDown()函数将第二个图像下采样,以减少其空间频率。下采样是通过从图像中删除一些像素来完成的,从而减少了图像的细节: down_image2 = cv2.pyrDown(image2) 最后,可以使用cv2.addWeighted()函数根据需要对上采样的第一个图像和下采样的第二个图像进行加权叠加,从而生成混合图像。可以根据需要调整权重参数来控制混合图像的效果: hybrid_image = cv2.addWeighted(up_image1, 0.5, down_image2, 0.5, 0) 最后,可以使用cv2.imshow()函数显示生成的混合图像,并使用cv2.waitKey()函数等待用户关闭显示窗口: cv2.imshow('Hybrid Image', hybrid_image) cv2.waitKey(0) cv2.destroyAllWindows() 通过以上步骤,我们可以在Python中使用OpenCV库创建混合图像。可以根据需要尝试不同的参数和图像来产生不同的混合效果。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值