cdcseacave / openMVS

open Multi-View Stereo reconstruction library
http://cdcseacave.github.io
GNU Affero General Public License v3.0
3.28k stars 901 forks source link

Texture Brightness High Exposure #1020

Open Habsburgg opened 1 year ago

Habsburgg commented 1 year ago

Hi, for texture maps there are many area luminosity highly exposed. Is there a suitable way to reduce this phenomenon? Or is there any way to lower the weight of this region, giving priority to non-highly exposed image regions. Looking forward to your reply. 111

cdcseacave commented 1 year ago

are these highly exposed regions in the source images?

Habsburgg commented 1 year ago

are these highly exposed regions in the source images?

Yes, but there are many pictures from different angles corresponding to the same place on the model, some pictures are high exposure, some are not.

cdcseacave commented 1 year ago
  1. for best 3D reconstruction results (not only texture) images should be acquired at good, but diffuse light, and equal or close to equal exposure (constant light).
  2. since 1 is a requirement, OpenMVS does not have a good way now to select images without glossiness artifacts, in fact as it is now it is biassed to select such images
  3. help is needed to implement a better texturing algorithm, pls give a sign if interested
Habsburgg commented 1 year ago

thank you for your reply,

  1. I marked the high-exposure areas in the image as much as possible, and reduced the scores of these pixels in the view selection stage, but the effect was not good. If I have time, I will continue to study.
  2. I encountered a problem. There is still a color difference between the texturePatches. I saw that you used Poisson fusion. Why is there such a big difference? Can opencv's seamlessClone replace this function? textureBorder texture
cdcseacave commented 1 year ago

good suggestion, a different blending procedure might be better, pls try

Habsburgg commented 1 year ago

I did an experiment. Set the color of the border of the texture block to black as the boundary condition of the Poisson calculation, and the texture map result is shown in the figure. Does this mean that there is a problem with setting the edge color of the texture block in LocalSeamLeveling, causing the Poisson calculation to be wrong. I'm not sure if my guess is correct. 1111 2222

cdcseacave commented 1 year ago

Interesting experiment. However not clear to me what is the results before and after, and which edge did you set to black exactly. Can you add more screenshots?

Habsburgg commented 1 year ago

openMVS: 11 12

Habsburgg commented 1 year ago

mvs-texturing: 21 22

Habsburgg commented 1 year ago

Interesting experiment. However not clear to me what is the results before and after, and which edge did you set to black exactly. Can you add more screenshots?

I set the junction of different textures to black, and the original code is set to the average color. By comparison, I suspect that openmvs misses some border pixels, doesn't change their color, causing the poisson calculation to still use the original color, which leads to weird transition areas between different textures.

Habsburgg commented 1 year ago

This is the mask image I saved, and you can see that some edges are not set to gray "border". In the DrawLine function, "Bresenham's line algorithm" is used to calculate the texture edge pixels. Is there any problem here? Looking forward to your reply. mask2 mask1

cdcseacave commented 1 year ago

thanks for the detailed experiment a couple of thoughts:

most probably though might be a problem with drawing the line, like you say, or something related; it would be of great help if you could look into this and fix it; you could compare on how this is done in mvs-texturing