经常看到文章里写采用归一化的rgb模型可以去除光照和阴影的影响,为什么归一化后就可以去除这些影响呢?

经常看到文章里写采用归一化的rgb模型可以去除光照和阴影的影响,为什么归一化后就可以去除这些影响呢?,第1张

通过对图像的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->widthint height =

img->heightint redValue, greenValue,

blueValuedouble sum, epslon = 0.000001

3、计算归一化的结果,并替换掉原像素值;

for (int y = 0y

<heighty++) {for (int x = 0x <

widthx++) {

CvScalar src = cvGet2D(img, y, x)redValue =

src.val[0]greenValue = src.val[1]blueValue = src.val[2]//

加上epslon,为了防止除以0的情况发生 sum = redValue + greenValue + blueValue +

epslonCvScalar 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’

物理上,这种变换方式从图像上移除了光照的信息。

通过对图像的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->widthint height =

img->heightint redValue, greenValue,

blueValuedouble sum, epslon = 0.

3、计算归一化的结果,并替换掉原像素值;

for (int y = 0y

<heighty++) {for (int x = 0x <

widthx++) {

CvScalar src = cvGet2D(img, y, x)redValue =

src.val[0]greenValue = src.val[1]blueValue = src.val[2]//

加上epslon,为了防止除以0的情况发生 sum = redValue + greenValue + blueValue +

epslonCvScalar 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’

物理上,这种变换方式从图像上移除了光照的信息。

<html>

<head>

<meta http-equiv="Content-Type" content="text/html charset=utf-8" />

<title>发送</title>

<style type="text/css">

table{

border-collapse:collapse

}

table td {

border: 1px solid #000000

padding: 2px 5px

}

input.warning{

border-color: red

}

</style>

<script type="text/javascript">

String.prototype.padLeft = function (len, charStr) {

return new Array(len - this.length + 1).join(charStr,  '') + this

}

function changeBgColor(input){

var rgbInput = document.getElementById("rgb")

var redInput = document.getElementById("red")

var greenInput = document.getElementById("green")

var blueInput = document.getElementById("blue")

var redValue = Number(redInput.value)

var greenValue = Number(greenInput.value)

var blueValue = Number(blueInput.value)

if(redValue < 0 || redValue > 255 || isNaN(redValue))

{

alert("red value invalid")

redInput.className = "warning"

return

}

redInput.className = ""

if(greenValue < 0 || greenValue > 255 || isNaN(greenValue))

{

alert("green value invalid")

greenInput.className = "warning"

return

}

greenInput.className = ""

if(blueValue < 0 || blueValue > 255 || isNaN(blueValue))

{

alert("blue value invalid")

blueInput.className = "warning"

return

}

blueInput.className = ""

document.body.style.backgroundColor = "#" + redValue.toString(16).padLeft(2, '0') + greenValue.toString(16).padLeft(2, '0') + blueValue.toString(16).padLeft(2, '0')

}

</script>

</head> 

<body>

<table>

<tr><td>red:</td><td><input type="text" id="red" name="red" onchange="changeBgColor(this)" placeholder="please input 0-255"/></td></tr>

<tr><td>green:</td><td><input type="text" id="green" name="green" onchange="changeBgColor(this)" placeholder="please input 0-255"/></td></tr>

<tr><td>blue:</td><td><input type="text" id="blue" name="blue" onchange="changeBgColor(this)" placeholder="please input 0-255"/></td></tr>

</table>

</body>

</html>


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/245467.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存