同步工具增加

pull/10/head
陈增辉 2025-04-08 10:43:31 +08:00
parent 6d642675ee
commit d12a2b7d89
10 changed files with 541 additions and 5 deletions

View File

@ -787,11 +787,118 @@ int ReflectTable_WGS2Range(QString dem_rc_path,QString outOriSimTiffPath,QStrin
int ResampleEChoDataFromGeoEcho(QString L2echodataPath, QString RangeLooktablePath, QString L1AEchoDataPath) {
gdalImageComplex echodata(L2echodataPath);
gdalImage looktable(RangeLooktablePath);
gdalImageComplex l1adata = CreategdalImageComplexNoProj(L1AEchoDataPath, looktable.height, looktable.width, 1, true);
Eigen::MatrixXd imglonArr = looktable.getData(0, 0, looktable.height, looktable.width, 1);
Eigen::MatrixXd imglatArr = looktable.getData(0, 0, looktable.height, looktable.width, 2);
Eigen::MatrixXcd echoArr = echodata.getDataComplex(0, 0, echodata.height, echodata.width, 1);
Eigen::MatrixXcd l1aArr= l1adata.getDataComplex(0, 0, l1adata.height, l1adata.width, 1);
l1aArr = l1aArr.array() * 0;
long imgheight = looktable.height;
long imgwidth = looktable.width;
for (long i = 0; i < imgheight; i++) {
//printf("\rprocess:%f precent\t\t\t",i*100.0/imgheight);
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)).real();
p12.lon = ceil(p0.lon);
p12.lat = floor(p0.lat);
p12.ati = echoArr(long(p12.lat), long(p12.lon)).real();
p21.lon = floor(p0.lon);
p21.lat = ceil(p0.lat);
p21.ati = echoArr(long(p21.lat), long(p21.lon)).real();
p22.lon = ceil(p0.lon);
p22.lat = ceil(p0.lat);
p22.ati = echoArr(long(p22.lat), long(p22.lon)).real();
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).real(p0.ati);
}
//Ð鲿²åÖµ
{
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)).imag();
p12.lon = ceil(p0.lon);
p12.lat = floor(p0.lat);
p12.ati = echoArr(long(p12.lat), long(p12.lon)).imag();
p21.lon = floor(p0.lon);
p21.lat = ceil(p0.lat);
p21.ati = echoArr(long(p21.lat), long(p21.lon)).imag();
p22.lon = ceil(p0.lon);
p22.lat = ceil(p0.lat);
p22.ati = echoArr(long(p22.lat), long(p22.lon)).imag();
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).imag(p0.ati);
}
}
}
l1adata.saveImage(l1aArr, 0, 0, 1);
return 0;
}

View File

@ -90,8 +90,8 @@ void QSARSimulationComplexEchoDataDialog::onbuttonBox_accepted()
QString l1AEchoDataPath = this->ui->lineEditL1AEchoDataPath->text().trimmed();
ResampleEChoDataFromGeoEcho(echoDataPath, RangelookTablePath, l1AEchoDataPath);
QMessageBox::information(this, tr(u8"提示"), tr(u8"没有选择任何文件。"));
}
void QSARSimulationComplexEchoDataDialog::onbuttonBox_rejected()

View File

