Compare commits

5 Commits

Author SHA1 Message Date
0936506e37 v2.2.1add:能够通过光谱bin1空间bin1的定标文件生成光谱bin2空间bin1的定标文件 2023-07-28 11:20:31 +08:00
32ccb25a0e add:
(1)在生成的300tc定标文件中添加生成时间;
(2)添加版本号:2.1;
2023-07-27 13:35:31 +08:00
fe8e2441c9 1. 融合300tc和hpi定标程序;
2. add:300tc中,从spatial bin1和spectral bin1的定标文件生成其他bin2的定标文件;
2023-07-27 11:50:05 +08:00
da52f56111 注释代码 2023-06-24 21:35:11 +08:00
96c0da3c36 1. 使用scipy.interpolate.interp1d重采样能量曲线到影像的波段;
2. 修改:使用spectral.envi.read_envi_header读取envi头文件;
2023-06-24 21:33:36 +08:00
5 changed files with 686 additions and 211 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
/.idea /.idea
*.xlsx *.xlsx
*.cal *.cal
testdata
# Byte-compiled / optimized / DLL files # Byte-compiled / optimized / DLL files
__pycache__/ __pycache__/

View File

@ -8,8 +8,13 @@ import sys, os, traceback, re
import shutil import shutil
from radiance_calibration_ui import Ui_MainWindow from radiance_calibration_ui import Ui_MainWindow
from library.multithread import Worker from library.multithread import Worker
from library.image_reader_writer import ImageReaderWriter
import sys, traceback import sys, traceback
from osgeo import gdal from osgeo import gdal
from scipy.interpolate import interp1d
import spectral
import time
import copy
from PyQt5.QtWidgets import QMainWindow, QFileDialog, QApplication from PyQt5.QtWidgets import QMainWindow, QFileDialog, QApplication
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
@ -21,6 +26,7 @@ class EnterWindow(QMainWindow, Ui_MainWindow):
self.setupUi(self) self.setupUi(self)
self.radiance_calibration_object = RadianceCalibration() self.radiance_calibration_object = RadianceCalibration()
self.changeBinForCorning_object = ChangeBinForCorning()
# self.setWindowState(Qt.WindowMaximized) # 初始化时就最大化窗口 # self.setWindowState(Qt.WindowMaximized) # 初始化时就最大化窗口
@ -28,14 +34,26 @@ class EnterWindow(QMainWindow, Ui_MainWindow):
self.dn_bt.clicked.connect(self.select_dn) self.dn_bt.clicked.connect(self.select_dn)
self.dark_bt.clicked.connect(self.select_dark) self.dark_bt.clicked.connect(self.select_dark)
self.out_file_bt.clicked.connect(self.select_out_file) self.out_file_bt.clicked.connect(self.select_out_file)
self.calfile_bin1_bt.clicked.connect(self.select_calfile_changebin)
self.out_calfile_bt.clicked.connect(self.select_out_file_changebin)
self.operate_bt.clicked.connect(self.operate) self.operate_bt.clicked.connect(self.operate)
self.dark_checkBox.stateChanged.connect(self.disabledDark)
self.tmp_rad_file_path = None # 用于保存当前路径,下次打开就默认在此路径下 self.tmp_rad_file_path = None # 用于保存当前路径,下次打开就默认在此路径下
self.tmp_dn_file_path = None # 用于保存当前路径,下次打开就默认在此路径下 self.tmp_dn_file_path = None # 用于保存当前路径,下次打开就默认在此路径下
self.tmp_dark_file_path = None # 用于保存当前路径,下次打开就默认在此路径下 self.tmp_dark_file_path = None # 用于保存当前路径,下次打开就默认在此路径下
self.tmp_out_file_path = None # 用于保存当前路径,下次打开就默认在此路径下 self.tmp_out_file_path = None # 用于保存当前路径,下次打开就默认在此路径下
self.spatialbin_comboBox.addItem("1")
# self.spatialbin_comboBox.addItem("2")
# self.spectral_comboBox.addItem("1")
self.spectral_comboBox.addItem("2")
self.change_bin_operate_bt.clicked.connect(self.operate_changebin)
def select_rad(self): def select_rad(self):
if self.tmp_rad_file_path == None: if self.tmp_rad_file_path == None:
rad_file_path = QFileDialog.getOpenFileName(self, '选择asd辐亮度文件', os.path.dirname(__file__))[0] rad_file_path = QFileDialog.getOpenFileName(self, '选择asd辐亮度文件', os.path.dirname(__file__))[0]
@ -88,8 +106,32 @@ class EnterWindow(QMainWindow, Ui_MainWindow):
self.radiance_calibration_object.out_file_path = out_file_path self.radiance_calibration_object.out_file_path = out_file_path
self.out_file_le.setText(out_file_path) self.out_file_le.setText(out_file_path)
def select_calfile_changebin(self):
tmp = QFileDialog.getExistingDirectory(self, 'bin1定标文件夹', os.path.dirname(__file__))
self.changeBinForCorning_object.calfile_path = tmp
self.calfile_bin1_le.setText(tmp)
def select_out_file_changebin(self):
tmp = QFileDialog.getExistingDirectory(self, '选择输出路径', os.path.dirname(__file__))
self.changeBinForCorning_object.out_file_path = tmp
self.out_calfile_changebin_le.setText(tmp)
def operate(self): def operate(self):
if(self.dark_checkBox.isChecked()):
self.radiance_calibration_object.operate() self.radiance_calibration_object.operate()
else:
self.radiance_calibration_object.operate_without_dark()
def operate_changebin(self):
self.changeBinForCorning_object.spatialbin = int(self.spatialbin_comboBox.currentText())
self.changeBinForCorning_object.spectralbin = int(self.spectral_comboBox.currentText())
self.changeBinForCorning_object.changebin()
def disabledDark(self, isEnable):
self.dark_le.setEnabled(isEnable)
self.dark_bt.setEnabled(isEnable)
class RadianceCalibration(): class RadianceCalibration():
@ -142,8 +184,17 @@ class RadianceCalibration():
return os.path.splitext(file_path)[0] + ".bip.hdr" return os.path.splitext(file_path)[0] + ".bip.hdr"
def write_fields_to_hdrfile(self, fields, hdr_file): def write_fields_to_hdrfile(self, fields, hdr_file):
header_tmp = spectral.envi.read_envi_header(hdr_file)
fields['generated time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
with open(hdr_file, "a", encoding='utf-8') as f: with open(hdr_file, "a", encoding='utf-8') as f:
for key in fields.keys(): for key in fields.keys():
if key in header_tmp or key == "description":
continue
if type(fields[key]) == list:
f.write(key + " = {" + ", ".join(fields[key]) + "}\n")
else:
f.write(key + " = " + fields[key] + "\n") f.write(key + " = " + fields[key] + "\n")
def process_hdr(self, hdr_file_path, envi_header_dict): def process_hdr(self, hdr_file_path, envi_header_dict):
@ -193,9 +244,23 @@ class RadianceCalibration():
# 读取影像 # 读取影像
img_proj, img_geotrans, self.img_data = self.read_img(self.dn_file_path) img_proj, img_geotrans, self.img_data = self.read_img(self.dn_file_path)
dn_hdr = self.get_envi_header_dict(self.get_hdr_filename(self.dn_file_path)) # dn_hdr = self.get_envi_header_dict(self.get_hdr_filename(self.dn_file_path))
dn_hdr = spectral.envi.read_envi_header(self.get_hdr_filename(self.dn_file_path))
img_dark_proj, img_dark_geotrans, self.img_dark_data = self.read_img(self.dark_file_path) img_dark_proj, img_dark_geotrans, self.img_dark_data = self.read_img(self.dark_file_path)
dark_hdr = self.get_envi_header_dict(self.get_hdr_filename(self.dark_file_path)) # dark_hdr = self.get_envi_header_dict(self.get_hdr_filename(self.dark_file_path))
dark_hdr = spectral.envi.read_envi_header(self.get_hdr_filename(self.dark_file_path))
# 重采样
f = interp1d(self.asd_radiance[:, 0], self.asd_radiance[:, 1])
# wave_destination = dn_hdr["wavelength"].removeprefix("{").removesuffix("}").split(",")
asd_radiance_interpolated = [f(float(i)) for i in dn_hdr["wavelength"]]
asd_radiance_interpolated2 = np.array(asd_radiance_interpolated)
# notuse = np.zeros((asd_radiance_interpolated2.shape[0], 2))
# notuse[:, 0] = np.array([float(i) for i in dn_hdr["wavelength"]])
# notuse[:, 1] =asd_radiance_interpolated2
# np.savetxt(os.path.join(self.out_file_path, "asd_radiance_interpolated.txt"), notuse)
# 将影像所有行平均,得到一行(帧)影像 # 将影像所有行平均,得到一行(帧)影像
img_data_ave = np.mean(self.img_data, axis=1) img_data_ave = np.mean(self.img_data, axis=1)
@ -203,12 +268,11 @@ class RadianceCalibration():
# 去除暗电流 # 去除暗电流
img_data_ave_rmdark = img_data_ave - img_dark_data_ave img_data_ave_rmdark = img_data_ave - img_dark_data_ave
img_dark_data_ave = img_dark_data_ave + 50
gain = np.empty((img_data_ave_rmdark.shape[0], 1, img_data_ave_rmdark.shape[1])) gain = np.empty((img_data_ave_rmdark.shape[0], 1, img_data_ave_rmdark.shape[1]))
offset = np.empty((img_data_ave_rmdark.shape[0], 1, img_data_ave_rmdark.shape[1])) offset = np.empty((img_data_ave_rmdark.shape[0], 1, img_data_ave_rmdark.shape[1]))
for i in range(gain.shape[2]): for i in range(gain.shape[2]):
gain[:, 0, i] = self.asd_radiance[:, 1] / img_data_ave_rmdark[:, i] gain[:, 0, i] = asd_radiance_interpolated2 / img_data_ave_rmdark[:, i]
offset[:, 0, i] = img_dark_data_ave[:, i] offset[:, 0, i] = img_dark_data_ave[:, i]
gain_name = os.path.join(self.out_file_path, "gain.bip") gain_name = os.path.join(self.out_file_path, "gain.bip")
@ -228,19 +292,137 @@ class RadianceCalibration():
# 读取影像 # 读取影像
img_proj, img_geotrans, self.img_data = self.read_img(self.dn_file_path) img_proj, img_geotrans, self.img_data = self.read_img(self.dn_file_path)
dn_hdr = spectral.envi.read_envi_header(self.get_hdr_filename(self.dn_file_path))
# 重采样
f = interp1d(self.asd_radiance[:, 0], self.asd_radiance[:, 1])
# wave_destination = dn_hdr["wavelength"].removeprefix("{").removesuffix("}").split(",")
asd_radiance_interpolated = [f(float(i)) for i in dn_hdr["wavelength"]]
asd_radiance_interpolated2 = np.array(asd_radiance_interpolated)
# 将影像所有行平均,得到一行(帧)影像 # 将影像所有行平均,得到一行(帧)影像
img_data_ave = np.mean(self.img_data, axis=1) img_data_ave = np.mean(self.img_data, axis=1)
gain = np.empty((img_data_ave.shape[0], 1, img_data_ave.shape[1])) gain = np.empty((img_data_ave.shape[0], 1, img_data_ave.shape[1]))
for i in range(gain.shape[2]): for i in range(gain.shape[2]):
gain[:, 0, i] = self.asd_radiance[:, 1] / img_data_ave[:, i] gain[:, 0, i] = asd_radiance_interpolated2 / img_data_ave[:, i]
self.write_img(self.out_file_path, gain) gain_name = os.path.join(self.out_file_path, "gain.bip")
ImageReaderWriter.write_img(gain_name, gain)
# self.write_img(gain_name, gain)
except: except:
traceback.print_exc() traceback.print_exc()
class ChangeBinForCorning():
def __init__(self):
self.calfile_path = None
self.out_file_path = None
self.spatialbin = None
self.spectralbin = None
def get_hdr_filename(self, file_path):
return os.path.splitext(file_path)[0] + ".hdr"
def get_hdr_filename_with_bip(self, file_path):
return os.path.splitext(file_path)[0] + ".bip.hdr"
def write_img(self, dst_filename, data):
format = "ENVI"
driver = gdal.GetDriverByName(format)
RasterXSize = data.shape[2] # 遥感影像的sample列数
RasterYSize = data.shape[1] # 遥感影像的line行数
band = data.shape[0]
# driver.Create()函数中RasterXSize代表影像的sample列数RasterYSize代表影像的line行数
dst_ds = driver.Create(dst_filename, RasterXSize, RasterYSize, band, gdal.GDT_Float64,
options=["INTERLEAVE=BIP"])
for i in range(band):
dst_ds.GetRasterBand(i + 1).WriteArray(data[i, :, :]) # gdal的band从1开始所以dst_ds.GetRasterBand(i+1)
dst_ds = None
def write_fields_to_hdrfile(self, fields, hdr_file):
header_tmp = spectral.envi.read_envi_header(hdr_file)
fields['generated time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
with open(hdr_file, "a", encoding='utf-8') as f:
for key in fields.keys():
if key in header_tmp or key == "description":
continue
if type(fields[key]) == list:
f.write(key + " = {" + ", ".join(fields[key]) + "}\n")
else:
f.write(key + " = " + fields[key] + "\n")
def process_hdr(self, hdr_file_path, envi_header_dict):
self.write_fields_to_hdrfile(envi_header_dict, self.get_hdr_filename(hdr_file_path))
shutil.copyfile(self.get_hdr_filename(hdr_file_path), self.get_hdr_filename_with_bip(hdr_file_path))
os.remove(self.get_hdr_filename(hdr_file_path))
def changebin(self):
gain_name_in = os.path.join(self.calfile_path, "gain.bip")
offset_name_in = os.path.join(self.calfile_path, "offset.bip")
img_proj, img_geotrans, img_data = ImageReaderWriter.read_img(gain_name_in)
img_proj1, img_geotrans1, img_dark = ImageReaderWriter.read_img(offset_name_in)
in_hdr_dict = spectral.envi.read_envi_header(self.get_hdr_filename_with_bip(gain_name_in))
if in_hdr_dict["spectral binning"] != "1" and in_hdr_dict["sample binning"] != "1":
print("输入定标文件不是bin1。")
return
if self.spatialbin == 1 and self.spectralbin == 1:
print("Bin1 is not need to convert.")
return
if self.spatialbin == 1 and self.spectralbin == 2:
samples = int(in_hdr_dict["samples"])
if int(in_hdr_dict["bands"]) % 2 == 0:
bands = int(int(in_hdr_dict["bands"]) / 2)
else:
print("Bands is not divisible by 2.")
return
out_hdr_dict = copy.deepcopy(in_hdr_dict)
out_hdr_dict["bands"] = str(bands)
out_hdr_dict["spectral binning"] = str(2)
wave = []
gain = np.empty((bands, 1, samples))
dark = np.empty((bands, 1, samples))
for i in range(gain.shape[0]):
gain[i, :, :] = (img_data[2 * i, :, :] + img_data[2 * i + 1, :, :]) / 2
dark[i, :, :] = (img_dark[2 * i, :, :] + img_dark[2 * i + 1, :, :]) / 2
tmp = (float(out_hdr_dict["wavelength"][2 * i]) + float(out_hdr_dict["wavelength"][2 * i + 1])) / 2
wave.append(str(round(tmp, 3)))
out_hdr_dict["wavelength"] = wave
gain_name = os.path.join(self.out_file_path, "gain.bip")
offset_name = os.path.join(self.out_file_path, "offset.bip")
self.write_img(gain_name, gain)
self.process_hdr(gain_name, out_hdr_dict)
self.write_img(offset_name, dark)
self.process_hdr(offset_name, out_hdr_dict)
if self.spatialbin == 2 and self.spectralbin == 2:
samples = int(in_hdr_dict["samples"])
if int(in_hdr_dict["bands"]) % 2 == 0:
bands = int(int(in_hdr_dict["bands"]) / 2)
else:
print("Bands is not divisible by 2.")
return
# # 空间bin
# gain = np.empty((300, 1, 688))
# for i in range(gain.shape[2]):
# if i <= 683:
# gain[:, :, i] = img_data[:, :, i*2] # 丢弃
# else:
# gain[:, :, i] = img_data[:, :, 683] # 重复
if __name__ == '__main__': if __name__ == '__main__':
app = QApplication(sys.argv) app = QApplication(sys.argv)

View File

@ -73,6 +73,7 @@ class EnterWindow(QMainWindow, Ui_MainWindow):
self.out_file_le.setText(out_file_path) self.out_file_le.setText(out_file_path)
def operate(self): def operate(self):
self.radiance_calibration_object.operate() self.radiance_calibration_object.operate()
@ -94,6 +95,7 @@ class RadianceCalibration():
# 读取asd辐亮度数据 # 读取asd辐亮度数据
data = pd.read_csv(self.asd_radiance_file_path, sep='\t', dtype=np.float64, header=None) data = pd.read_csv(self.asd_radiance_file_path, sep='\t', dtype=np.float64, header=None)
self.asd_radiance = np.array(data) self.asd_radiance = np.array(data)
# 读取影像 # 读取影像
img_proj, img_geotrans, self.img_data = ImageReaderWriter.read_img(self.dn_file_path) img_proj, img_geotrans, self.img_data = ImageReaderWriter.read_img(self.dn_file_path)

View File

@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'radiance_calibration_ui.ui' # Form implementation generated from reading ui file 'radiance_calibration_ui.ui'
# #
# Created by: PyQt5 UI code generator 5.13.0 # Created by: PyQt5 UI code generator 5.15.7
# #
# WARNING! All changes made in this file will be lost! # WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
@ -13,12 +14,18 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object): class Ui_MainWindow(object):
def setupUi(self, MainWindow): def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow") MainWindow.setObjectName("MainWindow")
MainWindow.resize(964, 621) MainWindow.resize(1153, 696)
self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget") self.centralwidget.setObjectName("centralwidget")
self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_2.setObjectName("gridLayout_2") self.gridLayout_2.setObjectName("gridLayout_2")
self.frame = QtWidgets.QFrame(self.centralwidget) self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.gridLayout_3 = QtWidgets.QGridLayout(self.tab)
self.gridLayout_3.setObjectName("gridLayout_3")
self.frame = QtWidgets.QFrame(self.tab)
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame") self.frame.setObjectName("frame")
@ -73,6 +80,12 @@ class Ui_MainWindow(object):
self.dn_bt.setObjectName("dn_bt") self.dn_bt.setObjectName("dn_bt")
self.gridLayout.addWidget(self.dn_bt, 1, 2, 1, 1) self.gridLayout.addWidget(self.dn_bt, 1, 2, 1, 1)
self.dark_checkBox = QtWidgets.QCheckBox(self.frame) self.dark_checkBox = QtWidgets.QCheckBox(self.frame)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.dark_checkBox.sizePolicy().hasHeightForWidth())
self.dark_checkBox.setSizePolicy(sizePolicy)
self.dark_checkBox.setChecked(True)
self.dark_checkBox.setObjectName("dark_checkBox") self.dark_checkBox.setObjectName("dark_checkBox")
self.gridLayout.addWidget(self.dark_checkBox, 2, 0, 1, 1) self.gridLayout.addWidget(self.dark_checkBox, 2, 0, 1, 1)
self.dark_le = QtWidgets.QLineEdit(self.frame) self.dark_le = QtWidgets.QLineEdit(self.frame)
@ -120,14 +133,100 @@ class Ui_MainWindow(object):
self.out_file_bt.setSizePolicy(sizePolicy) self.out_file_bt.setSizePolicy(sizePolicy)
self.out_file_bt.setObjectName("out_file_bt") self.out_file_bt.setObjectName("out_file_bt")
self.gridLayout.addWidget(self.out_file_bt, 3, 2, 1, 1) self.gridLayout.addWidget(self.out_file_bt, 3, 2, 1, 1)
self.gridLayout_2.addWidget(self.frame, 0, 0, 1, 1) self.gridLayout_3.addWidget(self.frame, 0, 0, 1, 1)
self.operate_bt = QtWidgets.QPushButton(self.centralwidget) self.operate_bt = QtWidgets.QPushButton(self.tab)
self.operate_bt.setMaximumSize(QtCore.QSize(16777215, 60)) self.operate_bt.setMaximumSize(QtCore.QSize(16777215, 60))
self.operate_bt.setObjectName("operate_bt") self.operate_bt.setObjectName("operate_bt")
self.gridLayout_2.addWidget(self.operate_bt, 1, 0, 1, 1) self.gridLayout_3.addWidget(self.operate_bt, 1, 0, 1, 1)
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.gridLayout_4 = QtWidgets.QGridLayout(self.tab_2)
self.gridLayout_4.setObjectName("gridLayout_4")
self.label_2 = QtWidgets.QLabel(self.tab_2)
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.gridLayout_4.addWidget(self.label_2, 0, 0, 1, 1)
self.calfile_bin1_le = QtWidgets.QLineEdit(self.tab_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.calfile_bin1_le.sizePolicy().hasHeightForWidth())
self.calfile_bin1_le.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(18)
self.calfile_bin1_le.setFont(font)
self.calfile_bin1_le.setReadOnly(True)
self.calfile_bin1_le.setObjectName("calfile_bin1_le")
self.gridLayout_4.addWidget(self.calfile_bin1_le, 0, 1, 1, 1)
self.calfile_bin1_bt = QtWidgets.QPushButton(self.tab_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.calfile_bin1_bt.sizePolicy().hasHeightForWidth())
self.calfile_bin1_bt.setSizePolicy(sizePolicy)
self.calfile_bin1_bt.setObjectName("calfile_bin1_bt")
self.gridLayout_4.addWidget(self.calfile_bin1_bt, 0, 2, 1, 1)
self.label_5 = QtWidgets.QLabel(self.tab_2)
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
self.label_5.setObjectName("label_5")
self.gridLayout_4.addWidget(self.label_5, 1, 0, 1, 1)
self.spatialbin_comboBox = QtWidgets.QComboBox(self.tab_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.spatialbin_comboBox.sizePolicy().hasHeightForWidth())
self.spatialbin_comboBox.setSizePolicy(sizePolicy)
self.spatialbin_comboBox.setStyleSheet("")
self.spatialbin_comboBox.setEditable(False)
self.spatialbin_comboBox.setCurrentText("")
self.spatialbin_comboBox.setObjectName("spatialbin_comboBox")
self.gridLayout_4.addWidget(self.spatialbin_comboBox, 1, 1, 1, 1)
self.label_6 = QtWidgets.QLabel(self.tab_2)
self.label_6.setAlignment(QtCore.Qt.AlignCenter)
self.label_6.setObjectName("label_6")
self.gridLayout_4.addWidget(self.label_6, 2, 0, 1, 1)
self.spectral_comboBox = QtWidgets.QComboBox(self.tab_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.spectral_comboBox.sizePolicy().hasHeightForWidth())
self.spectral_comboBox.setSizePolicy(sizePolicy)
self.spectral_comboBox.setObjectName("spectral_comboBox")
self.gridLayout_4.addWidget(self.spectral_comboBox, 2, 1, 1, 1)
self.label_7 = QtWidgets.QLabel(self.tab_2)
self.label_7.setAlignment(QtCore.Qt.AlignCenter)
self.label_7.setObjectName("label_7")
self.gridLayout_4.addWidget(self.label_7, 3, 0, 1, 1)
self.out_calfile_changebin_le = QtWidgets.QLineEdit(self.tab_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.out_calfile_changebin_le.sizePolicy().hasHeightForWidth())
self.out_calfile_changebin_le.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(18)
self.out_calfile_changebin_le.setFont(font)
self.out_calfile_changebin_le.setReadOnly(True)
self.out_calfile_changebin_le.setObjectName("out_calfile_changebin_le")
self.gridLayout_4.addWidget(self.out_calfile_changebin_le, 3, 1, 1, 1)
self.out_calfile_bt = QtWidgets.QPushButton(self.tab_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.out_calfile_bt.sizePolicy().hasHeightForWidth())
self.out_calfile_bt.setSizePolicy(sizePolicy)
self.out_calfile_bt.setObjectName("out_calfile_bt")
self.gridLayout_4.addWidget(self.out_calfile_bt, 3, 2, 1, 1)
self.change_bin_operate_bt = QtWidgets.QPushButton(self.tab_2)
self.change_bin_operate_bt.setMaximumSize(QtCore.QSize(16777215, 60))
self.change_bin_operate_bt.setObjectName("change_bin_operate_bt")
self.gridLayout_4.addWidget(self.change_bin_operate_bt, 4, 0, 1, 3)
self.tabWidget.addTab(self.tab_2, "")
self.gridLayout_2.addWidget(self.tabWidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget) MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 964, 26)) self.menubar.setGeometry(QtCore.QRect(0, 0, 1153, 23))
self.menubar.setObjectName("menubar") self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar) MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar = QtWidgets.QStatusBar(MainWindow)
@ -135,17 +234,37 @@ class Ui_MainWindow(object):
MainWindow.setStatusBar(self.statusbar) MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow) self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow): def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) MainWindow.setWindowTitle(_translate("MainWindow", "Corning Calibration v2.2.1"))
self.label.setText(_translate("MainWindow", "ASD辐亮度")) self.label.setText(_translate("MainWindow", "能量"))
self.rad_bt.setText(_translate("MainWindow", "浏览...")) self.rad_bt.setText(_translate("MainWindow", "浏览..."))
self.label_3.setText(_translate("MainWindow", "DN")) self.label_3.setText(_translate("MainWindow", "DN"))
self.dn_bt.setText(_translate("MainWindow", "浏览...")) self.dn_bt.setText(_translate("MainWindow", "浏览..."))
self.dark_checkBox.setText(_translate("MainWindow", "dark_checkBox")) self.dark_checkBox.setText(_translate("MainWindow", "dark_300tc"))
self.dark_bt.setText(_translate("MainWindow", "浏览...")) self.dark_bt.setText(_translate("MainWindow", "浏览..."))
self.label_4.setText(_translate("MainWindow", "输出路径")) self.label_4.setText(_translate("MainWindow", "输出路径"))
self.out_file_bt.setText(_translate("MainWindow", "浏览...")) self.out_file_bt.setText(_translate("MainWindow", "浏览..."))
self.operate_bt.setText(_translate("MainWindow", "执行")) self.operate_bt.setText(_translate("MainWindow", "执行"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "rad cal"))
self.label_2.setText(_translate("MainWindow", "bin1 cal file"))
self.calfile_bin1_bt.setText(_translate("MainWindow", "浏览..."))
self.label_5.setText(_translate("MainWindow", "spatial bin"))
self.label_6.setText(_translate("MainWindow", "spectral bin"))
self.label_7.setText(_translate("MainWindow", "out"))
self.out_calfile_bt.setText(_translate("MainWindow", "浏览..."))
self.change_bin_operate_bt.setText(_translate("MainWindow", "执行"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "change bin"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

View File

@ -6,15 +6,25 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>964</width> <width>1153</width>
<height>621</height> <height>696</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>MainWindow</string> <string>Corning Calibration v2.2.1</string>
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>rad cal</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QFrame" name="frame"> <widget class="QFrame" name="frame">
<property name="frameShape"> <property name="frameShape">
@ -27,7 +37,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>ASD辐亮度</string> <string>能量</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
@ -108,8 +118,14 @@
</item> </item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QCheckBox" name="dark_checkBox"> <widget class="QCheckBox" name="dark_checkBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>dark</string> <string>dark_300tc</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
@ -209,12 +225,167 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>change bin</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>bin1 cal file</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="calfile_bin1_le">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>18</pointsize>
</font>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="calfile_bin1_bt">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>浏览...</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>spatial bin</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="spatialbin_comboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="editable">
<bool>false</bool>
</property>
<property name="currentText">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>spectral bin</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="spectral_comboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>out</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="out_calfile_changebin_le">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>18</pointsize>
</font>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="out_calfile_bt">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>浏览...</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="3">
<widget class="QPushButton" name="change_bin_operate_bt">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>60</height>
</size>
</property>
<property name="text">
<string>执行</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar"> <widget class="QMenuBar" name="menubar">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>964</width> <width>1153</width>
<height>23</height> <height>23</height>
</rect> </rect>
</property> </property>