import os
from ImageFusion import ImageFusion
from PIL import Image
import numpy as np
import pylab as plt
import cv2
import time
all_folds1 = os.listdir(r'D:\data-5000\S-GS-500/')
all_folds2 = os.listdir(r'D:\data-5000\B-500/')
all_folds3 = os.listdir(r'D:\data-5000\C-500/')
all_folds4 = os.listdir(r'D:\data-5000\A-500/')
imList1 = []
imList2 = []
imList3 = []
imList4 = []
for s in all_folds1:
imList1.append(s)
for b in all_folds2:
imList2.append(b)
for c in all_folds3:
imList3.append(c)
for a in all_folds4:
imList4.append(a)
class FusionPCA(ImageFusion):
""" Image fusion based PCA"""
def __init__(self, imageNames):
self._imageNames = imageNames
self._images = []
self._fusionImage = None
def _load_images(self):
for name in self._imageNames:
self._images.append(cv2.imread(name))
def fusion(self):
self._load_images()
imageSize = self._images[0].size
allImage = np.concatenate((self._images[0].reshape(1, imageSize), self._images[1].reshape(1, imageSize),self._images[2].reshape(1,imageSize),self._images[3].reshape(1,imageSize)), axis=0)
covImage = np.cov(allImage)
D, V = np.linalg.eig(covImage)
D = D.tolist()
LD = max(D)
if D.index(LD) == 0:
a = V[:, 0] / V[:, 0].sum()
elif D.index(LD) == 1:
a = V[:, 1] / V[:, 1].sum()
elif D.index(LD) == 2:
a = V[:, 2] / V[:, 2].sum()
elif D.index(LD) == 3:
a = V[:, 3] / V[:, 3].sum()
self._fusionImage = self._images[0]*a[0] + self._images[1]*a[1]+self._images[2]*a[2]+self._images[3]*a[3]
return self._fusionImage
if __name__ == '__main__':
i = 1
while i <= 500:
IMAGEPATH1 = r'D:\data-5000\S-GS-500/'
IMAGEPATH2 = r'D:\data-5000\B-500/'
IMAGEPATH3 = r'D:\data-5000\C-500/'
IMAGEPATH4 = r'D:\data-5000\A-500/'
imLists = [IMAGEPATH1 + "{}.jpg".format(i), IMAGEPATH2 + "{}.jpg".format(i), IMAGEPATH3 + "{}.jpg".format(i),
IMAGEPATH4 + "{}.jpg".format(i)]
start = time.time()
fu = FusionPCA(imLists)
fu.fusion()
cv2.imwrite(r'D:\data-5000\PCA\{}.jpg'.format(i), fu.fusion())
i += 1
over = time.time()
times = over - start
print('花费时间:{}s'.format(times))