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.
