This is the first time I've heard anyone refer to "raw" and "RAW" as different things. I use these terms interchangeably, and sometimes "Raw". To me, they all refer to the pixel data encoded in the file. And recovering that pixel data is what a raw decoder is for.
Can you expand a bit on what kind of processing you're referring to with "RAW" data? I know that lossy compression can be applied. So in that sense, yes, I understand that the RAW file loses some information.
I've done more reading on the subject. For one thing, the radiometric response function is also called the camera response function. There are (at least) a couple of references to linearization in DNG. Neither of these is related to the RRF.
There are many papers on the subject of inverting or reversing the camera capture pipeline. That is, starting from the RAW file, applying inverse transforms to recover the sensor irradiance at each pixel.
I think that is the kind of thing I'm looking for. So it would appear that a simple RAW decoder—one that simply decodes and decompresses a camera RAW file—neither applies nor unapplies a RRF. That is, unless it's part of some particular camera's inherent RAW processing. However, that does not appear to be the case with NEF, at least.
These days consumer cameras don't record raw, they record RAW. Big difference, as RAW is processed, sometimes heavily, sometimes using lossy compression.
We don't know of a general answer to this question that will always work.
For example:
Some previews (on some cameras) contain a black border on the right/left, which is not part of the RAW image, so no pixel in RAW corresponds to the left-top (or any) preview image corner.
The lens geometry correction has been applied to the preview, so its edges do not correspond to any straight horizontal/vertical line in the RAW
Aspect ratio in the preview may be not exactly the same as RAW image area.
In some cases imgdata.sizes.raw_inset_crops[..] may work.
Dear Alex,
first of all, many thanks for the wonderful libraw and your effort.
I'm currently dealing with Canon R5 CR3.
I can sucessfully decode the largest thumbnail(JPEG 1620x1080) using this following code.
//--------------------
rawp->unpack_thumb_ex(1);
rawimgthumb = rawp->dcraw_make_mem_thumb(&err); //store unpacked and processed raw image
Howerver, it seems that the start pxiel(left-top conner) of the decoded thumbnail image is not the same of the start pixel of the raw image(8191x5463 or with frame 8352x5586).
How can we match the exackt position between the thumbnail and the raw image?
Is there any parameter about the croping region of the thumbnail from raw image?
tried the 64-bit version and it worked fine, but using the compiled 32-bit version had issue. don't know why. i'll try to investigate on this more (maybe some configuration issues on my side). are there difference between 64 and 32?
I have tried to add some options like "-t 5 -Z -" (flip 90 CCW and output to stdout), but it seems like it doesn't apply the flip on the output. am i missing something?
Posting the solution here if ever someone encounters the same issue,
apparently, in the VS project of LibRaw, you need to make the 'Struct Member Alignment' in the project properties the same with the generated library of libjpeg
having different settings results to unequal struct size between libjpeg and libraw (JERR_BAD_STRUCT_SIZE)
Why ask things that you can check yourself in a minute?
Yes, it will decode (so called) 'raw image data', but in this specific case it is not RAW, but processed 8-bit/3channel data with only 256 different values per channel.
Embedded JPEG previews are not decoded by LibRaw but provided as is (JPEG bytearray)
Use get_decoder_info() ( https://www.libraw.org/docs/API-CXX.html#get_decoder_info ) and check either decoder_name against "nikon_he_load_raw_placeholder()" or decoder_flags bit LIBRAW_DECODER_UNSUPPORTED_FORMAT
How can we detect or check whether a particular image file is in the HE/HE* format?
Hi Iliah,
This is the first time I've heard anyone refer to "raw" and "RAW" as different things. I use these terms interchangeably, and sometimes "Raw". To me, they all refer to the pixel data encoded in the file. And recovering that pixel data is what a raw decoder is for.
Can you expand a bit on what kind of processing you're referring to with "RAW" data? I know that lossy compression can be applied. So in that sense, yes, I understand that the RAW file loses some information.
Cheers.
> a simple RAW decoder—one that simply decodes and decompresses a camera RAW file—neither applies nor unapplies a RRF
Correct.
> unless it's part of some particular camera's inherent RAW processing. However, that does not appear to be the case with NEF, at least.
White balance pre-conditioning? Noise reduction? Tricks with black level? etc, etc...
I've done more reading on the subject. For one thing, the radiometric response function is also called the camera response function. There are (at least) a couple of references to linearization in DNG. Neither of these is related to the RRF.
There are many papers on the subject of inverting or reversing the camera capture pipeline. That is, starting from the RAW file, applying inverse transforms to recover the sensor irradiance at each pixel.
I think that is the kind of thing I'm looking for. So it would appear that a simple RAW decoder—one that simply decodes and decompresses a camera RAW file—neither applies nor unapplies a RRF. That is, unless it's part of some particular camera's inherent RAW processing. However, that does not appear to be the case with NEF, at least.
Cheers.
These days consumer cameras don't record raw, they record RAW. Big difference, as RAW is processed, sometimes heavily, sometimes using lossy compression.
Unprocessed /linearized RAW values (after LibRaw::unpack() ) is probably what is you're looking for.
RawSpeed licensing is out of our control, if it is licensed under LGPL terms we're unable to change it
many thnaks for the prompt response.
i'll try to test the parameter imgdata.sizes.raw_inset_crops[..].
best regards.
We don't know of a general answer to this question that will always work.
For example:
In some cases imgdata.sizes.raw_inset_crops[..] may work.
Dear Alex,
first of all, many thanks for the wonderful libraw and your effort.
I'm currently dealing with Canon R5 CR3.
I can sucessfully decode the largest thumbnail(JPEG 1620x1080) using this following code.
//--------------------
rawp->unpack_thumb_ex(1);
rawimgthumb = rawp->dcraw_make_mem_thumb(&err); //store unpacked and processed raw image
Mat rawData(1, rawimgthumb->data_size, CV_8UC1, (void*)rawp->imgdata.thumbnail.thumb);
thumbimg_file = imdecode(rawData, 1); //BGR
//--------------------
Howerver, it seems that the start pxiel(left-top conner) of the decoded thumbnail image is not the same of the start pixel of the raw image(8191x5463 or with frame 8352x5586).
How can we match the exackt position between the thumbnail and the raw image?
Is there any parameter about the croping region of the thumbnail from raw image?
Thank you for your response in advance.
Kim
The file is a lossy compressed dng image. I have attached it here, https://drive.google.com/file/d/18QaZiL_YBEXwrmKd9638zHuWpOo54V5y/view
I have compiled in 32-bit with USE_JPEG enabled, linked with libjpeg library
I was able to decode using "-Z -". But adding additional options such as " -w -H 0 -o 0 -Z -" prints "Request for nonexisting image number"
Generally, there shouldn't be a difference between 32- and 64-bit versions.
In practice, 32-bit builds have not been tested for a long time.
Could you please provide the RAW file you're testing with: for analysis
tried the 64-bit version and it worked fine, but using the compiled 32-bit version had issue. don't know why. i'll try to investigate on this more (maybe some configuration issues on my side). are there difference between 64 and 32?
Works for me: dcraw_emu.exe -t 5 -Z - filename >0.ppm
(-T ... > 0.tif works too)
I have tried to add some options like "-t 5 -Z -" (flip 90 CCW and output to stdout), but it seems like it doesn't apply the flip on the output. am i missing something?
"-Z -" command worked great for me! Thanks a lot!
dcraw_emu w/o args displays:
suf => replace input filename last extension
- => output to stdout
filename.suf => output to filename.suf
is that what you were asking about?
Posting the solution here if ever someone encounters the same issue,
apparently, in the VS project of LibRaw, you need to make the 'Struct Member Alignment' in the project properties the same with the generated library of libjpeg
having different settings results to unequal struct size between libjpeg and libraw (JERR_BAD_STRUCT_SIZE)
Have you tried building a dng_validate example from DNG SDK?
Your error screenshot lists missing symbols from XMPCore library, that's why I'm pretty sure you didn't add it to the your build.
Sorry we can't help with libjpeg issues
I have tried to build libraw as you suggested with USE_JPEG and USE_JPEG8, I have also built it with and without USE_ZLIB just in case.
I was able to open_buffer but when I raw_unpack, it throws an exception on lossy_dng_load_raw -> jpeg_create_decompress. on this line,
uSize = SIZEOF(struct jpeg_decompress_struct);
if (structsize != uSize)
ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE,
(int) SIZEOF(struct jpeg_decompress_struct), (int) structsize);
Not sure why I'm getting this error :(
Why ask things that you can check yourself in a minute?
Yes, it will decode (so called) 'raw image data', but in this specific case it is not RAW, but processed 8-bit/3channel data with only 256 different values per channel.
Embedded JPEG previews are not decoded by LibRaw but provided as is (JPEG bytearray)
Will it also decode the high resolution raw image data? or just the internal embedded jpeg image?
LibRaw 0.21 supports this file if built with -DUSE_JPEG -DUSE_JPEG8 and linked with libjpeg (or replacement) library
Pages