I am processing grayscale image that has 16 bits per pixel. So the grayscale level is not longer confined within 0-255. I noticed ippiComputeThreshold_Otsu() only has option for _8u_C1R, and its threshold pointer is also a Ipp8u pointer. So I guess a Ipp8u threshold value really cannot perform correct segmentation for a 16 bit level grayscale image.
So my question really is: is there a 16 bit version Otsu method? Or, can I do some trick to convert my 16 bit grayscale image to a 8 bit version, then use ippiComputeThreshold_Otsu_8u_C1R() to get the threshold, then project the threshold proportionally to a 16 bit version? Or I have to develop my own Otsu?
Any suggestion is appreciated. Thanks.
Ying H (Intel) wrote:Hi Ying: Converting a 16bits grayscale to 8bit grayscale was exactly what I was thinking, but I did not find any IPP functions to do so. Do you know any? Thanks a lot. Nick
I'm sorry to say, no, there is no 16 bit version Otsu method in IPP. We can submit it as a new feature request so IPP developer team can consider it in future product plan. But i guess, it can't solve your problem right away.
Although a Ipp8u threshold value really cannot perform correct segmentation for a 16 bit level grayscale image, i guess it is still worth a try. convert or scale 16bit gray image to 8u image, then call the 8u otsu method. Or, you may develop the method your self, but some basic IPP functions may be used during development.