2025-03-12 04:15:26 +00:00
|
|
|
|
#include "QtSimulationGeoSARSigma0Dialog.h"
|
|
|
|
|
#include "ui_QtSimulationGeoSARSigma0Dialog.h"
|
|
|
|
|
#include <QFileDialog>
|
|
|
|
|
#include <QMessageBox>
|
|
|
|
|
#include "BaseTool.h"
|
|
|
|
|
#include "SigmaDatabase.h"
|
|
|
|
|
#include <ImageOperatorBase.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QtSimulationGeoSARSigma0Dialog::QtSimulationGeoSARSigma0Dialog(QWidget *parent)
|
|
|
|
|
: QDialog(parent), ui(new Ui::QtSimulationGeoSARSigma0DialogClass)
|
|
|
|
|
{
|
|
|
|
|
ui->setupUi(this);
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>źźͲ<C5BA>
|
|
|
|
|
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(onbtnaccepted()));
|
|
|
|
|
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(onbtnrejected()));
|
|
|
|
|
connect(ui->InputIncAngleRasterBtn, SIGNAL(clicked(bool)), this, SLOT(onpushButtonIncAngleRasterClicked(bool)));
|
|
|
|
|
connect(ui->InputLandClsRasterBtn, SIGNAL(clicked(bool)), this, SLOT(onpushButtonLandClsRasterClicked(bool)));
|
|
|
|
|
connect(ui->InputClsWeightRasterBtn, SIGNAL(clicked(bool)), this, SLOT(onpushButtonClsWeightRasterClicked(bool)));
|
|
|
|
|
connect(ui->OutputTerrianRasterBtn, SIGNAL(clicked(bool)), this, SLOT(onpushButtonOutputTerrianRasterClicked(bool)));
|
|
|
|
|
connect(ui->OutputClsSARRasterBtn, SIGNAL(clicked(bool)), this, SLOT(onpushButtonOutputClsSARRasterClicked(bool)));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QtSimulationGeoSARSigma0Dialog::~QtSimulationGeoSARSigma0Dialog()
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
void QtSimulationGeoSARSigma0Dialog::onpushButtonIncAngleRasterClicked(bool)
|
|
|
|
|
{
|
|
|
|
|
QString fileName = QFileDialog::getOpenFileName(
|
|
|
|
|
this, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
tr(u8"ѡ<EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>"), // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
QString(), // Ĭ<><C4AC>·<EFBFBD><C2B7>
|
|
|
|
|
tr(u8"tif Files (*.tif);;data Files (*.data);;bin Files (*.bin);;All Files (*)") // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
if (!fileName.isEmpty()) {
|
|
|
|
|
this->ui->InputIncAngleRasterLineEdit->setText(fileName);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
QMessageBox::information(this, tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"), tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QtSimulationGeoSARSigma0Dialog::onpushButtonLandClsRasterClicked(bool)
|
|
|
|
|
{
|
|
|
|
|
QString fileName = QFileDialog::getOpenFileName(
|
|
|
|
|
this, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
tr(u8"ѡ<EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>"), // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
QString(), // Ĭ<><C4AC>·<EFBFBD><C2B7>
|
|
|
|
|
tr(u8"tif Files (*.tif);;data Files (*.data);;bin Files (*.bin);;All Files (*)") // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
if (!fileName.isEmpty()) {
|
|
|
|
|
this->ui->InputLandClsRasterLineEdit->setText(fileName);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
QMessageBox::information(this, tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"), tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QtSimulationGeoSARSigma0Dialog::onpushButtonClsWeightRasterClicked(bool)
|
|
|
|
|
{
|
|
|
|
|
QString fileName = QFileDialog::getOpenFileName(
|
|
|
|
|
this, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
tr(u8"ѡ<EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>"), // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
QString(), // Ĭ<><C4AC>·<EFBFBD><C2B7>
|
|
|
|
|
tr(u8"tif Files (*.tif);;data Files (*.data);;bin Files (*.bin);;All Files (*)") // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
if (!fileName.isEmpty()) {
|
|
|
|
|
this->ui->InputClsWeightRasterLineEdit->setText(fileName);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
QMessageBox::information(this, tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"), tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QtSimulationGeoSARSigma0Dialog::onpushButtonOutputTerrianRasterClicked(bool)
|
|
|
|
|
{
|
|
|
|
|
QString fileName = QFileDialog::getSaveFileName(
|
|
|
|
|
this, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
tr(u8"ѡ<EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>"), // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
QString(), // Ĭ<><C4AC>·<EFBFBD><C2B7>
|
|
|
|
|
tr(u8"tif Files (*.tif);;data Files (*.data);;bin Files (*.bin);;All Files (*)") // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
if (!fileName.isEmpty()) {
|
|
|
|
|
this->ui->OutputTerrianRasterLineEdit->setText(fileName);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
QMessageBox::information(this, tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"), tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QtSimulationGeoSARSigma0Dialog::onpushButtonOutputClsSARRasterClicked(bool)
|
|
|
|
|
{
|
|
|
|
|
QString fileName = QFileDialog::getSaveFileName(
|
|
|
|
|
this, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
tr(u8"ѡ<EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>"), // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
QString(), // Ĭ<><C4AC>·<EFBFBD><C2B7>
|
|
|
|
|
tr(u8"tif Files (*.tif);;data Files (*.data);;bin Files (*.bin);;All Files (*)") // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
if (!fileName.isEmpty()) {
|
|
|
|
|
this->ui->OutputClsSARRasterLineEdit->setText(fileName);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
QMessageBox::information(this, tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"), tr(u8"û<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void QtSimulationGeoSARSigma0Dialog::onbtnaccepted()
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
QString IncAngleRaster = this->ui->InputIncAngleRasterLineEdit->text(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
QString LandClsRaster = this->ui->InputLandClsRasterLineEdit->text(); // <20><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
QString ClsWeightRaster = this->ui->InputClsWeightRasterLineEdit->text();// <20><><EFBFBD><EFBFBD> SigmaDatabase Ȩ<><C8A8><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
QString OutputTerrianRaster = this->ui->OutputTerrianRasterLineEdit->text(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>SAR<41>ļ<EFBFBD>
|
2025-03-14 06:49:13 +00:00
|
|
|
|
//QString OutputClsSARRaster = this->ui->OutputClsSARRasterLineEdit->text();// <20><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SAR<41>ļ<EFBFBD>
|
2025-03-12 04:15:26 +00:00
|
|
|
|
|
|
|
|
|
|
2025-03-14 06:49:13 +00:00
|
|
|
|
gdalImage incAngleImg(IncAngleRaster);
|
|
|
|
|
gdalImage landImg(LandClsRaster);
|
|
|
|
|
gdalImage weightImg(ClsWeightRaster);
|
|
|
|
|
gdalImage OutputTerrian=CreategdalImage(OutputTerrianRaster, incAngleImg.height, incAngleImg.width, 1, incAngleImg.gt, 4326, GDT_Float32, true, true);
|
2025-03-12 04:15:26 +00:00
|
|
|
|
|
2025-03-13 04:08:14 +00:00
|
|
|
|
|
|
|
|
|
|
2025-03-14 06:49:13 +00:00
|
|
|
|
// <20>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> incAngleImg landImg weightImg<6D><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>100<30><30>
|
|
|
|
|
int blockSize = 100;
|
|
|
|
|
int numRows = incAngleImg.height;
|
|
|
|
|
int numCols = incAngleImg.width;
|
2025-03-13 04:08:14 +00:00
|
|
|
|
|
2025-03-14 06:49:13 +00:00
|
|
|
|
double calibration = 0;
|
|
|
|
|
bool flag = false;
|
|
|
|
|
for (int row = 0; row < numRows; row += blockSize) {
|
|
|
|
|
int numRowsToProcess = std::min(blockSize, numRows - row);
|
2025-03-13 04:08:14 +00:00
|
|
|
|
|
2025-03-14 06:49:13 +00:00
|
|
|
|
Eigen::MatrixXd incAngleData = incAngleImg.getData(row, 0, numRowsToProcess, numCols, 1);
|
|
|
|
|
Eigen::MatrixXd landData = landImg.getData(row, 0, numRowsToProcess, numCols, 1);
|
|
|
|
|
Eigen::MatrixXd weightData = weightImg.getData(row, 0, numRowsToProcess, numCols, 1);
|
|
|
|
|
|
|
|
|
|
//qDebug() << "(0,0)" << incAngleData(0, 2);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < incAngleData.rows(); i++) {
|
|
|
|
|
for (int j = 0; j < incAngleData.cols(); j++) {
|
|
|
|
|
double weight = weightData(i, j);
|
|
|
|
|
double incAngle = incAngleData(i, j);
|
|
|
|
|
double weightSIgma = weight* sin(38 * d2r) / sin(incAngle * d2r);
|
|
|
|
|
|
|
|
|
|
double muhsigmaAmp=calculate_MuhlemanSigma(incAngle);
|
|
|
|
|
if ((landData(i, j) == 10|| std::abs(landData(i, j) - 10)<10||
|
|
|
|
|
landData(i, j) == 30 || std::abs(landData(i, j) - 30) < 10 ||
|
|
|
|
|
landData(i, j) == 90 || std::abs(landData(i, j) -90) < 10
|
|
|
|
|
)&&!isnan(incAngle)&&!isinf(incAngle)) {
|
|
|
|
|
//qDebug() << "muhsigmaAmp:" << muhsigmaAmp << "weightSIgma:" << weightSIgma << "weight:" << weight << "incAngle:" << incAngle;
|
|
|
|
|
calibration= (10 * log10(muhsigmaAmp))/ weightSIgma ;
|
|
|
|
|
if (!isinf(calibration) && !isnan(calibration))
|
|
|
|
|
{
|
|
|
|
|
flag = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
//alibration = weightSIgma / (10 * log10(muhsigmaAmp));
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-13 04:08:14 +00:00
|
|
|
|
}
|
2025-03-12 04:15:26 +00:00
|
|
|
|
}
|
2025-03-14 06:49:13 +00:00
|
|
|
|
|
|
|
|
|
if (flag) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int row = 0; row < numRows; row += blockSize) {
|
|
|
|
|
int numRowsToProcess = std::min(blockSize, numRows - row);
|
|
|
|
|
|
|
|
|
|
Eigen::MatrixXd incAngleData = incAngleImg.getData(row, 0, numRowsToProcess, numCols, 1);
|
|
|
|
|
Eigen::MatrixXd landData = landImg.getData(row, 0, numRowsToProcess, numCols, 1);
|
|
|
|
|
Eigen::MatrixXd weightData = weightImg.getData(row, 0, numRowsToProcess, numCols, 1);
|
|
|
|
|
Eigen::MatrixXd OutputTerrianData = OutputTerrian.getData(row, 0, numRowsToProcess, numCols, 1);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < incAngleData.rows(); i++) {
|
|
|
|
|
for (int j = 0; j < incAngleData.cols(); j++) {
|
|
|
|
|
double weight = weightData(i, j);
|
|
|
|
|
double incAngle = incAngleData(i, j);
|
|
|
|
|
double weightSIgma = weight * sin(38 * d2r) / sin(incAngle * d2r)* calibration;
|
|
|
|
|
double amp = std::pow(10, weightSIgma / 20);
|
|
|
|
|
OutputTerrianData(i, j) = amp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
OutputTerrian.saveImage(OutputTerrianData, row, 0, 1);
|
2025-03-12 04:15:26 +00:00
|
|
|
|
}
|
2025-03-14 06:49:13 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>Сһ<D0A1>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//gdalImage IncAngle(IncAngleRaster);
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
//// <20><><EFBFBD><EFBFBD>createImage<67><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//gdalImage OutputTerrian=CreategdalImage(OutputTerrianRaster, IncAngle.height, IncAngle.width, 1, IncAngle.gt, 4326, GDT_Float32, true, true);
|
|
|
|
|
//
|
|
|
|
|
//Eigen::MatrixXd IncAngleData = IncAngle.getData(0, 0, IncAngle.height, IncAngle.width,1);
|
|
|
|
|
//Eigen::MatrixXd SigmaSARData = MuhlemanSigmaArray(IncAngleData);
|
|
|
|
|
//
|
|
|
|
|
//OutputTerrian.saveImage(SigmaSARData, 0, 0, 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if (QFile(LandClsRaster).exists()) {
|
|
|
|
|
|
|
|
|
|
// QFile::copy(OutputTerrianRaster, OutputClsSARRaster);
|
|
|
|
|
// gdalImage OutputClsSAR(OutputClsSARRaster);
|
|
|
|
|
// gdalImage LandCls(LandClsRaster);
|
|
|
|
|
// SigmaDatabase sigmads;
|
|
|
|
|
// sigmads.readParamsFromFile(ClsWeightRaster.toStdString());
|
|
|
|
|
// Eigen::MatrixXd LandClsData = LandCls.getData(0, 0, LandCls.height, LandCls.width,1);
|
|
|
|
|
|
|
|
|
|
// Eigen::MatrixXd SigmaSARDataCls = SigmaSARData;
|
|
|
|
|
// for (long i = 0; i < LandClsData.rows(); i++)
|
|
|
|
|
// {
|
|
|
|
|
// for (long j = 0; j < LandClsData.cols(); j++)
|
|
|
|
|
// {
|
|
|
|
|
// double weight = sigmads.getAmpHH(LandClsData(i, j), IncAngleData(i, j) * d2r);
|
|
|
|
|
// SigmaSARDataCls(i, j) = weight;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// OutputClsSAR.saveImage(SigmaSARDataCls, 0, 0, 1);
|
|
|
|
|
//}
|
|
|
|
|
//else {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-03-12 04:15:26 +00:00
|
|
|
|
QMessageBox::information(nullptr, u8"<EFBFBD><EFBFBD>ʾ", u8"completed!!!");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QtSimulationGeoSARSigma0Dialog::onbtnrejected()
|
|
|
|
|
{
|
|
|
|
|
this->close();
|
|
|
|
|
}
|