2012-01-04 23:01:43 +01:00
|
|
|
function lightlevelmapping()
|
2012-01-08 01:38:59 +01:00
|
|
|
MINBRIGHTNESS = 3;
|
2012-01-07 23:46:43 +01:00
|
|
|
MAXBRIGHTNESS = 10;
|
|
|
|
|
2012-01-08 01:38:59 +01:00
|
|
|
LIGHTSENSOR_BOTTOM = 3;
|
2012-01-07 23:46:43 +01:00
|
|
|
LIGHTSENSOR_TOP = 150;
|
|
|
|
|
|
|
|
x = [LIGHTSENSOR_BOTTOM - 10:LIGHTSENSOR_TOP + 10];
|
|
|
|
b = zeros(size(9));
|
|
|
|
|
|
|
|
LIGHTSENSOR_ALPHA1 = 0.02;
|
|
|
|
LIGHTSENSOR_ALPHA2 = 0.20;
|
|
|
|
|
|
|
|
a = LIGHTSENSOR_ALPHA1 * LIGHTSENSOR_TOP / log(LIGHTSENSOR_ALPHA2 / ...
|
|
|
|
LIGHTSENSOR_ALPHA1);
|
|
|
|
b = LIGHTSENSOR_ALPHA1 / a;
|
|
|
|
c = MINBRIGHTNESS - a;
|
|
|
|
|
|
|
|
y = a * exp(b*x) + c;
|
|
|
|
y_ = round(y);
|
|
|
|
|
|
|
|
[x; y_]
|
|
|
|
|
|
|
|
figure
|
|
|
|
plot(x, y, x, y_);
|
|
|
|
A = axis;
|
|
|
|
A(1) = LIGHTSENSOR_BOTTOM - 2;
|
|
|
|
A(2) = LIGHTSENSOR_TOP - 2;
|
|
|
|
A(3) = MINBRIGHTNESS - 2;
|
|
|
|
A(4) = MAXBRIGHTNESS + 2;
|
|
|
|
axis(A);
|
|
|
|
grid on
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
function lightlevelmapping_old()
|
2012-01-06 22:32:48 +01:00
|
|
|
MINBRIGHTNESS = 0;
|
|
|
|
MAXBRIGHTNESS = 10;
|
2012-01-04 23:01:43 +01:00
|
|
|
|
2012-01-06 22:32:48 +01:00
|
|
|
LIGHTSENSOR_BOTTOM = 0;
|
|
|
|
LIGHTSENSOR_TOP = 900;
|
2012-01-04 23:01:43 +01:00
|
|
|
|
|
|
|
l = [LIGHTSENSOR_BOTTOM - 10:LIGHTSENSOR_TOP + 10];
|
|
|
|
b = zeros(size(l));
|
|
|
|
|
|
|
|
LIGHTSENSOR_SCALE = 1024;
|
|
|
|
LIGHTSENSOR_BASE = 1.35;
|
2012-01-06 22:32:48 +01:00
|
|
|
LIGHTSENSOR_BASE = 1.40;
|
2012-01-04 23:01:43 +01:00
|
|
|
|
|
|
|
if (LIGHTSENSOR_BASE <= 1)
|
|
|
|
error 'LIGHTSENSOR_BASE must be > 1';
|
|
|
|
end
|
|
|
|
|
|
|
|
brightness_per_unit_light = floor(floor( LIGHTSENSOR_SCALE * (MAXBRIGHTNESS - MINBRIGHTNESS)) / ...
|
|
|
|
(LIGHTSENSOR_TOP - LIGHTSENSOR_BOTTOM))
|
|
|
|
|
|
|
|
LIGHTSENSOR_BASE^(MAXBRIGHTNESS - MINBRIGHTNESS) * (MAXBRIGHTNESS - MINBRIGHTNESS) + MINBRIGHTNESS
|
|
|
|
|
|
|
|
% b = floor(brightness_per_unit_light * (l - LIGHTSENSOR_BOTTOM) / LIGHTSENSOR_SCALE ) + MINBRIGHTNESS;
|
|
|
|
b1 = (LIGHTSENSOR_BASE.^(brightness_per_unit_light * (l - LIGHTSENSOR_BOTTOM) / ...
|
|
|
|
LIGHTSENSOR_SCALE)) / LIGHTSENSOR_BASE^(MAXBRIGHTNESS - MINBRIGHTNESS) * (MAXBRIGHTNESS - ...
|
|
|
|
MINBRIGHTNESS) + MINBRIGHTNESS;
|
|
|
|
b = floor( (LIGHTSENSOR_BASE.^floor(brightness_per_unit_light * (l - LIGHTSENSOR_BOTTOM) / ...
|
|
|
|
LIGHTSENSOR_SCALE)) / LIGHTSENSOR_BASE^(MAXBRIGHTNESS - MINBRIGHTNESS) * (MAXBRIGHTNESS - ...
|
|
|
|
MINBRIGHTNESS)) + MINBRIGHTNESS;
|
|
|
|
|
|
|
|
[brightness_per_unit_light * (l - LIGHTSENSOR_BOTTOM) / LIGHTSENSOR_SCALE; l]
|
|
|
|
|
|
|
|
b1(l <= LIGHTSENSOR_BOTTOM) = MINBRIGHTNESS;
|
|
|
|
b1(l >= LIGHTSENSOR_TOP) = MAXBRIGHTNESS;
|
|
|
|
b(l <= LIGHTSENSOR_BOTTOM) = MINBRIGHTNESS;
|
|
|
|
b(l >= LIGHTSENSOR_TOP) = MAXBRIGHTNESS;
|
|
|
|
|
|
|
|
b2 = round(b1);
|
|
|
|
|
|
|
|
figure
|
|
|
|
plot(l, b1, l, b, l, b2)
|
|
|
|
A = axis;
|
|
|
|
A(3) = -1;
|
|
|
|
A(4) = MAXBRIGHTNESS + 1;
|
|
|
|
axis(A);
|
|
|
|
grid on
|