12. Sharpness metric#

ImageSDK can assess the sharpness of an image, with the output score normalized to a value of 1.

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

using namespace P1::ImageSdk;

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

        // 2. Estimate sharpness on the whole image    
        SharpnessMetricParams params;
        params.outputSharpnessHeatMap = true; // Optional sharpness mask

        SharpnessMetricOutput sharpness = SharpnessMetric::ComputeOnRegion(im, 
            Rect(0, 0, 0, 0), // Set 0 to compute on the whole image
            params);

        // 3. Output sharpness
        std::cout << "Average sharpenss: " << sharpness.globalSharpness 
                <<", median sharpness: " << sharpness.medianSharpness << std::endl;
        
        if (sharpness.sharpnessHeatMap)
        {
            TiffWriter("sharpnessMask.tiff", *sharpness.sharpnessHeatMap, 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. Estimate sharpness on the whole image
SharpnessMetricParams param = new();
param.outputSharpnessHeatMap = true;  // Optional sharpness mask

SharpnessMetricOutput sharpness = im.ComputeSharpnessOnRegion(
    new Rect() {X=0, Y=0, Width=0, Height=0 }, param);

// 3. Output sharpness
Console.WriteLine($"Average sharpness: {sharpness.globalSharpness}");
Console.WriteLine($"Median sharpness: {sharpness.medianSharpness}");

if(sharpness.sharpnessHeatMap != null)
{
    im.WriteAsTiff("sharpnessMask.tiff", sharpness.sharpnessHeatMap, new TiffConfig());
}

The image below is an example of the sharpness mask, in which red indicates sharp pixels. The original image is presented in gray scale.

../../../_images/sharpnessMask.png