Problems with multispectral (10 band 16 bit images)

Hi Folks, I’m working with a Micasense dual camera with 10 bands.

I was able to process the data from the two cameras separately (5 bands each), (Specifying the primary-band). The 10 bands together, however, do not seem to work with WebODM, even when I specify the primary-band parameter. Webodom will run the orthophoto but will not recognize it as a multi-band dataset.

Any help?

I’m running native.

Best

1 Like

Looks like the limit is 8 bands? the function def detect_multi_camera at ODM/types.py at e4d162ec8369bfc7ebdc269de9e6817bbc215524 · OpenDroneMap/ODM · GitHub

def detect_multi_camera(self):
“”"
Looks at the reconstruction photos and determines if this
is a single or multi-camera setup.

    band_photos = {}
    band_indexes = {}

    for p in self.photos:
        if not p.band_name in band_photos:
            band_photos[p.band_name] = []
        if not p.band_name in band_indexes:
            band_indexes[p.band_name] = p.band_index

        band_photos[p.band_name].append(p)
        
    bands_count = len(band_photos)
    *if bands_count >= 2 and bands_count <= 8:*
        # Validate that all bands have the same number of images,
        # otherwise this is not a multi-camera setup
        img_per_band = len(band_photos[p.band_name])
        for band in band_photos:
            if len(band_photos[band]) != img_per_band:
                log.ODM_ERROR("Multi-camera setup detected, but band \"%s\" (identified from \"%s\") has only %s images (instead of %s), perhaps images are missing or are corrupted. Please include all necessary files to process all bands and try again." % (band, band_photos[band][0].filename, len(band_photos[band]), img_per_band))
                raise RuntimeError("Invalid multi-camera images")
        
        mc = []
        for band_name in band_indexes:
            mc.append({'name': band_name, 'photos': band_photos[band_name]})
        
        # Sort by band index
        mc.sort(key=lambda x: band_indexes[x['name']])

        return mc

    return None

is there a good reason for: “if bands_count >= 2 and bands_count <= 8:”?

1 Like

I can’t say authoritatively, but it might just have been based upon what was commonly available.

Are you able to test your patch locally?

I just changed 8 to 10, locally, and it works fine.
The problem is that it will not run when using the lighting node.

2 Likes

Right, this change would have to be pushed upstream to ODM, tested, and then deployed out to Lightning.

Are you able to open a PR or Issue on the ODM tracker to help us with this?

I wish I knew how to do that!
You mean on Github? pardon but, I’m not a code expert.

1 Like

Yep, on GitHub!

Link above is a really abbreviated workflow to submit a change. Let me know if that gets you headed the right way.

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.