PointCloudLibrary / PointCloudLibrary/pcl
Texture mapping: occlusion logic of faces when projected to camera
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 11.1k
- Forks
- 4.7k
- Avg merge
- 4d 10h
- Merged PRs (30d)
- 6
Description
- PCL Version: commit dd532fe
I think there is a logic problem in texture_mapping.hpp.
code_link
if (idx_pcam == current_cam && !visibility[idx_face])
{
// we are now checking for self occlusions within the current faces
// the current face was already declared as occluded.
// therefore, it cannot occlude another face anymore => we skip it
continue;
}
We want to project all faces to a camera plane and determine which face is occluded and which one is visible.
If face A occlude face B, face B occlude face C.
Imaging we check face A first, find out that B is occluded by A, B is marked non-visible.
And then we check B, since B is non-visible, we skip.
At the end, We conclude that no faces occlude C, so C is visible, which is not true.
I don't know if i had missed something or maybe I just didn't fully understand the code.
Can someone figure it out for me? Thx.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in surface/include/pcl/surface/impl/texture_mapping.hpp around line 851 and trace how projected faces update visibility during self-occlusion checks. Reproduce the reported A→B→C chain, then verify that the occlusion logic does not skip a face in a way that incorrectly leaves C visible.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- computer-vision
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100