import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import QPixmap import os import numpy as np import skimage as sk import skimage.io as io import numpy.linalg as lin import matplotlib.pyplot as plt import scipy as spy import esgtscipy as sc ############################################################################################################### ##### Partie Fenêtre ##### ############################################################################################################### class FirstWindow(QWidget): close_signal = pyqtSignal() def __init__(self, parent=None): super(FirstWindow, self).__init__(parent) self.resize(600, 450) self.setMaximumSize(QSize(600, 450)) self.btnfinal = QToolButton(self) self.btnfinal.setText("image finale") self.btnfinal.clicked.connect(self.finale) self.label = QLabel() layout = QVBoxLayout() layout.addWidget(self.label) self.image = QPixmap() # self.btnfinal.clicked.connect(self.finale) # Création du bouton charger self.buttonCharg = QPushButton('Charger') self.buttonCharg.clicked.connect(self.charger) self.buttonCharg.setDefault(True) # Création du menu de changement de canal self.cb = QHBoxLayout() self.cb = QComboBox() self.cb.addItems(["Image 1", "Image 2", "Image 3", "Image 4", "Image 5", "Image 6"]) self.cb.currentIndexChanged.connect(self.selectionchange) posit = QGridLayout() posit.addWidget(self.label, 0, 0) posit.addWidget(self.buttonCharg, 1, 0) posit.addWidget(self.cb, 2, 0) posit.addWidget(self.btnfinal, 3, 0) self.setLayout(posit) def selectionchange(self, i): print "Les canaux possibles sont :" for count in range(self.cb.count()): print self.cb.itemText(count) print "Canal", i, "Canal changé", self.cb.currentText() def charger(self): filename = QFileDialog.getOpenFileName(None, "Choisir une image", ".", "*.png *.jpg *.jpeg *.tif *.tiff") if filename == "": return self.image.load(filename[0]) self.label.setPixmap(self.image) self.label.setMaximumSize(1000, 600) self.label.setScaledContents(True) def analyse(image): Mat = image.reshape(6, -1) U, S, V = lin.svd(sc.ACP(Mat), full_matrices=False) Vsom = 0 for i in range(len(S)): Vsom += S[i] print(Vsom) valeur = 0 for n in range(len(S)): if valeur >= 0.8 * Vsom: break else: valeur += S[n] print(valeur) return U, S, V, n def ACP (image): img = io.imread(image) # --- Image multi-spectrale Landsat --- ncan = np.size(img, 0) # Matrice s'écrit ny = np.size(img, 1) nx = np.size(img, 2) N = ny * nx # --- Tableau des observations multi-spectrales --- # X = np.zeros((ny, nx, ncan), float) for i in range(ncan): X[:, :, i] = img[i, :, :] # # --- Affichage des canaux RGB --- # img3cp = np.zeros((np.size(img, 1), np.size(img, 2), 3), dtype=np.uint8) img3cp[:, :, 0] = (X[:, :, 2]) # Rouge img3cp[:, :, 1] = (X[:, :, 1]) # Vert img3cp[:, :, 2] = (X[:, :, 0]) # Bleu # fig = plt.figure() image = io.imshow(img3cp) fig.set_tight_layout(True) U, S, V, n = analyse(img) Mat = img.reshape(6, -1) Matfinal = V.dot(Mat) Matfinal = Matfinal.astype(int) result = Matfinal.reshape(-1, 655, 554) imagefinal = io.imshow(result[0, :, :]) plt.savefig('image1.tif', dpi=300) return 'image1.tif' def finale(self): image1.tif = ACP(self.image) pixmap = QPixmap('image1.tif') if __name__ == "__main__": App = QApplication(sys.argv) one = FirstWindow() one.show() sys.exit(App.exec_())