-
Notifications
You must be signed in to change notification settings - Fork 0
/
gui.py
151 lines (109 loc) · 4.68 KB
/
gui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
from numpy import copy
from Resizer import Resizer as rz
from QNMatrix import QNMatrix as qm
from LocalDCT import LocalDCT as ldct
import scipy.misc as misc
import matplotlib.pyplot as plt
from Tkinter import *
import tkFileDialog
import tkMessageBox
class GUI:
def __init__(self, master):
# Initialize variables
self.image = []
self.image_resized = []
self.image_final = []
self.matrix_qn = []
# Create the GUI
self.master = master
master.title("Compressione con la DCT2")
self.label = Label(master, text="Inserisci il percorso dell'Immagine")
self.label.pack()
self.imagePath = Text(master, height=1, width=30)
self.imagePath.pack()
self.imagePath.config(highlightbackground='Gray')
self.imagePath.insert(END, '')
self.greet_button = Button(master, text="Seleziona Immagine", command=self.openImage)
self.greet_button.pack()
self.label = Label(master, text="Inserisci il valore di N:")
self.label.pack()
self.nInput = Text(master, height=1, width=10)
self.nInput.pack()
self.nInput.config(highlightbackground='Gray')
self.nInput.insert(END, "")
self.label = Label(master, text="Inserisci il valore di Qualita:")
self.label.pack()
self.qualityInput = Text(master, height=1, width=10)
self.qualityInput.pack()
self.qualityInput.config(highlightbackground='Gray')
self.qualityInput.insert(END, "")
self.process_button = Button(master, text="Esegui Compressione", command=self.execute)
self.process_button.pack()
def openImage(self):
path = tkFileDialog.askopenfilename()
if path.strip() != '':
self.imagePath.delete('1.0', 'end')
self.imagePath.insert("1.0", path)
def execute(self):
# Save all output to file
sys.stdout = open('Results.txt', 'w')
# Check if image field is not empty
if self.imagePath.get('1.0', 'end').strip() != '':
# Check if N and Quality values are not empty
if self.nInput.get('1.0', 'end').strip() == '':
tkMessageBox.showwarning("Valore N", "Inserisci un valore numerico N")
elif self.qualityInput.get('1.0', 'end').strip() == '':
tkMessageBox.showwarning("Qualita", "Inserisci un valore numerico di Qualita")
else:
# Get input image
self.image = misc.imread(self.imagePath.get('1.0', 'end').strip()).astype(float)
# Get N and Quality values
value_n = int(self.nInput.get('1.0', 'end').strip())
value_quality = int(self.qualityInput.get('1.0', 'end').strip())
# Check quality value
if value_quality > 100:
value_quality = 100
elif value_quality < 0:
value_quality = 0
print 'Valore N:', value_n
print 'Valore Qualita:', value_quality
# Resize image to the new dimension
resizer = rz(self.image, value_n)
self.image_resized = resizer.get_image_resized()
# Get the QN Matrix
matrix_q = qm(value_n, value_quality)
self.matrix_qn = matrix_q.get_qn()
# Initialize Local DCT Class
compression = ldct(copy(self.image_resized), self.matrix_qn, value_n)
# Execute DCT2
compression.local_dct()
# Execute Quantization
compression.local_quantization()
# Execute de-quantization
compression.local_dequantization()
# Execute I-DCT2
compression.local_idct()
# Get the final compressed image
self.image_final = compression.get_image_compressed()
self.show_results()
else:
tkMessageBox.showwarning("Apertura Immagine", "Selezionare una immagine .bmp")
def show_results(self):
# Create the new figure
figure = plt.figure()
# Put the resize image
before = figure.add_subplot(1, 2, 1)
plt.imshow(self.image_resized, cmap=plt.cm.gray)
before.set_title('Ridimensionata')
# Put the compressed image
after = figure.add_subplot(1, 2, 2)
plt.imshow(self.image_final, cmap=plt.cm.gray)
after.set_title('Compressa')
# Show results
figure.show()
if __name__ == "__main__":
window = Tk()
GUI(window)
window.resizable(width=FALSE, height=FALSE)
window.geometry('{}x{}'.format(250, 200))
window.mainloop()