Maximum/saturation pixel value
I am having some trouble determining the maximum or saturation level for my pixels, I thought it was LibRaw::imgdata.color.maximum, however I find in some cases that after processing I have values bigger than this value. My code is below:
// Create an image processor LibRaw iProcessor; // Open the file and read the metadata iProcessor.open_file(filename.c_str()); size_t width = iProcessor.imgdata.sizes.width; size_t height = iProcessor.imgdata.sizes.height; // Unpack the image iProcessor.unpack(); iProcessor.imgdata.params.user_qual=4; // DCB interpolation iProcessor.imgdata.params.output_color = 0; // Raw output //do no white balance iProcessor.imgdata.params.use_camera_wb = 0; iProcessor.imgdata.params.user_mul[0] = 1.0f; iProcessor.imgdata.params.user_mul[1] = 1.0f; iProcessor.imgdata.params.user_mul[2] = 1.0f; iProcessor.imgdata.params.user_mul[3] = 1.0f; //Process iProcessor.dcraw_process(); //Copy the luminosity into a vector std::vector<unsigned short> data(width * height); unsigned int maxLuminosity = 0; for (size_t i = 0; i < data.size(); ++i) { unsigned int luminosity = ((unsigned int)iProcessor.imgdata.image[i][0] * 2 + (unsigned int)iProcessor.imgdata.image[i][1] * 3 + (unsigned int)iProcessor.imgdata.image[i][2])/6; data[i] = luminosity; maxLuminosity = luminosity > maxLuminosity ? luminosity : maxLuminosity; if (luminosity > iProcessor.imgdata.color.maximum) std::cout << "Pixel " << i << " has luminosity too high\n"; }
If I break in my debugger where I do the std::cout, then I can see that individual pixel values are higher than iProcessor.imgdata.color.maximum.
Is there something I am doing wrong? The region where I am getting the higher values is probably overexposed in one or both of red and green ( it is a sunset picture). I have just spotted the highlight option, but this is set to 0, which I think should clip. Is this correct?
Recent comments