【数字图像处理】实验二

一、实验内容描述

本次实验的目标是使用Oliva、Torralba和Schyns在SIGGRAPH 2006论文中描述的方法创建混合图像。混合图像是一种合成的静态图像,观众对其内容的理解随视距的变化而变化。混合图像的基本想法是,当距离图像较近时,图像中的高频信号更容易被观众所感知,但距离图像较远时,观众更容易感知到图像中的低频(平滑)部分。通过将一幅图像的高频部分与另一幅图像的低频部分混合,你就可以得到一幅混合图像,在不同的距离上会得到不同的内容解释。

本次实验的目的是利用图像处理技术,分别利用低频与高频滤波器对图像进行处理,从而掌握卷积操作、高斯滤波器、图像合成等不同的基础处理方法。

二、实验基本原理与设计

课程群文件的“实验项目-2”目录中提供了本次实验所需要的两张样例数据图像文件。这些图片首先需要进行对齐(align)处理,以保证两张图像中的类似特征点处于大致相同的位置,代码文件align_image_code.py提供了基本的对齐处理样例代码,可参考。

需要编写代码来对一个图像进行低通滤波,对第二个图像进行高通滤波,并将两张处理后的图像进行合成,这可以通过叠加或平均方式来实现。对于低通滤波器,可以尝试使用标准的2D高斯滤波器。对于高通滤波器,则可以使用脉冲滤波器减去高斯滤波器(或者可以从原始图像中减去高斯滤波后的结果来获取)。每个滤波器的核参数应该通过实验来选择。

对于实验结果,你还应该通过频率分析来进行比较。可以对原始输入图像、滤波后的中间图像以及混合图像所对应的傅里叶变换图像进行比较以理解本次实验的处理过程。傅里叶变换图像可能需要进行基于对数幅值的灰度变换以展示更多细节。傅里叶变换图像可以通过调用opencv中的相应处理函数来生成。

可以使用样例图像进行实验,但建议大家在实验过程中使用自己的图像来构建混合图像。

三、调试过程

1.先对图片做2D卷积(my-imfilter.py)
(1)计算填充像素,并使用np.lib.pad函数填充0,生成相同的图片,核心代码如下

    pad_x = int((imfilter.shape[0] - 1) / 2)
    pad_y = int((imfilter.shape[1] - 1) / 2 )
    for ch in range(image.shape[2]):
        image_pad = np.lib.pad(image[:, :, ch],((pad_x, pad_x), (pad_y, pad_y)), 'constant', constant_values = (0, 0))

(2)后面再加嵌套两个for循环对彩色图像进行2D卷积。使用numpy函数np.multiply和np.sum,以便图像和过滤器可以同时进行卷积和求和

2.创建混合图像(proj1.py)

(1)处理图片1得到低频为主的图片

用高斯滤波器对高频分量进行滤波,得到低频为主的图像,代码如下

扫描二维码关注公众号,回复: 9885576 查看本文章
low_frequencies = my_imfilter(image1,gaussian_filter)

(2)处理图片2得到高频为主的图片

首先利用高斯滤波器对高频分量进行滤波,得到低频为主的图像。然后,原始图像减去低频主导图像得到高频主导图像。这种方法比使用高通滤波器更简单。代码如下

high_frequencies = image2 - my_imfilter(image2, gaussian_filter)

(3)合并以上两张图片,得到混合图像

hybrid_image = low_frequencies + high_frequencies

3. 傅里叶变换图像可能需要进行基于对数幅值的灰度变换以展示更多细节对原始图片及低通滤波、高通滤波、最后的混合图片进行傅里叶变换,从而更加直观的理解实验处理过程。

(1)首先对图片进行灰度处理

img1 = 0.2126 * image1[:,:,0]+ 0.7152 * image1[:,:,1] + 0.0722 * image1[:,:,2]

(2)使用fft2()对图像进行快速傅里叶变换得到频率分布,接着调用fftshift()函数将中心位置转移到中间,最终通过Matplotlib显示。代码如下

f1 = fft2(img1)
fshift1 = fftshift(f1)
fimg1 = np.log(np.abs(fshift1))
plt.subplot(232), plt.imshow(img1,'gray'),
plt.title('Original Fourier')
plt.axis('off')
plt.subplot(233), plt.imshow(fimg1,'gray'),
plt.title('Fourier Fourier')
plt.axis('off')
plt.show()

四、结果

以下展示展示结果图像,均按以下顺序原图1,图1低通滤波,原图2,图2高通滤波,混合后的图像,原图1及其傅里叶变换图像,原图2及其傅里叶变换图像,低通滤波及其傅里叶变换图,高通滤波及其傅里叶变换图,混合图像及其傅里叶变换图

第一组,狗和猫融合
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

混合后的图像
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五、代码

具体见代码及资源

发布了91 篇原创文章 · 获赞 28 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/gyx1549624673/article/details/103808210
今日推荐