8. Exposure masking#

If you need to identify underexposed or overexposed pixels, ImageSDK can generate a mask image for this purpose.

#include "P1Image.hpp"
#include <iostream>


using namespace P1::ImageSdk;

int main()
{
    try
    {
        // 1. Load IIQ image
        RawImage im("Sample.IIQ");

        // 2. Convert
        ConvertConfig config;
        config.SetExposureMaskThreshold(0.3, 0.8);

        BitmapImage maskIm;
        BitmapImage bmp = im.Convert(config, 
                                    std::allocator<uint8_t>(), 
                                    &maskIm);

        // 3. Export mask to Tiff
        TiffWriter("out.tiff", bmp, im, TiffConfig());
        TiffWriter("mask.tiff", maskIm, im, TiffConfig());

        return 0;
    }
    catch (const std::exception& e)
    {
        std::cerr << e.what();
        return -1;
    }
}
using P1.ImageSdk;

// 1. Load IIQ image
RawImage im = new("Sample.IIQ");

// 2. Convert
ConvertConfig config = new();
config.SetExposureMaskThreshold(0.8f, 0.3f);

BitmapImage maskIm = new();
double outputFocalLength = 0.0f;

IBitmapImage bmp = im.Convert(config, ref maskIm, ref outputFocalLength);

// 3. Export to Tiff
im.WriteAsTiff("out.tiff", bmp, new TiffConfig());
im.WriteAsTiff("mask.tiff", maskIm, new TiffConfig());

In the below example, red indicates overexposure, while green represents underexposure.

../../../_images/mask_origin.png ../../../_images/mask_exposure.png