Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dense: check and resize the existed dmap file to image #1024

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

thomas-19
Copy link

for issue #1014 : add size check for existed depthmap and image. If their size not match, resize the depthmap to image size.

libs/MVS/SceneDensify.cpp Outdated Show resolved Hide resolved
libs/MVS/SceneDensify.cpp Outdated Show resolved Hide resolved
libs/MVS/SceneDensify.cpp Outdated Show resolved Hide resolved
libs/MVS/SceneDensify.cpp Outdated Show resolved Hide resolved
@@ -2107,6 +2107,28 @@ bool MVS::ImportDepthDataRaw(const String& fileName, String& imageFileName,
} // ImportDepthDataRaw
/*----------------------------------------------------------------*/

bool MVS::GetDepthMapHeaderSize(const String& fileName, cv::Size& size)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this was a interesting exercise, but function ImportDepthDataRaw() already existing could be already used for this if you set flags param to 0, pls check

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you want you can still let this function, but instead of duplicating the code just call ImportDepthDataRaw and return the only the sizes;

more useful will be to rename it to std::optional<std::pair<cv::Size, cv::Size>> GetDepthMapHeaderSizes(const String& fileName) and return both image and depth-map sizes

depthData.Load(depthMapName);
DepthMap& depthMap = depthData.depthMap;
cv::resize(depthMap, depthMap, data.scene.images[idx].GetSize(), 0, 0, cv::INTER_NEAREST);
depthData.Save(depthMapName);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is ok if you use depthData to load the depth-map, but after saving it back to disk you should release it from depthData as well

and you can combine this with the next check that loads the depth-map, and if we that check is true we do not release it

if (GetDepthMapHeaderSize(depthMapName, depthMapSize) && depthMapSize != data.scene.images[idx].GetSize()) {
depthData.Load(depthMapName);
DepthMap& depthMap = depthData.depthMap;
cv::resize(depthMap, depthMap, data.scene.images[idx].GetSize(), 0, 0, cv::INTER_NEAREST);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resizing only the depth-map is not enough, you should resize all images inside, ex normal-map, etc

if (OPTDENSE::nOptimize & OPTDENSE::OPTIMIZE) {
if (!depthData.Load(ComposeDepthFilePath(depthData.GetView().GetID(), "dmap"))) {
VERBOSE("error: invalid depth-map '%s'", ComposeDepthFilePath(depthData.GetView().GetID(), "dmap").c_str());
if (!depthData.Load(depthMapName)) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to make this compatible with the above change, modify the if like:

if (depthData.IsEmpty() && !depthData.Load(depthMapName)) {

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants