From e3bcfe3e9825117ea7cd70b6fb88f5db3a57f9a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=A2=9E=E8=BE=89?= <3045316072@qq.com> Date: Fri, 11 Apr 2025 17:39:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=87=87=E6=A0=B7=E5=B7=A5?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SARImage/ImageNetOperator.cpp | 82 +++++++++++++++++++ .../SARImage/ImageNetOperator.h | 4 +- .../QSARSimulationComplexEchoDataDialog.cpp | 32 +++++++- .../QSARSimulationComplexEchoDataDialog.ui | 4 +- 4 files changed, 115 insertions(+), 7 deletions(-) diff --git a/Toolbox/SimulationSARTool/SARImage/ImageNetOperator.cpp b/Toolbox/SimulationSARTool/SARImage/ImageNetOperator.cpp index 334bc9c..cd5078d 100644 --- a/Toolbox/SimulationSARTool/SARImage/ImageNetOperator.cpp +++ b/Toolbox/SimulationSARTool/SARImage/ImageNetOperator.cpp @@ -906,6 +906,88 @@ int ResampleEChoDataFromGeoEcho(QString L2echodataPath, QString RangeLooktablePa } +int ResampleRangeDataFromGeoImage(QString geodataPath, QString RangeLooktablePath, QString RangeDataPath) +{ + gdalImage echodata(geodataPath); + gdalImage looktable(RangeLooktablePath); + gdalImage l1adata(RangeDataPath); + Eigen::MatrixXd echoArr = echodata.getData(0, 0, echodata.height, echodata.width, 1); + + long blockHeight = Memory1GB / looktable.width / 8 * 2; + + for (long startRow = 0; startRow < looktable.height; startRow = startRow + blockHeight) { + printf("\rGEC: process:%f precent\t\t\t", startRow * 100.0 / looktable.height); + blockHeight = blockHeight + startRow < looktable.height ? blockHeight : looktable.height - startRow; + Eigen::MatrixXd imglonArr = looktable.getData(startRow, 0, blockHeight, looktable.width, 1); + Eigen::MatrixXd imglatArr = looktable.getData(startRow, 0, blockHeight, looktable.width, 2); + Eigen::MatrixXd l1aArr = l1adata.getData(0, 0, blockHeight, l1adata.width, 1); + l1aArr = l1aArr.array() * 0; + + long imgheight = blockHeight; + long imgwidth = looktable.width; +#pragma omp parallel for + for (long i = 0; i < imgheight; i++) { + + for (long j = 0; j < imgwidth; j++) { + double lon = imglonArr(i, j); + double lat = imglatArr(i, j); + Landpoint point = echodata.getRow_Col(lon, lat); + + if (point.lon<1 || point.lon>echodata.width - 2 || point.lat < 1 || point.lat >echodata.height - 2) { + continue; + } + else {} + { + Landpoint p0, p11, p21, p12, p22; + + p0.lon = point.lon; + p0.lat = point.lat; + + p11.lon = floor(p0.lon); + p11.lat = floor(p0.lat); + p11.ati = echoArr(long(p11.lat), long(p11.lon)); + + p12.lon = ceil(p0.lon); + p12.lat = floor(p0.lat); + p12.ati = echoArr(long(p12.lat), long(p12.lon)); + + p21.lon = floor(p0.lon); + p21.lat = ceil(p0.lat); + p21.ati = echoArr(long(p21.lat), long(p21.lon)); + + p22.lon = ceil(p0.lon); + p22.lat = ceil(p0.lat); + p22.ati = echoArr(long(p22.lat), long(p22.lon)); + + p0.lon = p0.lon - p11.lon; + p0.lat = p0.lat - p11.lat; + + p12.lon = p12.lon - p11.lon; + p12.lat = p12.lat - p11.lat; + + p21.lon = p21.lon - p11.lon; + p21.lat = p21.lat - p11.lat; + + p22.lon = p22.lon - p11.lon; + p22.lat = p22.lat - p11.lat; + + p11.lon = p11.lon - p11.lon; + p11.lat = p11.lat - p11.lat; + + p0.ati = Bilinear_interpolation(p0, p11, p21, p12, p22); + l1aArr(i, j)=p0.ati; + } + } + } + + l1adata.saveImage(l1aArr, startRow, 0, 1); + } + + + + return 0; +} + void InterpLookTableRfromDEM(QString lonlatPath, QString DEMPath, QString outllrpath) { gdalImage LLimg(lonlatPath); diff --git a/Toolbox/SimulationSARTool/SARImage/ImageNetOperator.h b/Toolbox/SimulationSARTool/SARImage/ImageNetOperator.h index bf329ae..59f5920 100644 --- a/Toolbox/SimulationSARTool/SARImage/ImageNetOperator.h +++ b/Toolbox/SimulationSARTool/SARImage/ImageNetOperator.h @@ -15,7 +15,9 @@ void InterploateClipAtiByRefDEM(QString ImageLLPath, QString& ImageDEMPath, QStr void InterploateAtiByRefDEM(QString& ImageLLPath, QString& ImageDEMPath, QString& outImageLLAPath, QString& InEchoGPSDataPath); int ReflectTable_WGS2Range(QString dem_rc_path, QString outOriSimTiffPath, QString ori_sim_count_tiffPath, long OriHeight, long OriWidth); -int ResampleEChoDataFromGeoEcho(QString L2echodataPath, QString RangeLooktablePath, QString L1AEchoDataPath); +int ResampleEChoDataFromGeoEcho(QString L2complexechodataPath, QString RangeLooktablePath, QString L1AEchoDataPath); + +int ResampleRangeDataFromGeoImage(QString geodataPath, QString RangeLooktablePath, QString RangeDataPath); void InterpLookTableRfromDEM(QString lonlatPath, QString DEMPath, QString outllrpath); diff --git a/Toolbox/SimulationSARTool/SARImage/QSARSimulationComplexEchoDataDialog.cpp b/Toolbox/SimulationSARTool/SARImage/QSARSimulationComplexEchoDataDialog.cpp index 39648cb..5082835 100644 --- a/Toolbox/SimulationSARTool/SARImage/QSARSimulationComplexEchoDataDialog.cpp +++ b/Toolbox/SimulationSARTool/SARImage/QSARSimulationComplexEchoDataDialog.cpp @@ -6,6 +6,8 @@ #include "BaseTool.h" #include "ImageNetOperator.h" #include +#include "FileOperator.h" +#include "ImageOperatorBase.h" QSARSimulationComplexEchoDataDialog::QSARSimulationComplexEchoDataDialog(QWidget *parent) @@ -33,7 +35,7 @@ void QSARSimulationComplexEchoDataDialog::onpushButtonEchoDataSelect_clicked() { QString fileNames = QFileDialog::getOpenFileName( this, // 父窗口 - tr(u8"选择L1A回波数据文件"), // 标题 + tr(u8"选择地距数据文件"), // 标题 QString(), // 默认路径 tr(ENVI_FILE_FORMAT_FILTER) // 文件过滤器 ); @@ -69,7 +71,7 @@ void QSARSimulationComplexEchoDataDialog::onpushButtonL1AEchoDataSelect_clicked( { QString fileNames = QFileDialog::getSaveFileName( this, // 父窗口 - tr(u8"选择L1A回波数据文件"), // 标题 + tr(u8"选择斜距数据文件"), // 标题 QString(), // 默认路径 tr(ENVI_FILE_FORMAT_FILTER) // 文件过滤器 ); @@ -89,9 +91,31 @@ void QSARSimulationComplexEchoDataDialog::onbuttonBox_accepted() QString RangelookTablePath = this->ui->lineEditLookTablePath->text().trimmed(); QString l1AEchoDataPath = this->ui->lineEditL1AEchoDataPath->text().trimmed(); + if (isExists(echoDataPath) && isExists(RangelookTablePath)) { + gdalImage echoData(echoDataPath); + gdalImage RangelookTable(RangelookTablePath); + if (echoData.getDataType() == GDT_CFloat32 + ||echoData.getDataType()==GDT_CFloat64 + || echoData.getDataType() == GDT_CInt16 + || echoData.getDataType()==GDT_CInt32 + ) { - ResampleEChoDataFromGeoEcho(echoDataPath, RangelookTablePath, l1AEchoDataPath); - QMessageBox::information(this, tr(u8"提示"), tr(u8"没有选择任何文件。")); + CreategdalImageComplex(l1AEchoDataPath, RangelookTable.height, RangelookTable.width,1, RangelookTable.gt, RangelookTable.projection, true, true); + + + ResampleEChoDataFromGeoEcho(echoDataPath, RangelookTablePath, l1AEchoDataPath); + } + else { + CreategdalImage(l1AEchoDataPath, RangelookTable.height, RangelookTable.width, 1, RangelookTable.gt, RangelookTable.projection, true, true); + ResampleRangeDataFromGeoImage(echoDataPath, RangelookTablePath, l1AEchoDataPath); + } + + QMessageBox::information(this, tr(u8"提示"), tr(u8"完成")); + } + else { + QMessageBox::information(this, tr(u8"提示"), tr(u8"没有选择任何文件。")); + } + } void QSARSimulationComplexEchoDataDialog::onbuttonBox_rejected() diff --git a/Toolbox/SimulationSARTool/SARImage/QSARSimulationComplexEchoDataDialog.ui b/Toolbox/SimulationSARTool/SARImage/QSARSimulationComplexEchoDataDialog.ui index ceed9c6..6e3e09b 100644 --- a/Toolbox/SimulationSARTool/SARImage/QSARSimulationComplexEchoDataDialog.ui +++ b/Toolbox/SimulationSARTool/SARImage/QSARSimulationComplexEchoDataDialog.ui @@ -23,7 +23,7 @@ - 鎴愬儚鏂囦欢锛 + 鍦拌窛鏂囦欢锛 @@ -98,7 +98,7 @@ - L1A鍥炴尝锛 + 鏂滆窛鏂囦欢锛