经常看到文章里写采用归一化的rgb模型可以去除光照和阴影的影响,为什么归一化后就可以去除这些影响呢?
发布网友
发布时间:2022-04-29 17:01
我来回答
共1个回答
热心网友
时间:2023-10-21 12:20
通过对图像的RGB色彩空间进行归一化处理,在某些情况下是去除光照和阴影影响的一种简单和有效的方法。
假设RGB代表原图像某点的像素值,rgb表示归一化之后的值,则
r = R / (R+G+B);g = G / (R+G+B);b = B / (R+G+B);
实现归一化RGB的方法如下:
//对输入的原始RGB图像获取对应的归一化图像
IplImage*NormalizeImage(IplImage *img)
{
1、创建归一化的图像;
IplImage* imgavg = cvCreateImage(cvGetSize(img),8, 3);
2、获取图像高度和宽度信息,设置epslon的目的是防止除0的操作产生;
int width =
img->width;int height =
img->height;int redValue, greenValue,
blueValue;double sum, epslon = 0.000001;
3、计算归一化的结果,并替换掉原像素值;
for (int y = 0; y
< height; y++) {for (int x = 0; x <
width; x++) {
CvScalar src = cvGet2D(img, y, x);redValue =
src.val[0];greenValue = src.val[1];blueValue = src.val[2];//
加上epslon,为了防止除以0的情况发生 sum = redValue + greenValue + blueValue +
epslon;CvScalar des = cvScalar(redValue / sum * 255, greenValue /
sum * 255, blueValue / sum * 255, src.val[4]);cvSet2D(imgavg, y, x,
des);
}}
4、返回归一化后的图像;
return imgavg;
}
注意:归一化之后的图像仅使用两个字节便可以表示一个像素值,
r = R/(R+G+B)
g = G/(R+G+B)
b = B/(R+G+B)
b可以表示为:b = 1-R’-G’
物理上,这种变换方式从图像上移除了光照的信息。
热心网友
时间:2023-10-21 12:20
通过对图像的RGB色彩空间进行归一化处理,在某些情况下是去除光照和阴影影响的一种简单和有效的方法。
假设RGB代表原图像某点的像素值,rgb表示归一化之后的值,则
r = R / (R+G+B);g = G / (R+G+B);b = B / (R+G+B);
实现归一化RGB的方法如下:
//对输入的原始RGB图像获取对应的归一化图像
IplImage*NormalizeImage(IplImage *img)
{
1、创建归一化的图像;
IplImage* imgavg = cvCreateImage(cvGetSize(img),8, 3);
2、获取图像高度和宽度信息,设置epslon的目的是防止除0的操作产生;
int width =
img->width;int height =
img->height;int redValue, greenValue,
blueValue;double sum, epslon = 0.000001;
3、计算归一化的结果,并替换掉原像素值;
for (int y = 0; y
< height; y++) {for (int x = 0; x <
width; x++) {
CvScalar src = cvGet2D(img, y, x);redValue =
src.val[0];greenValue = src.val[1];blueValue = src.val[2];//
加上epslon,为了防止除以0的情况发生 sum = redValue + greenValue + blueValue +
epslon;CvScalar des = cvScalar(redValue / sum * 255, greenValue /
sum * 255, blueValue / sum * 255, src.val[4]);cvSet2D(imgavg, y, x,
des);
}}
4、返回归一化后的图像;
return imgavg;
}
注意:归一化之后的图像仅使用两个字节便可以表示一个像素值,
r = R/(R+G+B)
g = G/(R+G+B)
b = B/(R+G+B)
b可以表示为:b = 1-R’-G’
物理上,这种变换方式从图像上移除了光照的信息。
热心网友
时间:2023-10-21 12:20
通过对图像的RGB色彩空间进行归一化处理,在某些情况下是去除光照和阴影影响的一种简单和有效的方法。
假设RGB代表原图像某点的像素值,rgb表示归一化之后的值,则
r = R / (R+G+B);g = G / (R+G+B);b = B / (R+G+B);
实现归一化RGB的方法如下:
//对输入的原始RGB图像获取对应的归一化图像
IplImage*NormalizeImage(IplImage *img)
{
1、创建归一化的图像;
IplImage* imgavg = cvCreateImage(cvGetSize(img),8, 3);
2、获取图像高度和宽度信息,设置epslon的目的是防止除0的操作产生;
int width =
img->width;int height =
img->height;int redValue, greenValue,
blueValue;double sum, epslon = 0.000001;
3、计算归一化的结果,并替换掉原像素值;
for (int y = 0; y
< height; y++) {for (int x = 0; x <
width; x++) {
CvScalar src = cvGet2D(img, y, x);redValue =
src.val[0];greenValue = src.val[1];blueValue = src.val[2];//
加上epslon,为了防止除以0的情况发生 sum = redValue + greenValue + blueValue +
epslon;CvScalar des = cvScalar(redValue / sum * 255, greenValue /
sum * 255, blueValue / sum * 255, src.val[4]);cvSet2D(imgavg, y, x,
des);
}}
4、返回归一化后的图像;
return imgavg;
}
注意:归一化之后的图像仅使用两个字节便可以表示一个像素值,
r = R/(R+G+B)
g = G/(R+G+B)
b = B/(R+G+B)
b可以表示为:b = 1-R’-G’
物理上,这种变换方式从图像上移除了光照的信息。
热心网友
时间:2023-10-21 12:20
通过对图像的RGB色彩空间进行归一化处理,在某些情况下是去除光照和阴影影响的一种简单和有效的方法。
假设RGB代表原图像某点的像素值,rgb表示归一化之后的值,则
r = R / (R+G+B);g = G / (R+G+B);b = B / (R+G+B);
实现归一化RGB的方法如下:
//对输入的原始RGB图像获取对应的归一化图像
IplImage*NormalizeImage(IplImage *img)
{
1、创建归一化的图像;
IplImage* imgavg = cvCreateImage(cvGetSize(img),8, 3);
2、获取图像高度和宽度信息,设置epslon的目的是防止除0的操作产生;
int width =
img->width;int height =
img->height;int redValue, greenValue,
blueValue;double sum, epslon = 0.000001;
3、计算归一化的结果,并替换掉原像素值;
for (int y = 0; y
< height; y++) {for (int x = 0; x <
width; x++) {
CvScalar src = cvGet2D(img, y, x);redValue =
src.val[0];greenValue = src.val[1];blueValue = src.val[2];//
加上epslon,为了防止除以0的情况发生 sum = redValue + greenValue + blueValue +
epslon;CvScalar des = cvScalar(redValue / sum * 255, greenValue /
sum * 255, blueValue / sum * 255, src.val[4]);cvSet2D(imgavg, y, x,
des);
}}
4、返回归一化后的图像;
return imgavg;
}
注意:归一化之后的图像仅使用两个字节便可以表示一个像素值,
r = R/(R+G+B)
g = G/(R+G+B)
b = B/(R+G+B)
b可以表示为:b = 1-R’-G’
物理上,这种变换方式从图像上移除了光照的信息。