资源简介
实现两张图像融合,共两种方式,拉普拉斯金字塔融合,小波金字塔融合
代码片段和文件信息
# -*- coding: utf-8 -*-
“““
Created on Wed Oct 31 15:56:33 2018
“““
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import cv2
from math import log
from PIL import Image
import datetime
import pywt
# 以下强行用Python宏定义变量
halfWindowSize=9
src1_path = ‘F:\\python\\1.jpg‘
src2_path = ‘F:\\python\\2.jpg‘
‘‘‘
来自敬忠良,肖刚,李振华《图像融合——理论与分析》P85:基于像素清晰度的融合规则
1,用Laplace金字塔或者是小波变换,将图像分解成高频部分和低频部分两个图像矩阵
2,以某个像素点为中心开窗,该像素点的清晰度定义为窗口所有点((高频/低频)**2).sum()
3,目前感觉主要的问题在于低频
4,高频取清晰度图像中较大的那个图的高频图像像素点
5,算法优化后速度由原来的2min.44s.变成9s.305ms.
补充:书上建议开窗大小10*10,DWT取3层,Laplace金字塔取2层
‘‘‘
def imgOpen(img_src1img_src2):
apple=Image.open(img_src1).convert(‘L‘)
orange=Image.open(img_src2).convert(‘L‘)
appleArray=np.array(apple)
orangeArray=np.array(orange)
return appleArrayorangeArray
# 严格的变换尺寸
def _sameSize(img_stdimg_cvt):
xy=img_std.shape
pic_cvt=Image.fromarray(img_cvt)
pic_cvt.resize((xy))
return np.array(pic_cvt)
# 小波变换的层数不能太高,Image模块的resize不能变换太小的矩阵,不相同大小的矩阵在计算对比度时会数组越界
def getWaveImg(appleorange):
appleWave=pywt.wavedec2(apple‘haar‘level=2)
orangeWave=pywt.wavedec2(orange‘haar‘level=2)
lowApple=appleWave[0];lowOrange=orangeWave[0]
lowAppleWidthlowAppleHeight=lowApple.shape
lowOrangeWidthlowOrangeWidth=lowOrange.shape
# 以下处理低频
lowAppleWeightlowOrangeWeight = getVarianceWeight(lowApplelowOrange)
lowFusion = lowAppleWeight*lowApple + lowOrangeWeight*lowOrange
# 以下处理高频
for hi in range(13):
waveRec=[]
for highApplehighOrange in zip(appleWave[hi]orangeWave[hi]):
highAppWidthhighAppHeight=highApple.shape
highOrangeWidthhighOrangeHeight=highOrange.shape
highFusion = np.zeros(highApple.shape)
contrastApple = getContrastImg(lowApplehighApple)
contrastOrange = getContrastImg(lowOrangehighOrange)
rowcol = highApple.shape
for i in xrange(row):
for j in xrange(col):
if contrastApple[ij] > contrastOrange[ij]:
highFusion[ij] = highApple[ij]
else:
highFusion[ij] = highOrange[ij]
waveRec.append(highFusion)
recwave=(lowFusiontuple(waveRec))
lowFusion=pywt.idwt2(recwave‘haar‘)
lowApple=lowFusion;lowOrange=lowFusion
return lowFusion
# 求Laplace金字塔
def getLaplacePyr(img):
firstLevel=img.copy()
secondLevel=cv2.pyrDown(firstLevel)
lowFreq=cv2.pyrUp(secondLevel)
highFreq=cv2.subtract(firstLevel_sameSize(firstLevellowFreq))
return lowFreqhighFreq
# 计算对比度,优化后不需要这个函数了,扔在这里看看公式就行
def _getContrastValue(highWinlowWin):
rowcol = highWin.shape
contrastValue = 0.00
for i in xrange(row):
for j in xrange(col):
contrastValue += (float(highWin[ij])/lowWin[ij])**2
return contrastVal
相关资源
- python实现SGBM图像匹配算法
- python实现灰度直方图均衡化
- scrapy_qunar_one
- Python学习全系列教程永久可用
- python简明教程.chm
- 抽奖大转盘python的图形化界面
- 双边滤波器实验报告及代码python
- python +MYSQL+HTML实现21蛋糕网上商城
- Python-直播答题助手自动检测出题搜索
- OpenCV入门教程+OpenCV官方教程中文版
- Python 串口工具源码+.exe文件
- Python开发的全栈股票系统.zip
- Python操作Excel表格并将其中部分数据写
- python书籍 PDF
- 利用python绘制散点图
- python+labview+No1.vi
- 老男孩python项目实战
- python源码制作whl文件.rar
- python3.5可用的scipy
- PYTHON3 经典50案例.pptx
- 计算机科学导论-python.pdf
- python模拟鼠标点击屏幕
- windows鼠标自动点击py脚本
- 鱼c小甲鱼零基础学python全套课后题和
- Python 练习题100道
- Practical Programming 2nd Edition
- wxPython Application Development Cookbook
- python 3.6
- Python 3.5.2 中文文档 互联网唯一CHM版本
- python3.5.2.chm官方文档
评论
共有 条评论