处理色差和印染问题
This commit is contained in:
1 parent
72176c2f28
commit
0f36dd536c
1 file changed
+23
-15
+23
-15
@@ -2959,7 +2959,7 @@ void MeshTexture::CreateVirtualFaces6(FaceDataViewArr& facesDatas, FaceDataViewA
|
|||||||
}
|
}
|
||||||
|
|
||||||
float maxLuminance = 150.0f;
|
float maxLuminance = 150.0f;
|
||||||
float minLuminance = 20.0f;
|
float minLuminance = 80.0f;
|
||||||
if (bHasInvalidView)
|
if (bHasInvalidView)
|
||||||
{
|
{
|
||||||
if (validViews.size()<=0)
|
if (validViews.size()<=0)
|
||||||
@@ -3000,28 +3000,47 @@ void MeshTexture::CreateVirtualFaces6(FaceDataViewArr& facesDatas, FaceDataViewA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//*
|
||||||
|
if (validIndices.empty()) {
|
||||||
|
for (int n = 0; n < nSize; ++n) {
|
||||||
|
const Color& viewColor = sortedViews[n].second;
|
||||||
|
float viewLuminance = MeshTexture::GetLuminance(viewColor);
|
||||||
|
|
||||||
|
if ((viewLuminance<=maxLuminance)&&
|
||||||
|
(viewLuminance>=minLuminance)){
|
||||||
|
validIndices.push_back(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
float maxColorDeviation2 = 0.05f;
|
||||||
if (validIndices.empty()) {
|
if (validIndices.empty()) {
|
||||||
for (int n = 0; n < nSize; ++n) {
|
for (int n = 0; n < nSize; ++n) {
|
||||||
const Color& viewColor = sortedViews[n].second;
|
const Color& viewColor = sortedViews[n].second;
|
||||||
float colorDistance = cv::norm(avgColor - viewColor);
|
float colorDistance = cv::norm(avgColor - viewColor);
|
||||||
|
|
||||||
if (colorDistance <= maxColorDeviation) {
|
if (colorDistance <= maxColorDeviation2) {
|
||||||
validIndices.push_back(n);
|
validIndices.push_back(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//*/
|
||||||
|
|
||||||
|
/*
|
||||||
float totalLuminance = MeshTexture::GetLuminance(totalColor);
|
float totalLuminance = MeshTexture::GetLuminance(totalColor);
|
||||||
float avgLuminance = totalLuminance / nSize;
|
float avgLuminance = totalLuminance / nSize;
|
||||||
for (int n = 0; n < nSize; ++n) {
|
for (int n = 0; n < nSize; ++n) {
|
||||||
const Color& viewColor = sortedViews[n].second;
|
const Color& viewColor = sortedViews[n].second;
|
||||||
float viewLuminance = MeshTexture::GetLuminance(viewColor);
|
float viewLuminance = MeshTexture::GetLuminance(viewColor);
|
||||||
float luminanceDistance = cv::norm(avgLuminance - viewLuminance);
|
float luminanceDistance = cv::norm(avgLuminance - viewLuminance);
|
||||||
// printf("luminanceDistance=%f\n", luminanceDistance);
|
|
||||||
if (luminanceDistance <= maxLuminanceDeviation) {
|
if (luminanceDistance <= maxLuminanceDeviation) {
|
||||||
// validIndices.push_back(n);
|
validIndices.push_back(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//*/
|
||||||
|
|
||||||
// 如果所有视图都被排除,保留原始平均值
|
// 如果所有视图都被排除,保留原始平均值
|
||||||
if (validIndices.empty()) {
|
if (validIndices.empty()) {
|
||||||
@@ -3029,17 +3048,6 @@ void MeshTexture::CreateVirtualFaces6(FaceDataViewArr& facesDatas, FaceDataViewA
|
|||||||
// virtualFaceData.color = avgColor;
|
// virtualFaceData.color = avgColor;
|
||||||
// virtualFaceData.quality = avgQuality;
|
// virtualFaceData.quality = avgQuality;
|
||||||
// virtualFaceData.color = sortedLuminViews[0].second;
|
// virtualFaceData.color = sortedLuminViews[0].second;
|
||||||
|
|
||||||
for (int n = 0; n < nSize; ++n) {
|
|
||||||
float lumin = sortedLuminViews[n].first;
|
|
||||||
|
|
||||||
if (lumin>=minLuminance&&lumin<=maxLuminance)
|
|
||||||
{
|
|
||||||
// virtualFaceData.quality = avgQuality;
|
|
||||||
// virtualFaceData.color = sortedLuminViews[0].second;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// 使用过滤后的视图重新计算平均值
|
// 使用过滤后的视图重新计算平均值
|
||||||
|
|||||||
Reference in new issue
Block a user