@ -0,0 +1,138 @@
#include "QSimulationBPImageMultiProduction.h"
#include <QFileDialog>
#include <QMessageBox>
#include "TBPImageAlgCls.h"
#include "EchoDataFormat.h"
#include <boost/thread.hpp>
#include <thread>
#include "ui_QSimulationBPImageMultiProduction.h"
QSimulationBPImageMultiProduction::QSimulationBPImageMultiProduction(QWidget *parent)
: QDialog(parent),ui(new Ui::QSimulationBPImageMultiProductionClass)
{
ui->setupUi(this);
ui->checkBox->setEnabled(false);
ui->checkBox->setCheckable(true);
ui->checkBox->setChecked(true);
QObject::connect(ui->pushButtonEchoSelect, SIGNAL(clicked()), this, SLOT(onpushButtonEchoSelectClicked()));
QObject::connect(ui->pushButtonImageSelect, SIGNAL(clicked()), this, SLOT(onpushButtonImageSelectClicked()));
QObject::connect(ui->GridNetBtn, SIGNAL(clicked()), this, SLOT(onpushButtonGridNetSelectClicked()));
QObject::connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(onbtnaccepted()));
QObject::connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(onbtnrejected()));
QObject::connect(ui->checkBox, SIGNAL(stateChanged(int)), this, SLOT(oncheckboxTrigged(int)));
}
QSimulationBPImageMultiProduction::~QSimulationBPImageMultiProduction()
{}
void QSimulationBPImageMultiProduction::onpushButtonEchoSelectClicked()
{
QString fileNames = QFileDialog::getOpenFileName(
this, // 父窗口
tr(u8"选择影像文件"), // 标题
QString(), // 默认路径
tr(u8"xml Files (*.xml);;All Files (*)") // 文件过滤器
);
// 如果用户选择了文件
if (!fileNames.isEmpty()) {
QString message = "选择的文件有:\n";
this->ui->lineEditEchoPath->setText(fileNames);
}
else {
QMessageBox::information(this, tr(u8"没有选择文件"), tr(u8"没有选择任何文件。"));
}
}
void QSimulationBPImageMultiProduction::onpushButtonImageSelectClicked()
{
QString fileNames = QFileDialog::getSaveFileName(
this, // 父窗口
tr(u8"选择影像文件"), // 标题
QString(), // 默认路径
tr(u8"All Files(*)") // 文件过滤器
);
// 如果用户选择了文件
if (!fileNames.isEmpty()) {
this->ui->lineEditImagePath->setText(fileNames);
}
else {
QMessageBox::information(this, tr(u8"没有选择文件"), tr(u8"没有选择任何文件。"));
}
}
void QSimulationBPImageMultiProduction::onbtnaccepted()
{
this->hide();
QString echofile = this->ui->lineEditEchoPath->text().trimmed();
QString outImageFolder = getParantFromPath(this->ui->lineEditImagePath->text().trimmed());
QString imagename = getFileNameFromPath(this->ui->lineEditImagePath->text().trimmed());
std::shared_ptr<EchoL0Dataset> echoL0ds(new EchoL0Dataset);
echoL0ds->Open(echofile);
std::shared_ptr< SARSimulationImageL1Dataset> imagL1(new SARSimulationImageL1Dataset);
imagL1->setCenterAngle(echoL0ds->getCenterAngle());
imagL1->setCenterFreq(echoL0ds->getCenterFreq());
imagL1->setNearRange(echoL0ds->getNearRange());
imagL1->setRefRange((echoL0ds->getNearRange() + echoL0ds->getFarRange()) / 2);
imagL1->setFarRange(echoL0ds->getFarRange());
imagL1->setFs(echoL0ds->getFs());
imagL1->setLookSide(echoL0ds->getLookSide());
if (ui->checkBox->isChecked()) {
gdalImage imgxyzimg(ui->lineEdit->text().trimmed());
imagL1->OpenOrNew(outImageFolder, imagename, imgxyzimg.height, imgxyzimg.width);
}
else {
imagL1->OpenOrNew(outImageFolder, imagename, echoL0ds->getPluseCount(), echoL0ds->getPlusePoints());
}
TBPImageAlgCls TBPimag;
TBPimag.setEchoL0(echoL0ds);
TBPimag.setImageL1(imagL1);
long cpucore_num = std::thread::hardware_concurrency();
TBPimag.setGPU(true);
TBPimag.ProcessWithGridNet(cpucore_num,ui->lineEdit->text().trimmed());
this->show();
QMessageBox::information(this,u8"成像",u8"成像结束");
}
void QSimulationBPImageMultiProduction::onbtnrejected()
{
this->close();
}
void QSimulationBPImageMultiProduction::oncheckboxTrigged(int)
{
this->ui->lineEdit->setEnabled(this->ui->checkBox->isChecked());
this->ui->GridNetBtn->setEnabled(this->ui->checkBox->isChecked());
}
void QSimulationBPImageMultiProduction::onpushButtonGridNetSelectClicked( )
{
QString fileNames = QFileDialog::getOpenFileName(
this, // 父窗口
tr(u8"选择影像文件"), // 标题
QString(), // 默认路径
tr(u8"All Files(*);;dat(*.dat);;tif(*.tif);;tiff(*.tiff)") // 文件过滤器
);
// 如果用户选择了文件
if (!fileNames.isEmpty()) {
this->ui->lineEdit->setText(fileNames);
}
else {
QMessageBox::information(this, tr(u8"没有选择文件"), tr(u8"没有选择任何文件。"));
}
}

