码迷,mamicode.com
首页 > 编程语言 > 详细

Python-OpenCV教程-8-图像金字塔融合

时间:2014-11-24 22:38:57      阅读:692      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   os   sp   on   问题   as   line   

图像金字塔融合算法主要用在两幅图像的拼接中。两幅有重合区域的图片,如果直接个根据位置来拼接,那么由于两幅图片自身的差异,拼接完的图片上会有很明显的拼接线存在。

解决这个问题,最简单的方法是对两幅图片的重合区域的像素进行加权相加(这个操作可以理解为一种羽化的处理效果)。

bubuko.com,布布扣

设定一个权重w,就有公式:PB(i,j) = (1-w)*PA(i,j) + w*PB(i,j)可以计算重合区域融合后的像素值。

但是,这种简单的羽化对两幅图片的质量要求非常高,很对情况下并不能得到一个理想的效果。

因此,很多情况下,我们会选择稍微复杂的图像金字塔融合算法来处理这个重合区域。

先简单描述一下整个算法的流程,然后再具体介绍

1.用待处理的图像生成一系列的高斯金字塔图像。

2.根据高斯金字塔图像,计算出拉普拉斯金字塔图像。

3.根据高斯金字塔图像和拉普拉斯金子塔图像去重建重合区域的融合后的图像。

建立高斯金字塔的过程如下:

先对原图像进行高斯滤波,再去掉滤波之后的图像的的偶数行和偶数列(这样,这幅图像大小就是原图像的1/4了)。不断重复这个过程,直到达到要求的金子塔层数。(层数越高,那幅图就越小,这里定义第0层最高)

bubuko.com,布布扣

建立拉普拉斯金子塔的过程如下:

首先,我们要用高层的高斯金字塔图像去重建(expand)低层的图像。这里,我们假定用第0层的图像去重建第1层的图像,由于0层图像的大小是1层图像的1/4,所以我们必须对0层图像进行插值,使它达到1层图像的大小。这里,一般用0去作为偶数行和偶数列加入到原图像中,然后再进行高斯滤波。(注意,这里得到的重建后的第一层的图像跟原来的第一层的图像肯定不一样,因为高斯滤波丢失的信息是不可逆的)。

bubuko.com,布布扣

得到了重建后的1层图像,然后我们用原来的1层图像减去这个重建的图像,就得到了这一层的拉普拉斯金字塔图像。然后还是不断重复这个过程,就可以的得到整个的拉普拉斯图像金字塔了。

bubuko.com,布布扣

得到融合图像的过程如下:

用第n层的高斯金字塔图像加上第n层的拉普拉斯金字塔图像,然后用高斯插值的方法对这幅相加完的图像重建它第n-1层的图像。然后再用这个重建完的第n-1层的图像加上第n-1层图像的拉普拉斯金字塔图像,去重建第n-2层的图像...不断重复这个过程直到图像的大小合适。

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣


在python中,向下建立低层金子塔图像的函数是cv2.pyrDown(),重建高层金字塔图像的函数是cv2.pyrUp()。



Python-OpenCV教程-8-图像金字塔融合

标签:style   http   color   os   sp   on   问题   as   line   

原文地址:http://blog.csdn.net/poi7777/article/details/41451433

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!