@@ -124,7 +124,7 @@ bool prepareDenseScene(const SfMData& sfmData,
124124 const double medianCameraExposure = sfmData.getMedianCameraExposureSetting ().getExposure ();
125125 ALICEVISION_LOG_INFO (" Median Camera Exposure: " << medianCameraExposure << " , Median EV: " << std::log2 (1.0 /medianCameraExposure));
126126
127- const LandmarksPerView landmarksPerView = getLandmarksPerViews (sfmData);
127+ const LandmarksPerView& landmarksPerView = getLandmarksPerViews (sfmData);
128128
129129 #pragma omp parallel for num_threads(3)
130130 for (int i = 0 ; i < viewIds.size (); ++i)
@@ -250,49 +250,54 @@ bool prepareDenseScene(const SfMData& sfmData,
250250 }
251251
252252 image::Image<unsigned char > maskLandmarks;
253- if (landmarksMaskScale > 0 .f )
253+ bool doMaskLandmarks = landmarksMaskScale > 0 .f ;
254+ if (doMaskLandmarks)
254255 {
255- const LandmarkIdSet& landmarksSet = landmarksPerView.at (viewId);
256256 image::Image<RGBAfColor> image;
257257 readImage (srcImage, image, image::EImageColorSpace::LINEAR);
258- maskLandmarks = image::Image<unsigned char >(image.Width (), image.Height (), true , 0 );
258+ // for the T camera, image alpha should be at least 0.4f * 255 (masking)
259+ maskLandmarks = image::Image<unsigned char >(image.Width (), image.Height (), true , 127 );
259260 int r = (int )(landmarksMaskScale * 0 .5f * (image.Width () + image.Height ()));
260- for (const auto & landmarkId : landmarksSet)
261+ const auto & landmarksSetIt = landmarksPerView.find (viewId);
262+ if (landmarksSetIt != landmarksPerView.end ())
261263 {
262- const sfmData::Landmark& landmark = sfmData.getLandmarks ().at (landmarkId);
263- Observation obs = landmark.observations .at (viewId);
264- // maskLandmarks(obs.x.y(), obs.x.x()) = 1;
265- for (int y = std::max (obs.x .y () - r, 0 .);
266- y <= std::min (obs.x .y () + r, (double )maskLandmarks.Height () - 1 ); y++)
264+ const LandmarkIdSet& landmarksSet = landmarksSetIt->second ;
265+ for (const auto & landmarkId : landmarksSet)
267266 {
268- for (int x = std::max (obs.x .x () - r, 0 .);
269- x <= std::min (obs.x .x () + r, (double )maskLandmarks.Width () - 1 ); x++)
267+ const sfmData::Landmark& landmark = sfmData.getLandmarks ().at (landmarkId);
268+ Observation obs = landmark.observations .at (viewId);
269+ for (int y = std::max (obs.x .y () - r, 0 .);
270+ y <= std::min (obs.x .y () + r, (double )maskLandmarks.Height () - 1 ); y++)
270271 {
271- maskLandmarks (y, x) = 1 ;
272+ for (int x = std::max (obs.x .x () - r, 0 .);
273+ x <= std::min (obs.x .x () + r, (double )maskLandmarks.Width () - 1 ); x++)
274+ {
275+ maskLandmarks (y, x) = std::numeric_limits<unsigned char >::max ();
276+ }
272277 }
273278 }
274279 }
275280 }
276281
277282 image::Image<unsigned char > mask;
283+ bool maskLoaded = false ;
278284 if (tryLoadMask (&mask, masksFolders, viewId, srcImage, maskExtension))
279- mask = mask * maskLandmarks;
280- else
281- mask = maskLandmarks;
282- process<Image<RGBAfColor>>(dstColorImage, cam, metadata, srcImage, evCorrection, exposureCompensation, [&mask] (Image<RGBAfColor> & image)
283- {
284- if (image.Width () * image.Height () != mask.Width () * mask.Height ())
285+ maskLoaded = true ;
286+ process<Image<RGBAfColor>>(
287+ dstColorImage, cam, metadata, srcImage, evCorrection, exposureCompensation,
288+ [&maskLoaded, &mask, &maskLandmarks, &doMaskLandmarks](Image<RGBAfColor>& image)
285289 {
286- ALICEVISION_LOG_WARNING (" Invalid image mask size: mask is ignored." );
287- return ;
288- }
290+ if (maskLoaded && (image.Width () * image.Height () != mask.Width () * mask.Height ()))
291+ {
292+ ALICEVISION_LOG_WARNING (" Invalid image mask size: mask is ignored." );
293+ return ;
294+ }
289295
290- for (int pix = 0 ; pix < image.Width () * image.Height (); ++pix)
291- {
292- const bool masked = (mask (pix) == 0 );
293- image (pix).a () = masked ? 0 .f : 1 .f ;
294- }
295- });
296+ for (int pix = 0 ; pix < image.Width () * image.Height (); ++pix)
297+ {
298+ image (pix).a () = (maskLoaded && mask (pix) == 0 ) ? 0 .f : (doMaskLandmarks && maskLandmarks (pix) == 127 ) ? .5f : 1 .f ;
299+ }
300+ });
296301 /* else
297302 {
298303 const auto noMaskingFunc = [] (Image<RGBAfColor> & image) {};
0 commit comments