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

Loading…
Cancel
Save