View File

@ -0,0 +1,31 @@
#pragma once
#include "simulationsartool_global.h"
#include <QDialog>
namespace Ui {
class QSimulationBPImageMultiProductionClass;
}
class SIMULATIONSARTOOL_EXPORT QSimulationBPImageMultiProduction : public QDialog
{
Q_OBJECT
public:
QSimulationBPImageMultiProduction(QWidget *parent = nullptr);
~QSimulationBPImageMultiProduction();
public slots:
void onpushButtonEchoSelectClicked();
void onpushButtonImageSelectClicked();
void onbtnaccepted();
void onbtnrejected();
void oncheckboxTrigged(int);
void onpushButtonGridNetSelectClicked( );
private:
Ui::QSimulationBPImageMultiProductionClass* ui;
};

View File

@ -0,0 +1,210 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QSimulationBPImageMultiProductionClass</class>
<widget class="QDialog" name="QSimulationBPImageMultiProductionClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>813</width>
<height>400</height>
</rect>
</property>
<property name="windowTitle">
<string>仿真图像TimeBP方法</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>回波地址:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEditEchoPath">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>D:\Programme\vs2022\RasterMergeTest\LAMPCAE_SCANE-all-scane\GF3_Simulation.xml</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonEchoSelect">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>选择</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_3">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QCheckBox" name="checkBox">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>图像网格</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>D:\Programme\vs2022\RasterMergeTest\simulationData\demdataset\demxyz.bin</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="GridNetBtn">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>选择</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>仿真图像:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEditImagePath">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>D:\Programme\vs2022\RasterMergeTest\LAMPCAE_SCANE-all-scane\BPImage\GF3BPImage</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonImageSelect">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>选择</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>995</width>
<width>813</width>
<height>400</height>
</rect>
</property>

View File

@ -11,6 +11,7 @@
#include "ImagePlaneAtiInterpDialog.h"
#include "QCreateInSARImagePlaneXYZRDialog.h"
#include "QLookTableResampleFromWGS84ToRange.h"
#include "QSARSimulationComplexEchoDataDialog.h"
SARSimlulationRFPCToolButton::SARSimlulationRFPCToolButton(QWidget* parent)
@ -73,7 +74,7 @@ void QSimulationSAROrbitModelToolButton::excute()
void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWidget* toolbox)
{
emit toolbox->addBoxToolItemSIGNAL(new SARSimlulationRFPCToolButton(toolbox));
emit toolbox->addBoxToolItemSIGNAL(new SARSimlulationRFPCToolButton(toolbox)); // 300
emit toolbox->addBoxToolItemSIGNAL(new SARSimulationTBPImageToolButton(toolbox));
emit toolbox->addBoxToolItemSIGNAL(new QSimulationSAROrbitModelToolButton(toolbox));
emit toolbox->addBoxToolItemSIGNAL(new LookTableComputerClassToolButton(toolbox));
@ -85,6 +86,8 @@ void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWi
emit toolbox->addBoxToolItemSIGNAL(new QCreateInSARImagePlaneXYZRToolButton(toolbox));
emit toolbox->addBoxToolItemSIGNAL(new QInSARBPImageToolButton(toolbox));
emit toolbox->addBoxToolItemSIGNAL(new QLookTableResampleFromWGS84ToRangeToolButton(toolbox));
emit toolbox->addBoxToolItemSIGNAL(new QSARSimulationComplexEchoDataDialogToolButton(toolbox));
}
LookTableComputerClassToolButton::LookTableComputerClassToolButton(QWidget* parent)
@ -236,3 +239,25 @@ void QLookTableResampleFromWGS84ToRangeToolButton::run()
QLookTableResampleFromWGS84ToRange* dialog = new QLookTableResampleFromWGS84ToRange;
dialog->show();
}
//QSARSimulationComplexEchoDataDialog
QSARSimulationComplexEchoDataDialogToolButton::QSARSimulationComplexEchoDataDialogToolButton(QWidget* parent)
{
this->toolPath = QVector<QString>(0);
this->toolPath.push_back(u8"냥獗묏야욋");
this->toolname = QString(u8"쀼꺼럽꽃湳묏야(꿎桿)");
}
QSARSimulationComplexEchoDataDialogToolButton::~QSARSimulationComplexEchoDataDialogToolButton()
{
}
void QSARSimulationComplexEchoDataDialogToolButton::run()
{
QSARSimulationComplexEchoDataDialog* dialog = new QSARSimulationComplexEchoDataDialog;
dialog->show();
}

