Мы можем попытаться скорректировать эффект освещения, подгоняя линейную плоскость по интенсивности изображения, которая будет приблизительно соответствовать среднему уровню по изображению.Вычитая эту плоскость затенения из исходного изображения, мы можем попытаться нормализовать условия освещения по всему изображению.
Для цветных изображений RGB просто повторите процесс на каждом канале отдельно или даже примените его к другому цветовому пространству (HSV, L a b * и т. Д.)
Вот пример реализации:
function img = correctLighting(img, method)
if nargin<2, method='rgb'; end
switch lower(method)
case 'rgb'
%# process R,G,B channels separately
for i=1:size(img,3)
img(:,:,i) = LinearShading( img(:,:,i) );
end
case 'hsv'
%# process intensity component of HSV, then convert back to RGB
HSV = rgb2hsv(img);
HSV(:,:,3) = LinearShading( HSV(:,:,3) );
img = hsv2rgb(HSV);
case 'lab'
%# process luminosity layer of L*a*b*, then convert back to RGB
LAB = applycform(img, makecform('srgb2lab'));
LAB(:,:,1) = LinearShading( LAB(:,:,1) ./ 100 ) * 100;
img = applycform(LAB, makecform('lab2srgb'));
end
end
function I = LinearShading(I)
%# create X-/Y-coordinate values for each pixel
[h,w] = size(I);
[X Y] = meshgrid(1:w,1:h);
%# fit a linear plane over 3D points [X Y Z], Z is the pixel intensities
coeff = [X(:) Y(:) ones(w*h,1)] \ I(:);
%# compute shading plane
shading = coeff(1).*X + coeff(2).*Y + coeff(3);
%# subtract shading from image
I = I - shading;
%# normalize to the entire [0,1] range
I = ( I - min(I(:)) ) ./ range(I(:));
end
Теперь давайте протестируем его на заданном изображении:
img = im2double( imread('http://i.stack.imgur.com/JmHKJ.jpg') );
subplot(411), imshow(img)
subplot(412), imshow( correctLighting(img,'rgb') )
subplot(413), imshow( correctLighting(img,'hsv') )
subplot(414), imshow( correctLighting(img,'lab') )
Разница невелика, но она может улучшить результаты дальнейшей обработки изображений и задачи распознавания.
РЕДАКТИРОВАТЬ: Вот некоторые результаты, которые я получил, применив другие методы повышения контрастности IMADJUST , HISTEQ , ADAPTHISTEQ в различных цветовых пространствах таким же образом, как указано выше:
Помните, что вы должны точно настроить любой параметр, чтобы соответствовать вашему изображению ...