资源简介
实现两张图像融合,共两种方式,拉普拉斯金字塔融合,小波金字塔融合
代码片段和文件信息
# -*- 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试题12套(包括选择题和
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
- 基于PyQt5的视频播放器设计
- 一个简单的python爬虫
- csv文件行列转换python实现代码
- Python操作Mysql教程手册
- Python Machine Learning Case Studies
- python获取硬件信息
评论
共有 条评论