Browse Source

两轮填数据方式

master
hesuicong 2 weeks ago
parent
commit
ec1a89b078
  1. 76
      libs/MVS/SceneTexture.cpp

76
libs/MVS/SceneTexture.cpp

@ -5715,7 +5715,7 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
// 如果夹角小于45度(cos(45°) ≈ 0.7071),则计入覆盖 // 如果夹角小于45度(cos(45°) ≈ 0.7071),则计入覆盖
float fAngleThreshold1 = 0.6071; // 0.7071f float fAngleThreshold1 = 0.6071; // 0.7071f
float fAngleThreshold2 = 0.7071; // 0.7071f float fAngleThreshold2 = 0.8571; // 0.7071f
// 初始化数据结构 // 初始化数据结构
std::vector<bool> processedFaces(faces.size(), false); std::vector<bool> processedFaces(faces.size(), false);
@ -5723,7 +5723,7 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
DEBUG_EXTRA("开始新的虚拟面片创建逻辑: 基于视图排序"); DEBUG_EXTRA("开始新的虚拟面片创建逻辑: 基于视图排序");
/* //*
// 1. 计算每个视图的覆盖情况 // 1. 计算每个视图的覆盖情况
Util::Progress progress1(_T("计算视图覆盖"), images.size()); Util::Progress progress1(_T("计算视图覆盖"), images.size());
for (IIndex idxView = 0; idxView < images.size(); ++idxView) { for (IIndex idxView = 0; idxView < images.size(); ++idxView) {
@ -5835,8 +5835,8 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
DEBUG_EXTRA("排序后视图数量: %zu,最大覆盖: %d, 共%d", viewCoverage.size(), DEBUG_EXTRA("排序后视图数量: %zu,最大覆盖: %d, 共%d", viewCoverage.size(),
viewCoverage.empty() ? 0 : viewCoverage[0].second, totalCoverage); viewCoverage.empty() ? 0 : viewCoverage[0].second, totalCoverage);
//*/
*/
float thMaxColorDeviation = 130.0f; float thMaxColorDeviation = 130.0f;
const float ratioAngleToQuality(0.67f); const float ratioAngleToQuality(0.67f);
@ -6003,14 +6003,14 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
if (scene.is_face_edge(strName, virtualFaceCenterFaceID)) if (scene.is_face_edge(strName, virtualFaceCenterFaceID))
{ {
// if (angleDeg <= 20.0f) if (angleDeg <= 30.0f)
{ {
mapSortedcams2[idxView] = angleDeg; mapSortedcams2[idxView] = angleDeg;
} }
} }
else else
{ {
// if (angleDeg <= 40.0f) if (angleDeg <= 60.0f)
{ {
mapSortedcams2[idxView] = angleDeg; mapSortedcams2[idxView] = angleDeg;
} }
@ -6047,34 +6047,11 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
IIndexArr filteredCams; IIndexArr filteredCams;
int nViewCoverage = 0; int nViewCoverage = 0;
int nViewCoverageMax = 20; int nViewCoverageMax = 200;
int nHit = 0; int nHit = 0;
int nHitMax = 10; int nHitMax = 1;
for (size_t i = 0; i < sortedCams2.size(); ++i) std::map<IIndex, IIndex> mapProcessedViewIdx;
{ //*
if (nViewCoverage>=nViewCoverageMax)
// if (nHit>nHitMax)
break;
IIndex viewIdx = sortedCams2[i].first;
float val = sortedCams2[i].second;
const Image& imageData = images[viewIdx];
std::string strPath = imageData.name;
std::string strName = MeshTexture::GetFileNameWithoutExtension(strPath);
// if (!scene.is_face_delete_edge2(strName, virtualFaceCenterFaceID))
{
filteredCams.push_back(viewIdx);
++nHit;
if (nHit>=nHitMax)
break;
}
++nViewCoverage;
}
/*
for (const auto& [viewIdx, coverageCount] : viewCoverage) { for (const auto& [viewIdx, coverageCount] : viewCoverage) {
if (nViewCoverage>=nViewCoverageMax) if (nViewCoverage>=nViewCoverageMax)
// if (nHit>nHitMax) // if (nHit>nHitMax)
@ -6116,6 +6093,7 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
if (!scene.is_face_delete_edge2(strName, virtualFaceCenterFaceID)) if (!scene.is_face_delete_edge2(strName, virtualFaceCenterFaceID))
{ {
filteredCams.push_back(viewIdx); filteredCams.push_back(viewIdx);
mapProcessedViewIdx[viewIdx] = viewIdx;
++nHit; ++nHit;
if (nHit>=nHitMax) if (nHit>=nHitMax)
@ -6125,7 +6103,39 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
++nViewCoverage; ++nViewCoverage;
} }
*/ //*/
nViewCoverage = 0;
nViewCoverageMax = 200;
nHit = 0;
nHitMax = 5;
for (size_t i = 0; i < sortedCams2.size(); ++i)
{
if (nViewCoverage>=nViewCoverageMax)
// if (nHit>nHitMax)
break;
IIndex viewIdx = sortedCams2[i].first;
float val = sortedCams2[i].second;
if (mapProcessedViewIdx.count(viewIdx) > 0)
continue;
const Image& imageData = images[viewIdx];
std::string strPath = imageData.name;
std::string strName = MeshTexture::GetFileNameWithoutExtension(strPath);
// if (!scene.is_face_delete_edge2(strName, virtualFaceCenterFaceID))
{
filteredCams.push_back(viewIdx);
++nHit;
if (nHit>=nHitMax)
break;
}
++nViewCoverage;
}
if (filteredCams.empty()) { if (filteredCams.empty()) {
size_t count = std::min(sortedCams.size(), static_cast<size_t>(3)); size_t count = std::min(sortedCams.size(), static_cast<size_t>(3));

Loading…
Cancel
Save