From 338243fa14d314ca3fbde29e90191739e1a9ab0f Mon Sep 17 00:00:00 2001 From: hesuicong Date: Mon, 12 Jan 2026 16:01:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=8E=E4=BA=AE=E9=97=AE=E9=A2=98=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/MVS/SceneTexture.cpp | 60 ++++++++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/libs/MVS/SceneTexture.cpp b/libs/MVS/SceneTexture.cpp index ec79778..6e556e9 100644 --- a/libs/MVS/SceneTexture.cpp +++ b/libs/MVS/SceneTexture.cpp @@ -3034,13 +3034,49 @@ bool MeshTexture::CreateVirtualFaces6(FaceDataViewArr& facesDatas, FaceDataViewA // printf("CreateVirtualFace %s, %d, %f\n", strName.c_str(), virtualFaceCenterFaceID, angleLimit); if (angleDeg <= 45.0f) - { - filteredCams.push_back(idxView); + { + // filteredCams.push_back(idxView); + + //* + float brightnessScore = CalculateBrightnessScore(imageData); // 亮度评分函数 + float angleScore = 1.0f - (angleDeg / 45.0f); + float qualityScore = 0.0f; + const FaceDataArr& centerFaceDatas = facesDatas[virtualFaceCenterFaceID]; + for (const FaceData& fd : centerFaceDatas) { + if (fd.idxView == idxView) { + qualityScore = fd.quality; + break; + } + } + qualityScore = std::max(0.0f, std::min(1.0f, qualityScore)); + float overallScore = 0.5f * angleScore + 0.3f * brightnessScore + 0.2f * qualityScore; + if (overallScore > 0.4f) { + filteredCams.push_back(idxView); + } + //*/ } } else - { - filteredCams.push_back(idxView); + { + // filteredCams.push_back(idxView); + + //* + float brightnessScore = CalculateBrightnessScore(imageData); // 亮度评分函数 + float angleScore = 1.0f - (angleDeg / 60.0f); + float qualityScore = 0.0f; + const FaceDataArr& centerFaceDatas = facesDatas[virtualFaceCenterFaceID]; + for (const FaceData& fd : centerFaceDatas) { + if (fd.idxView == idxView) { + qualityScore = fd.quality; + break; + } + } + qualityScore = std::max(0.0f, std::min(1.0f, qualityScore)); + float overallScore = 0.5f * angleScore + 0.3f * brightnessScore + 0.2f * qualityScore; + if (overallScore > 0.3f) { + filteredCams.push_back(idxView); + } + //*/ } } } @@ -3359,9 +3395,8 @@ bool MeshTexture::CreateVirtualFaces6(FaceDataViewArr& facesDatas, FaceDataViewA } //*/ - if (validViewsSize<=0&&false) + if (validViewsSize<=0) { - //* // int nSize = sortedViews.size(); // (sortedViews.size() > 3) ? 3 : sortedViews.size(); // // 计算初始平均值 @@ -3476,7 +3511,6 @@ bool MeshTexture::CreateVirtualFaces6(FaceDataViewArr& facesDatas, FaceDataViewA virtualFaceData.quality = totalQuality2 / validIndices.size(); virtualFaceData.color = totalColor2 / validIndices.size(); } - //*/ } else if (validViewsSize>0&&validViewsSize<=2&&false) { @@ -3651,7 +3685,7 @@ bool MeshTexture::CreateVirtualFaces6(FaceDataViewArr& facesDatas, FaceDataViewA // if (colorDistance <= maxColorDeviation && // luminanceDistance <= maxLuminanceDeviation) - if (luminanceDistance <= maxLuminanceDeviation) + // if (luminanceDistance <= maxLuminanceDeviation) { validIndices.push_back(n); } @@ -4339,7 +4373,7 @@ bool MeshTexture::CreateVirtualFaces62(FaceDataViewArr& facesDatas, FaceDataView } qualityScore = std::max(0.0f, std::min(1.0f, qualityScore)); float overallScore = 0.5f * angleScore + 0.3f * brightnessScore + 0.2f * qualityScore; - if (overallScore > 0.15f) { + if (overallScore > 0.2f) { filteredCams.push_back(idxView); } //*/ @@ -4363,7 +4397,7 @@ bool MeshTexture::CreateVirtualFaces62(FaceDataViewArr& facesDatas, FaceDataView } qualityScore = std::max(0.0f, std::min(1.0f, qualityScore)); float overallScore = 0.5f * angleScore + 0.3f * brightnessScore + 0.2f * qualityScore; - if (overallScore > 0.15f) { + if (overallScore > 0.2f) { filteredCams.push_back(idxView); } //*/ @@ -4633,7 +4667,7 @@ bool MeshTexture::CreateVirtualFaces62(FaceDataViewArr& facesDatas, FaceDataView // if (colorDistance <= maxColorDeviation && // luminanceDistance <= maxLuminanceDeviation) - if (luminanceDistance <= maxLuminanceDeviation) + // if (luminanceDistance <= maxLuminanceDeviation) { validIndices.push_back(n); } @@ -6970,9 +7004,9 @@ bool MeshTexture::FaceViewSelection3( unsigned minCommonCameras, float fOutlierT // CreateVirtualFaces(facesDatas, virtualFacesDatas, virtualFaces, minCommonCameras); // CreateVirtualFaces3(facesDatas, virtualFacesDatas, virtualFaces, minCommonCameras); // CreateVirtualFaces4(facesDatas, virtualFacesDatas, virtualFaces, mapFaceToVirtualFace, minCommonCameras); - // CreateVirtualFaces6(facesDatas, virtualFacesDatas, virtualFaces, isVirtualFace, minCommonCameras); + CreateVirtualFaces6(facesDatas, virtualFacesDatas, virtualFaces, isVirtualFace, minCommonCameras); // CreateVirtualFaces61(facesDatas, virtualFacesDatas, virtualFaces, isVirtualFace, minCommonCameras); - CreateVirtualFaces62(facesDatas, virtualFacesDatas, virtualFaces, isVirtualFace, minCommonCameras); + // CreateVirtualFaces62(facesDatas, virtualFacesDatas, virtualFaces, isVirtualFace, minCommonCameras); TD_TIMER_STARTD(); // CreateVirtualFaces7(facesDatas, virtualFacesDatas, virtualFaces, isVirtualFace, minCommonCameras); DEBUG_EXTRA("CreateVirtualFaces7 completed: %s", TD_TIMER_GET_FMT().c_str());