Browse Source

进一步优化

ManualUV
hesuicong 2 weeks ago
parent
commit
974095dafa
  1. 29
      libs/MVS/SceneTexture.cpp

29
libs/MVS/SceneTexture.cpp

@ -15826,6 +15826,21 @@ void MeshTexture::ApplyGlobalSeamLevelingOnRCPatches(
scene.mesh.ListIncidenteFaceFaces(); scene.mesh.ListIncidenteFaceFaces();
seamEdges.clear(); seamVertices.clear(); seamEdges.clear(); seamVertices.clear();
// // 填充 faceToPatchID
// faceToPatchID.assign(scene.mesh.faces.size(), NO_ID);
// for (size_t pi = 0; pi < rcPatches.size(); ++pi) {
// if (rcToTexPatch[pi] == NO_ID) continue;
// uint32_t texPatchID = rcToTexPatch[pi];
// for (FIndex vfID : rcPatches[pi].faces) {
// if (vfID >= virtualFaceMap.size()) continue;
// for (FIndex fid : virtualFaceMap[vfID].faces) {
// if (fid < faceToPatchID.size())
// faceToPatchID[fid] = texPatchID;
// }
// }
// }
BuildSeamEdgesFromFaceToPatchID(); BuildSeamEdgesFromFaceToPatchID();
CreateSeamVertices(); CreateSeamVertices();
@ -15845,6 +15860,7 @@ void MeshTexture::ApplyGlobalSeamLevelingOnRCPatches(
} }
} }
} }
// faceTexcoords = localFaceTexcoords;
DEBUG_EXTRA("Bridge done: %zu texturePatches ready, calling GlobalSeamLeveling4...", numValidPatches); DEBUG_EXTRA("Bridge done: %zu texturePatches ready, calling GlobalSeamLeveling4...", numValidPatches);
@ -16344,6 +16360,12 @@ bool MeshTexture::RasterizeVirtualFaces(
cv::Mat patch; cv::Mat patch;
cv::remap(srcImg.image, patch, mapX, mapY, cv::INTER_NEAREST, cv::BORDER_CONSTANT, cv::Scalar(0,0,0)); cv::remap(srcImg.image, patch, mapX, mapY, cv::INTER_NEAREST, cv::BORDER_CONSTANT, cv::Scalar(0,0,0));
// ============================================================
// ★ 光度校正:光栅化阶段不再应用 gain
// GSL4 会统一做全局颜色优化,这里乘了会导致双重校正
// 如果后续不走 GSL4 流程,可以把下面 false 改为 true 恢复
// ============================================================
#if 0 // ← 改为 1 可临时恢复光栅化时乘 gain
// 应用光度校正 // 应用光度校正
const cv::Vec3f& gain = (viewID < (IIndex)m_imageGains.size()) ? m_imageGains[viewID] : cv::Vec3f(1,1,1); const cv::Vec3f& gain = (viewID < (IIndex)m_imageGains.size()) ? m_imageGains[viewID] : cv::Vec3f(1,1,1);
const bool applyGain = (gain != cv::Vec3f(1,1,1)); const bool applyGain = (gain != cv::Vec3f(1,1,1));
@ -16358,6 +16380,7 @@ bool MeshTexture::RasterizeVirtualFaces(
} }
} }
} }
#endif
// 写入 atlas(最高分胜出) // 写入 atlas(最高分胜出)
#pragma omp critical (atlas_write) #pragma omp critical (atlas_write)
@ -16376,9 +16399,9 @@ bool MeshTexture::RasterizeVirtualFaces(
// ★ 已删除错误放在这里的 m_texelPatchID.assign(...) // ★ 已删除错误放在这里的 m_texelPatchID.assign(...)
if (currentScore > m_texelScores[idx].score) { if (currentScore > m_texelScores[idx].score) {
color[0] = cv::saturate_cast<uchar>(std::min(255.0f, color[0] * 1.05f)); color[0] = cv::saturate_cast<uchar>(std::min(255.0f, color[0] * 1.0f));
color[1] = cv::saturate_cast<uchar>(std::min(255.0f, color[1] * 1.05f)); color[1] = cv::saturate_cast<uchar>(std::min(255.0f, color[1] * 1.0f));
color[2] = cv::saturate_cast<uchar>(std::min(255.0f, color[2] * 1.05f)); color[2] = cv::saturate_cast<uchar>(std::min(255.0f, color[2] * 1.0f));
// atlas(atlasY, atlasX) = Pixel8U{color[2], color[1], color[0]}; // atlas(atlasY, atlasX) = Pixel8U{color[2], color[1], color[0]};
if (atlasY >= 0 && atlasY < atlas.rows && atlasX >= 0 && atlasX < atlas.cols) { if (atlasY >= 0 && atlasY < atlas.rows && atlasX >= 0 && atlasX < atlas.cols) {

Loading…
Cancel
Save