View File

@ -13,6 +13,10 @@ namespace LAMPMainWidget {
class ToolBoxWidget;
extern "C" SIMULATIONSARTOOL_EXPORT void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWidget* toolbox);
class SIMULATIONSARTOOL_EXPORT SARSimlulationRFPCToolButton : public QToolAbstract {
Q_OBJECT
@ -150,6 +154,15 @@ public:
};
extern "C" SIMULATIONSARTOOL_EXPORT void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWidget* toolbox);
class SIMULATIONSARTOOL_EXPORT QSARSimulationComplexEchoDataDialogToolButton : public QToolAbstract {
Q_OBJECT
public:
QSARSimulationComplexEchoDataDialogToolButton(QWidget* parent = nullptr);
~QSARSimulationComplexEchoDataDialogToolButton();
public:
virtual void run() override;
};

View File

@ -220,6 +220,7 @@
<ClCompile Include="SARImage\InitCreateImageXYZDialog.cpp" />
<ClCompile Include="SARImage\QCreateInSARImagePlaneXYZRDialog.cpp" />
<ClCompile Include="SARImage\QSARSimulationComplexEchoDataDialog.cpp" />
<ClCompile Include="SARImage\QSimulationBPImageMultiProduction.cpp" />
<ClCompile Include="SimulationSAR\QEcoherentAndAdditive.cpp" />
<ClCompile Include="SimulationSAR\QImageSARRFPC.cpp" />
<ClCompile Include="SimulationSAR\QSARLookTableSimualtionGUI.cpp" />
@ -252,6 +253,7 @@
<QtMoc Include="SARImage\ImagePlaneAtiInterpDialog.h" />
<QtMoc Include="SARImage\QCreateInSARImagePlaneXYZRDialog.h" />
<QtMoc Include="SARImage\QSARSimulationComplexEchoDataDialog.h" />
<QtMoc Include="SARImage\QSimulationBPImageMultiProduction.h" />
<ClInclude Include="SimulationSARToolAPI.h" />
<ClInclude Include="simulationsartool_global.h" />
<QtMoc Include="SimulationSAR\QImageSARRFPC.h" />
@ -292,6 +294,7 @@
<QtUic Include="SARImage\InitCreateImageXYZDialog.ui" />
<QtUic Include="SARImage\QCreateInSARImagePlaneXYZRDialog.ui" />
<QtUic Include="SARImage\QSARSimulationComplexEchoDataDialog.ui" />
<QtUic Include="SARImage\QSimulationBPImageMultiProduction.ui" />
<QtUic Include="SimulationSAR\QEcoherentAndAdditive.ui" />
<QtUic Include="SimulationSAR\QImageSARRFPC.ui" />
<QtUic Include="SimulationSAR\QSARLookTableSimualtionGUI.ui" />

View File

@ -154,6 +154,9 @@
<ClCompile Include="SARImage\QSARSimulationComplexEchoDataDialog.cpp">
<Filter>SARImage</Filter>
</ClCompile>
<ClCompile Include="SARImage\QSimulationBPImageMultiProduction.cpp">
<Filter>SARImage</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtUic Include="SimulationSAR\QImageSARRFPC.ui">
@ -201,6 +204,9 @@
<QtUic Include="SARImage\QSARSimulationComplexEchoDataDialog.ui">
<Filter>SARImage</Filter>
</QtUic>
<QtUic Include="SARImage\QSimulationBPImageMultiProduction.ui">
<Filter>SARImage</Filter>
</QtUic>
</ItemGroup>
<ItemGroup>
<QtMoc Include="SimulationSAR\QImageSARRFPC.h">
@ -251,6 +257,9 @@
<QtMoc Include="SARImage\QSARSimulationComplexEchoDataDialog.h">
<Filter>SARImage</Filter>
</QtMoc>
<QtMoc Include="SARImage\QSimulationBPImageMultiProduction.h">
<Filter>SARImage</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<CudaCompile Include="SimulationSAR\GPURFPC.cu">