同步修改代码

pull/3/head
陈增辉 2024-12-25 18:47:02 +08:00
parent ed617674fa
commit 60568818d6
6 changed files with 53 additions and 38 deletions

View File

@ -132,7 +132,7 @@ ErrorCode SARSimulationImageL1Dataset::OpenOrNew(QString folder, QString filenam
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES"); CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
GDALDriver* poDriver = GetGDALDriverManager()->GetDriverByName("ENVI"); GDALDriver* poDriver = GetGDALDriverManager()->GetDriverByName("ENVI");
std::shared_ptr<GDALDataset> poDstDS(poDriver->Create(this->ImageRasterPath.toUtf8().constData(), colCount, rowCount, 1, GDT_CFloat64, NULL)); std::shared_ptr<GDALDataset> poDstDS(poDriver->Create(this->ImageRasterPath.toUtf8().constData(), colCount, rowCount, 1, GDT_CFloat32, NULL));
GDALFlushCache((GDALDatasetH)poDstDS.get()); GDALFlushCache((GDALDatasetH)poDstDS.get());
poDstDS.reset(); poDstDS.reset();
omp_unset_lock(&lock); // omp_unset_lock(&lock); //
@ -605,7 +605,7 @@ ErrorCode SARSimulationImageL1Dataset::saveAntPos(std::shared_ptr<double> ptr)
return ErrorCode::SUCCESS; return ErrorCode::SUCCESS;
} }
std::shared_ptr<std::complex<double>> SARSimulationImageL1Dataset::getImageRaster() std::shared_ptr<std::complex<float>> SARSimulationImageL1Dataset::getImageRaster()
{ {
if (this->Rasterlevel != RasterLevel::RasterSLC) { if (this->Rasterlevel != RasterLevel::RasterSLC) {
return nullptr; return nullptr;
@ -614,7 +614,7 @@ std::shared_ptr<std::complex<double>> SARSimulationImageL1Dataset::getImageRaste
return this->getImageRaster(0, this->rowCount); return this->getImageRaster(0, this->rowCount);
} }
ErrorCode SARSimulationImageL1Dataset::saveImageRaster(std::shared_ptr<std::complex<double>> echoPtr, long startPRF, long PRFLen) ErrorCode SARSimulationImageL1Dataset::saveImageRaster(std::shared_ptr<std::complex<float>> echoPtr, long startPRF, long PRFLen)
{ {
if (!(startPRF < this->rowCount)) { if (!(startPRF < this->rowCount)) {
qDebug() << QString::fromStdString(errorCode2errInfo(ErrorCode::ECHO_L0DATA_PRFIDXOUTRANGE)); qDebug() << QString::fromStdString(errorCode2errInfo(ErrorCode::ECHO_L0DATA_PRFIDXOUTRANGE));
@ -649,8 +649,8 @@ ErrorCode SARSimulationImageL1Dataset::saveImageRaster(std::shared_ptr<std::comp
return ErrorCode::ECHO_L0DATA_ECHOFILEFORMATERROR; return ErrorCode::ECHO_L0DATA_ECHOFILEFORMATERROR;
} }
else { else {
if (gdal_datatype == GDT_CFloat64) { if (gdal_datatype == GDT_CFloat32) {
poBand->RasterIO(GF_Write, 0, startPRF, width, PRFLen, echoPtr.get(), width, PRFLen, GDT_CFloat64, 0, 0); poBand->RasterIO(GF_Write, 0, startPRF, width, PRFLen, echoPtr.get(), width, PRFLen, GDT_CFloat32, 0, 0);
GDALFlushCache((GDALDatasetH)rasterDataset.get()); GDALFlushCache((GDALDatasetH)rasterDataset.get());
} }
else { else {
@ -663,7 +663,7 @@ ErrorCode SARSimulationImageL1Dataset::saveImageRaster(std::shared_ptr<std::comp
return ErrorCode::SUCCESS; return ErrorCode::SUCCESS;
} }
std::shared_ptr<std::complex<double>> SARSimulationImageL1Dataset::getImageRaster(long startPRF, long PRFLen) std::shared_ptr<std::complex<float>> SARSimulationImageL1Dataset::getImageRaster(long startPRF, long PRFLen)
{ {
if (this->Rasterlevel != RasterLevel::RasterSLC) { if (this->Rasterlevel != RasterLevel::RasterSLC) {
return nullptr; return nullptr;
@ -695,14 +695,14 @@ std::shared_ptr<std::complex<double>> SARSimulationImageL1Dataset::getImageRaste
long width = rasterDataset->GetRasterXSize(); long width = rasterDataset->GetRasterXSize();
long height = rasterDataset->GetRasterYSize(); long height = rasterDataset->GetRasterYSize();
long band_num = rasterDataset->GetRasterCount(); long band_num = rasterDataset->GetRasterCount();
std::shared_ptr<std::complex<double>> temp = nullptr; std::shared_ptr<std::complex<float>> temp = nullptr;
if (height != this->rowCount || width != this->colCount) { if (height != this->rowCount || width != this->colCount) {
qDebug() << QString::fromStdString(errorCode2errInfo(ErrorCode::ECHO_L0DATA_ECHOFILEFORMATERROR)); qDebug() << QString::fromStdString(errorCode2errInfo(ErrorCode::ECHO_L0DATA_ECHOFILEFORMATERROR));
} }
else { else {
if (gdal_datatype == GDT_CFloat64) { if (gdal_datatype == GDT_CFloat32) {
temp = std::shared_ptr<std::complex<double>>(new std::complex<double>[PRFLen * width], delArrPtr); temp = std::shared_ptr<std::complex<float>>(new std::complex<float>[PRFLen * width], delArrPtr);
poBand->RasterIO(GF_Read, 0, startPRF, width, PRFLen, temp.get(), width, PRFLen, GDT_CFloat64, 0, 0); poBand->RasterIO(GF_Read, 0, startPRF, width, PRFLen, temp.get(), width, PRFLen, GDT_CFloat32, 0, 0);
GDALFlushCache((GDALDatasetH)rasterDataset.get()); GDALFlushCache((GDALDatasetH)rasterDataset.get());
} }
else { else {
@ -723,7 +723,7 @@ Eigen::MatrixXcd SARSimulationImageL1Dataset::getImageRasterMatrix()
} }
std::shared_ptr<std::complex<double>> data = this->getImageRaster(); std::shared_ptr<std::complex<float>> data = this->getImageRaster();
Eigen::MatrixXcd dataimg = Eigen::MatrixXcd::Zero(this->rowCount, this->colCount); Eigen::MatrixXcd dataimg = Eigen::MatrixXcd::Zero(this->rowCount, this->colCount);
for (long i = 0; i < this->rowCount; i++) { for (long i = 0; i < this->rowCount; i++) {
for (long j = 0; j < this->colCount; j++) { for (long j = 0; j < this->colCount; j++) {
@ -735,7 +735,7 @@ Eigen::MatrixXcd SARSimulationImageL1Dataset::getImageRasterMatrix()
ErrorCode SARSimulationImageL1Dataset::saveImageRaster(Eigen::MatrixXcd& dataimg, long startPRF) ErrorCode SARSimulationImageL1Dataset::saveImageRaster(Eigen::MatrixXcd& dataimg, long startPRF)
{ {
std::shared_ptr<std::complex<double>> data(new std::complex<double>[dataimg.rows()* dataimg.cols()]); std::shared_ptr<std::complex<float>> data(new std::complex<float>[dataimg.rows()* dataimg.cols()]);
long dataimgrows = dataimg.rows(); long dataimgrows = dataimg.rows();
long dataimgcols = dataimg.cols(); long dataimgcols = dataimg.cols();
for (long i = 0; i < dataimgrows; i++) { for (long i = 0; i < dataimgrows; i++) {

View File

@ -57,9 +57,9 @@ public:
std::shared_ptr<double> getAntPos(); std::shared_ptr<double> getAntPos();
ErrorCode saveAntPos(std::shared_ptr<double> ptr); // 注意这个方法很危险,请写入前检查数据是否正确 ErrorCode saveAntPos(std::shared_ptr<double> ptr); // 注意这个方法很危险,请写入前检查数据是否正确
std::shared_ptr<std::complex<double>> getImageRaster(); std::shared_ptr<std::complex<float>> getImageRaster();
ErrorCode saveImageRaster(std::shared_ptr<std::complex<double>> echoPtr, long startPRF, long PRFLen); ErrorCode saveImageRaster(std::shared_ptr<std::complex<float>> echoPtr, long startPRF, long PRFLen);
std::shared_ptr<std::complex<double>> getImageRaster(long startPRF, long PRFLen); std::shared_ptr<std::complex<float>> getImageRaster(long startPRF, long PRFLen);
Eigen::MatrixXcd getImageRasterMatrix(); Eigen::MatrixXcd getImageRasterMatrix();
ErrorCode saveImageRaster(Eigen::MatrixXcd& data, long startPRF); ErrorCode saveImageRaster(Eigen::MatrixXcd& data, long startPRF);

View File

@ -33,6 +33,9 @@
<Filter Include="BaseTool"> <Filter Include="BaseTool">
<UniqueIdentifier>{101c627b-537e-4c7f-862c-380d3f7f226f}</UniqueIdentifier> <UniqueIdentifier>{101c627b-537e-4c7f-862c-380d3f7f226f}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="GPUTool">
<UniqueIdentifier>{c39dcd9f-dfd6-4d94-8912-7a3f5f719385}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtRcc Include="RasterProcessTool.qrc"> <QtRcc Include="RasterProcessTool.qrc">
@ -210,18 +213,12 @@
<ClInclude Include="BaseTool\GeoOperator.h"> <ClInclude Include="BaseTool\GeoOperator.h">
<Filter>BaseTool</Filter> <Filter>BaseTool</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="BaseTool\GPUTool.cuh">
<Filter>BaseTool</Filter>
</ClInclude>
<ClInclude Include="BaseTool\ImageOperatorBase.h"> <ClInclude Include="BaseTool\ImageOperatorBase.h">
<Filter>BaseTool</Filter> <Filter>BaseTool</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="BaseTool\LogInfoCls.h"> <ClInclude Include="BaseTool\LogInfoCls.h">
<Filter>BaseTool</Filter> <Filter>BaseTool</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="BaseTool\QToolProcessBarDialog.h">
<Filter>BaseTool</Filter>
</ClInclude>
<ClInclude Include="BaseTool\RasterToolBase.h"> <ClInclude Include="BaseTool\RasterToolBase.h">
<Filter>BaseTool</Filter> <Filter>BaseTool</Filter>
</ClInclude> </ClInclude>
@ -231,6 +228,15 @@
<ClInclude Include="BaseTool\stdafx.h"> <ClInclude Include="BaseTool\stdafx.h">
<Filter>BaseTool</Filter> <Filter>BaseTool</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="GPUTool\GPUTool.cuh">
<Filter>GPUTool</Filter>
</ClInclude>
<ClInclude Include="GPUTool\GPURTPC.cuh">
<Filter>GPUTool</Filter>
</ClInclude>
<ClInclude Include="GPUTool\GPUTBPImage.cuh">
<Filter>GPUTool</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtMoc Include="QMergeRasterProcessDialog.h"> <QtMoc Include="QMergeRasterProcessDialog.h">
@ -309,8 +315,17 @@
</QtUic> </QtUic>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<CudaCompile Include="BaseTool\GPUTool.cu"> <CudaCompile Include="GPUTool\GPURTPC.cu">
<Filter>BaseTool</Filter> <Filter>GPUTool</Filter>
</CudaCompile>
<CudaCompile Include="GPUTool\GPUTBPImage.cu">
<Filter>GPUTool</Filter>
</CudaCompile>
<CudaCompile Include="GPUTool\GPUTool.cu">
<Filter>GPUTool</Filter>
</CudaCompile> </CudaCompile>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="cpp.hint" />
</ItemGroup>
</Project> </Project>

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>600</width> <width>995</width>
<height>400</height> <height>400</height>
</rect> </rect>
</property> </property>
@ -45,7 +45,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>D:\Programme\vs2022\RasterMergeTest\TestData\outData\GF3_Simulation.xml</string> <string>D:\Programme\vs2022\RasterMergeTest\LAMPCAE_SCANE\GF3_Simulation.xml</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -96,7 +96,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>D:\Programme\vs2022\RasterMergeTest\TestData\outBPImage2\GF3_Simulation</string> <string>D:\Programme\vs2022\RasterMergeTest\LAMPCAE_SCANE_TBPImage\GF3BPImage</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -21,12 +21,12 @@ void CreatePixelXYZ(std::shared_ptr<EchoL0Dataset> echoL0ds, QString outPixelXYZ
gt(1, 0) = 0; gt(1, 0) = 0;
gt(1, 1) = 0; gt(1, 1) = 0;
gt(1, 2) = 1; gt(1, 2) = 1;
gdalImage xyzRaster = CreategdalImage(outPixelXYZPath, prfcount, freqcount, 3, gt, QString(""), false, true); gdalImage xyzRaster = CreategdalImage(outPixelXYZPath, prfcount, freqcount, 3, gt, QString(""), false, true,true);
std::shared_ptr<double> antpos = echoL0ds->getAntPos(); std::shared_ptr<double> antpos = echoL0ds->getAntPos();
double dx = LIGHTSPEED / 2 / echoL0ds->getFs(); double dx = LIGHTSPEED / 2 / echoL0ds->getFs();
double Rnear = echoL0ds->getNearRange(); double Rnear = echoL0ds->getNearRange();
long echocol = 1073741824 / 8 / 4 / prfcount*4; long echocol = 1073741824 / 8 / 4 / prfcount*32;
std::cout << "echocol:\t " << echocol << std::endl; std::cout << "echocol:\t " << echocol << std::endl;
echocol = echocol < 3000 ? 3000 : echocol; echocol = echocol < 3000 ? 3000 : echocol;
long startcolidx = 0; long startcolidx = 0;
@ -140,7 +140,7 @@ std::shared_ptr<SARSimulationImageL1Dataset> TBPImageAlgCls::getImageL0()
ErrorCode TBPImageAlgCls::Process(long num_thread) ErrorCode TBPImageAlgCls::Process(long num_thread)
{ {
qDebug() << u8"创建成像平面的XYZ"; qDebug() << u8"创建成像平面的XYZ";
QString outRasterXYZ = JoinPath(this->L1ds->getoutFolderPath(), this->L0ds->getSimulationTaskName() + "_xyz.tif"); QString outRasterXYZ = JoinPath(this->L1ds->getoutFolderPath(), this->L0ds->getSimulationTaskName() + "_xyz.bin");
CreatePixelXYZ(this->L0ds, outRasterXYZ); CreatePixelXYZ(this->L0ds, outRasterXYZ);
this->outRasterXYZPath = outRasterXYZ; this->outRasterXYZPath = outRasterXYZ;
@ -150,7 +150,7 @@ ErrorCode TBPImageAlgCls::Process(long num_thread)
long imagewidth = this->L1ds->getcolCount(); long imagewidth = this->L1ds->getcolCount();
long blokline = Memory1GB / 8 / 4 / imageheight * 8; long blokline = Memory1GB / 8 / 4 / imageheight * 32;
blokline = blokline < 1000 ? 1000 : blokline; blokline = blokline < 1000 ? 1000 : blokline;
long startline = 0; long startline = 0;
@ -161,11 +161,11 @@ ErrorCode TBPImageAlgCls::Process(long num_thread)
} }
std::cout << "\r[" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString() << "] imgxyz :\t" << startline << "\t-\t" << startline + templine << " / " << imageheight << std::endl; std::cout << "\r[" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString() << "] imgxyz :\t" << startline << "\t-\t" << startline + templine << " / " << imageheight << std::endl;
std::shared_ptr<std::complex<double>> imageRaster = this->L1ds->getImageRaster(startline, templine); std::shared_ptr<std::complex<float>> imageRaster = this->L1ds->getImageRaster(startline, templine);
for (long i = 0; i < templine; i++) { for (long i = 0; i < templine; i++) {
for (long j = 0; j < imagewidth; j++) { for (long j = 0; j < imagewidth; j++) {
imageRaster.get()[i * imagewidth + j] = std::complex<double>(0,0); imageRaster.get()[i * imagewidth + j] = std::complex<float>(0,0);
} }
} }
this->L1ds->saveImageRaster(imageRaster, startline,templine); this->L1ds->saveImageRaster(imageRaster, startline,templine);
@ -221,10 +221,10 @@ ErrorCode TBPImageAlgCls::ProcessGPU()
// 按照回波分块,图像分块 // 按照回波分块,图像分块
long echoBlockline = Memory1GB / 8 / 2 / PlusePoints * 6; long echoBlockline = Memory1GB / 8 / 2 / PlusePoints * 4;
echoBlockline = echoBlockline < 1 ? 1 : echoBlockline; echoBlockline = echoBlockline < 1 ? 1 : echoBlockline;
long imageBlockline = Memory1GB / 8 / 2 / colCount * 2; long imageBlockline = Memory1GB / 8 / 2 / colCount * 4;
imageBlockline = imageBlockline < 1 ? 1 : imageBlockline; imageBlockline = imageBlockline < 1 ? 1 : imageBlockline;
gdalImage imageXYZ(this->outRasterXYZPath); gdalImage imageXYZ(this->outRasterXYZPath);
@ -235,13 +235,13 @@ ErrorCode TBPImageAlgCls::ProcessGPU()
if (startimgrowid + imageBlockline >= rowCount) { if (startimgrowid + imageBlockline >= rowCount) {
tempimgBlockline = rowCount - startimgrowid; tempimgBlockline = rowCount - startimgrowid;
} }
std::cout << "\r[" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString() << "] dem:\t" << startimgrowid << "\t-\t" << startimgrowid + tempimgBlockline << std::endl; std::cout << "\r[" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString() << "] image create :\t" << startimgrowid << "\t-\t" << startimgrowid + tempimgBlockline<<"\t/\t"<< rowCount << std::endl;
// 提取局部pixel x,y,z // 提取局部pixel x,y,z
std::shared_ptr<float> img_x = readDataArr<float>(imageXYZ,startimgrowid,0,tempimgBlockline,colCount,1,GDALREADARRCOPYMETHOD::VARIABLEMETHOD); std::shared_ptr<float> img_x = readDataArr<float>(imageXYZ,startimgrowid,0,tempimgBlockline,colCount,1,GDALREADARRCOPYMETHOD::VARIABLEMETHOD);
std::shared_ptr<float> img_y = readDataArr<float>(imageXYZ,startimgrowid,0,tempimgBlockline,colCount,2,GDALREADARRCOPYMETHOD::VARIABLEMETHOD); std::shared_ptr<float> img_y = readDataArr<float>(imageXYZ,startimgrowid,0,tempimgBlockline,colCount,2,GDALREADARRCOPYMETHOD::VARIABLEMETHOD);
std::shared_ptr<float> img_z = readDataArr<float>(imageXYZ,startimgrowid,0,tempimgBlockline,colCount,3,GDALREADARRCOPYMETHOD::VARIABLEMETHOD); std::shared_ptr<float> img_z = readDataArr<float>(imageXYZ,startimgrowid,0,tempimgBlockline,colCount,3,GDALREADARRCOPYMETHOD::VARIABLEMETHOD);
std::shared_ptr<std::complex<double>> imgArr = this->L1ds->getImageRaster(startimgrowid, tempimgBlockline); std::shared_ptr<std::complex<float>> imgArr = this->L1ds->getImageRaster(startimgrowid, tempimgBlockline);
// 获取回波 // 获取回波
long startechoid = 0; long startechoid = 0;
for (long startechoid = 0; startechoid < PRFCount; startechoid = startechoid + echoBlockline) { for (long startechoid = 0; startechoid < PRFCount; startechoid = startechoid + echoBlockline) {
@ -276,7 +276,7 @@ ErrorCode TBPImageAlgCls::ProcessGPU()
void TBPImageGPUAlg(std::shared_ptr<float> antPx, std::shared_ptr<float> antPy, std::shared_ptr<float> antPz, void TBPImageGPUAlg(std::shared_ptr<float> antPx, std::shared_ptr<float> antPy, std::shared_ptr<float> antPz,
std::shared_ptr<float> imgx, std::shared_ptr<float> imgy, std::shared_ptr<float> imgz, std::shared_ptr<float> imgx, std::shared_ptr<float> imgy, std::shared_ptr<float> imgz,
std::shared_ptr<std::complex<double>> echoArr, std::shared_ptr<std::complex<double>> imgArr, std::shared_ptr<std::complex<double>> echoArr, std::shared_ptr<std::complex<float>> imgArr,
float freq, float fs, float Rnear, float Rfar, float freq, float fs, float Rnear, float Rfar,
long rowcount, long colcount, long rowcount, long colcount,
long prfcount, long freqcount long prfcount, long freqcount

View File

@ -67,7 +67,7 @@ void CreatePixelXYZ(std::shared_ptr<EchoL0Dataset> echoL0ds,QString outPixelXYZP
void TBPImageProcess(QString echofile,QString outImageFolder,QString imagePlanePath,long num_thread); void TBPImageProcess(QString echofile,QString outImageFolder,QString imagePlanePath,long num_thread);
void TBPImageGPUAlg(std::shared_ptr<float> antPx, std::shared_ptr<float> antPy, std::shared_ptr<float> antPz, void TBPImageGPUAlg(std::shared_ptr<float> antPx, std::shared_ptr<float> antPy, std::shared_ptr<float> antPz,
std::shared_ptr<float> img_x, std::shared_ptr<float> img_y, std::shared_ptr<float> img_z, std::shared_ptr<float> img_x, std::shared_ptr<float> img_y, std::shared_ptr<float> img_z,
std::shared_ptr<std::complex<double>> echoArr, std::shared_ptr<std::complex<double>> img_arr, std::shared_ptr<std::complex<double>> echoArr, std::shared_ptr<std::complex<float>> img_arr,
float freq, float fs, float Rnear, float Rfar, float freq, float fs, float Rnear, float Rfar,
long rowcount, long colcount, long rowcount, long colcount,
long prfcount,long freqcount ); long prfcount,long freqcount );