Add new comment

Create 16bit gamma corrected image from raw image

Hi

I'm trying to extract 16bit TIF from raw image ( gamma corrected - not linear ) and only get a very noisy / false-colored image !?
I'm certainly doing something wrong when setting up LibRaw instance...

Any hint appriciated !

Here is my pseudo code ( error handling stripped ) to extract the raw image and create a GraphicsMagick image of the created image data :

    LibRaw rawProcessor;
    rawProcessor.imgdata.params.use_camera_wb  = 1;
    rawProcessor.imgdata.params.output_tiff    = 1;
    rawProcessor.imgdata.params.output_bps     = 16;
    rawProcessor.imgdata.params.output_color   = 0; // 0 = raw
    rawProcessor.imgdata.params.gamm[0]        = 1;
    rawProcessor.imgdata.params.gamm[1]        = 1;
    rawProcessor.imgdata.params.highlight      = 0; // 0 = clip
    rawProcessor.imgdata.params.no_auto_bright = 1;
    rawProcessor.imgdata.params.user_qual      = 3; // 3 = AHD
 
    rawProcessor.open_file( inPath );
    rawProcessor.unpack();
    rawProcessor.dcraw_process();
 
    libraw_processed_image_t *image = rawProcessor.dcraw_make_mem_image(&ret);
 
    Magick::Blob blob( image->data, image->data_size );
    Magick::Image img( blob, Magick::Geometry(image->width,image->height), rawProcessor.imgdata.params.output_bps, "RGB" );
    img.magick("TIF");
    // img.gamma( 2.2 ); this does not seem to fix the problem
    img.write(outPath.toStdString().c_str());
 
    LibRaw::dcraw_clear_mem(image);
    rawProcessor.recycle();

The following results in proper looking tif image when using settings to extract 8 bit image !?

    LibRaw rawProcessor;
    rawProcessor.imgdata.params.use_camera_wb  = 1;
    rawProcessor.imgdata.params.output_tiff    = 1;
    rawProcessor.imgdata.params.output_bps     = 8;
    rawProcessor.imgdata.params.output_color   = 1; // 1 = sRGB
    rawProcessor.imgdata.params.highlight      = 0; // 0 = clip
    rawProcessor.imgdata.params.no_auto_bright = 1;
    rawProcessor.imgdata.params.user_qual      = 3; // 3 = AHD
 
    rawProcessor.open_file( inPath );
    rawProcessor.unpack();
    rawProcessor.dcraw_process();
 
    libraw_processed_image_t *image = rawProcessor.dcraw_make_mem_image(&ret);
 
    Magick::Blob blob( image->data, image->data_size );
    Magick::Image img( blob, Magick::Geometry(image->width,image->height), rawProcessor.imgdata.params.output_bps, "RGB" );
    img.magick("TIF");
    img.write(outPath.toStdString().c_str());
 
    LibRaw::dcraw_clear_mem(image);
    rawProcessor.recycle();

Forums: