繁体   English   中英

LipMap检测时的YCbCr

[英]YCbCr at LipMap detection

我对将RGB值转换为YCbCr配色方案感到困惑。 我用这个方程式:

int R, G, b;

double Y = 0.229 * R + 0.587 * G + 0.144 * B;
double Cb = -0.168 * R - 0.3313 * G + 0.5 * B + 128;
double Cr = 0.5 * R - 0.4187 * G - 0.0813 * B + 128;

YCbCr的预期输出在0-255之间进行了归一化,我感到困惑,因为我的一位消息人士称它在0-1范围内进行了归一化。 一切顺利,但是在获取LipMap来隔离/检测脸部嘴唇时,我遇到了问题,我实现了这一点:

double LipMap = Cr*Cr*(Cr*Cr-n*(Cr/Cb))*(Cr*Cr-n*(Cr/Cb));

n返回0-255,n的等式为:n = 0.95 *(summation(Cr * Cr)/ summation(Cr / Cb)),但另一个消息来源说:n = 0.95 *(((1 / k)* summation( Cr * Cr))/(((1 / k)*求和(Cr / Cb)))),其中k等于脸部图像中的像素数。

从我的消息来源来看,它将返回0-255的结果,但是在我的程序中,它始终总是返回大数字,甚至没有给我0-255

那么有人可以帮助我实现这一点并解决我的问题吗?

从您在注释中链接的来源来看,第一个来源中的方程式或描述似乎是错误的:

如果您在[0,255]范围内使用RGB值,并且进行了给定的转换(您的Cb转换不同于该btw。),则应该获得相同范围内的CrCb值。

you'll notice that the values for C r 2 range from [0,65025] whereas C r /C b is in the range [0,255] (assuming C b =0 is not possible and thus the highest value would be 255/1 = 255). 现在,如果计算出你会发现,对于C R 2范围内的值[0,65025]而C R / C b为在范围[0,255](假设C b = 0是不可能的,因此最高值为255/1 = 255)。

than what is stated in that paper: 如果进一步假设图像中的红色分量和蓝色分量都很高,那么值将比该论文中所述的值高:

常数η符合0..255范围内的最终值

第二篇论文指出了这一点,恕我直言更有意义(尽管我不知道在计算之前是否将C r和C b归一化为[0,1]范围,还是对结果进行归一化,这可能会导致更大的差异)在C r 2和C r / C b之间 ):

其中(Cr)2(Cr / Cb)全部归一化到[0 1]范围。

请注意,为了将C r和C b标准化为[0,1]范围,您需要将方程式的结果除以255,或者只是在[0,1]范围内使用RGB并添加0.5而不是128:

//assumes RGB are in range [0,1]
double Cb = -0.168 * R - 0.3313 * G + 0.5 * B + 0.5;
double Cr = 0.5 * R - 0.4187 * G - 0.0813 * B + 0.5;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM