MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Обработка сигналов и изображений\ Image Processing Toolbox

И.М.Журавель "Краткий курс теории обработки изображений"

В оглавление книги \ К предыдущему разделу \ К следующему разделу

Формирование ночного изображения на основе дневного и наоборот

Формирование ночного изображения на основе дневного

Новые возможности цифровой обработки изображений предоставляют пользователю широкие возможности для разнообразных преобразований. В данной работе будет рассмотрено одно из таких преобразований, а именно — виртуальное преобразование условий формирования изображений.

Ночные изображения, в отличие от дневных, характеризуются более низким суммарным контрастом, более низкой яркостью и размытыми границами объектов. Таким образом, можно предположить, что для получения ночного изображения необходимо понизить контраст, яркость и размыть границы на дневном изображении. Еще одной особенностью ночных изображений является более весомое присутствие оттенков синей цветовой составляющей.

Приведем пример программной реализации описанного выше метода формирования ночного изображения на основе дневного. Для этого сначала считаем в рабочее пространство Matlab некоторое исходное изображение в формате rgb, которое сделано в дневное время суток.

%Считывание исходного изображения 
L_rgb=imread('krepost.bmp');
[N M s]=size(L_rgb);
L_rgb=double(L_rgb)./255;
figure, imshow(L_rgb);
title('Исходное изображение в цветовом пространстве RGB');


Как уже было сказано выше, ночные изображения характеризуются более весомым присутствием синей составляющей. Для проведения последующих операций преобразуем изображение из цветового пространства rgb в цветовое пространство xyz.

%Преобразование изображения из цветового пространства rgb в цветовое
%пространство xyz
trans=[0.5149 0.3244 0.1607; 0.2654 0.6704 0.0642; 0.0248 0.1248 0.8504];
for i=1:N;
    disp(i);
    for j=1:M;
        L_xyz(i,j,:)=[L_rgb(i,j,1) L_rgb(i,j,2) L_rgb(i,j,3)]*trans;
    end;
end;
figure, imshow(L_xyz);title('Исходное изображение в цветовом пространстве XYZ');


Следующий шаг заключается в формировании двух размытых затемненных изображений. Для этого будем использовать свертку исходного изображения с фильтром Гаусса. Стандартное отклонение в функции fspecial выбирается таким образом, чтобы подавить мелкие детали, которые невидимы ночью.

%Формирование первого размытого изображения
h = fspecial('gaussian',[11 11],0.1);
L_xyz_blur_1 = imfilter(L_xyz,h,'replicate');
figure, imshow(L_xyz_blur_1);
title('Первое размытое исходное изображение в цветовом пространстве XYZ');


%Формирование второго размытого изображения
h = fspecial('gaussian',[11 11],0.1)./6;
L_xyz_blur_2 = imfilter(L_xyz,h,'replicate');
figure, imshow(L_xyz_blur_2);
title('Второе размытое исходное изображение в цветовом пространстве XYZ');

Далее приступаем к формированию ночного изображения на основе дневного. При этом существует два варианта решения этой задачи.

%Вариант 1
a=0.2;
L_nigth_1=L_xyz_blur_2+a.*(L_xyz_blur_1-L_xyz_blur_2);
figure, imshow(L_nigth_1);
title('Ночное изображение (вариант 1)');


%Вариант 2
a=2;
L_nigth_2=L_xyz_blur_2+(L_xyz_blur_1-L_xyz_blur_2).*(1/a);
figure, imshow(L_nigth_2);
title('Ночное изображение (вариант 2)');


В этой части материала нами приведен пример формирования ночного изображения на основе дневного. Для обеспечения реалистичности ночных изображений используются два основных параметра – значение стандартного среднеквадратического отклонения в функции fspecial и коэффициент усиления a.

Программа, которая реализует приведенный выше метод:

%===== Формирование ночного изображения на основе дневного =====
clear;
%Считывание исходного изображения 
L_rgb=imread('krepost.bmp');            
[N M s]=size(L_rgb);
L_rgb=double(L_rgb)./255;
figure, imshow(L_rgb);
title('Исходное изображение в цветовом пространстве RGB');

%Преобразование изображения из цветового пространства rgb в цветовое
%пространство xyz
trans=[0.5149 0.3244 0.1607; 0.2654 0.6704 0.0642; 0.0248 0.1248 0.8504];
for i=1:N;
    disp(i);
    for j=1:M;
        L_xyz(i,j,:)=[L_rgb(i,j,1) L_rgb(i,j,2) L_rgb(i,j,3)]*trans;
    end;
end;
figure, imshow(L_xyz);
title('Исходное изображение в цветовом пространстве XYZ');

%Формирование первого размытого изображения
h = fspecial('gaussian',[11 11],0.1);
L_xyz_blur_1 = imfilter(L_xyz,h,'replicate');
figure, imshow(L_xyz_blur_1);
title('Первое размытое исходное изображение в цветовом пространстве XYZ');

%Формирование второго размытого изображения
h = fspecial('gaussian',[11 11],0.1)./6;
L_xyz_blur_2 = imfilter(L_xyz,h,'replicate');
figure, imshow(L_xyz_blur_2);
title('Второе размытое исходное изображение в цветовом пространстве XYZ');

a=0.2;
L_nigth_1=L_xyz_blur_2+a.*(L_xyz_blur_1-L_xyz_blur_2);
figure, imshow(L_nigth_1);
title('Ночное изображение (вариант 1)');

a=2;
L_nigth_2=L_xyz_blur_2+(L_xyz_blur_1-L_xyz_blur_2).*(1/a);
figure, imshow(L_nigth_2);
title('Ночное изображение (вариант 2)');

Формирование дневного изображения на основе ночного

В рамках данного материала интересно будет рассмотреть обратную задачу — формирование дневного изображения на основе ночного. Прежде чем приступить к решению данной задачи, еще раз определим основные отличия между изображениями, которые сформированы в дневное и ночное время суток. Прежде всего, они отличаются значениями интенсивностей пикселей, поэтому при имитации дневного изображения на основе ночного необходимо проводить коррекцию динамического диапазона яркостей. Второй особенностью, которая отличает изображения сделанные в дневное время суток от ночных изображений, является более четкая видимость мелких деталей. Для повышения детализации изображений необходимо будет проводить операцию контрастирования или подчеркивания границ.

Итак, приведем пример формирования дневного изображения на основе ночного.

Сначала считаем в рабочее пространство Matlab в качестве исходного ночное изображение, которое было сформировано в первой части материала.

%Считывание исходного изображения 
L_rgb=imread('L_nigth_1.bmp');            
[N M s]=size(L_rgb);
L_rgb=double(L_rgb)./255;
figure,imshow(L_rgb);
title('Исходное изображение в цветовом пространстве RGB');


Построим гистограммы значений интенсивностей цветовых составляющих пикселей исходного изображения и проанализируем их.

figure, subplot(321),imshow(L_rgb(:,:,1));
	title('Цветовая составляющая r');
    subplot(323),imshow(L_rgb(:,:,2));
    title('Цветовая составляющая g');
    subplot(325),imshow(L_rgb(:,:,3));
    title('Цветовая составляющая b');
subplot(322),imhist(L_rgb(:,:,1));
title('Гистограмма составляющей r');
subplot(324),imhist(L_rgb(:,:,2));
title('Гистограмма составляющей g');
subplot(326),imhist(L_rgb(:,:,3));
title('Гистограмма составляющей b');


Из приведенных гистограмм видно, что значения интенсивностей цветовых составляющих находятся в довольно ограниченном диапазоне, что отрицательно влияет на зрительное восприятие таких изображений. Проведем операцию растяжения динамического диапазона значений интенсивностей цветовых составляющих.

%Коррекция динамического яркостного диапазона
L_r_new=(L_rgb(:,:,1)-min(min(L_rgb(:,:,1))))./(max(max(L_rgb(:,:,1)))-min(min(L_rgb(:,:,1))));
L_g_new=(L_rgb(:,:,2)-min(min(L_rgb(:,:,2))))./(max(max(L_rgb(:,:,2)))-min(min(L_rgb(:,:,2))));
L_b_new=(L_rgb(:,:,3)-min(min(L_rgb(:,:,3))))./(max(max(L_rgb(:,:,3)))-min(min(L_rgb(:,:,3))));

Визуализируем сначала каждую из скорректированных цветовых составляющих отдельно.

figure, subplot(321),imshow(L_r_new);
title('Скорректированная составляющая r');
        subplot(323),imshow(L_g_new);
        title('Скорректированная составляющая g');
        subplot(325),imshow(L_b_new);
        title('Скорректированная составляющая b');
   subplot(322),imhist(L_r_new);
   title('Гистограмма составляющей r');
   subplot(324),imhist(L_g_new);
    title('Гистограмма составляющей g');
   subplot(326),imhist(L_b_new);
   title('Гистограмма составляющей b');

Из представленных изображений видно, что каждая из скорректированных цветовых составляющих занимает весь динамический диапазон. Теперь представим эти составляющие в виде цветного изображения.

L_new(:,:,1)=L_r_new;   L_new(:,:,2)=L_g_new;   L_new(:,:,3)=L_b_new;   
figure, imshow(L_new);
title('Исходное изображение с скорректированным динамическим диапазоном интенсивностей');

Существенным недостатком полученного изображения является то, что оно характеризуется низким контрастом. Этим объясняется плохая видимость мелких деталей и низкое визуальное качество в целом.

Для устранения этого недостатка необходимо провести операцию повышения контрастности изображений. В данном примере эта операция проводится отдельно для каждой цветовой составляющей. Такое действие дает хороший результат, но более корректно такие операции проводить, рассматривая не отдельные цветовые составляющие, а цвет пикселя в целом. Это позволит обойти проблему разбалансировки цветов.

%Повышение резкости изображения
h = fspecial('unsharp',0.2);
L_r_new_unsharp = imfilter(L_r_new,h,'replicate');
L_g_new_unsharp = imfilter(L_g_new,h,'replicate');
L_b_new_unsharp = imfilter(L_b_new,h,'replicate');

Сформируем результирующее изображение.

L_new_unsharp(:,:,1)=L_r_new_unsharp; 
L_new_unsharp(:,:,2)=L_g_new_unsharp;
L_new_unsharp(:,:,3)=L_b_new_unsharp;
figure, imshow(L_new_unsharp);
title('Исходное изображение с скорректированными динамическим диапазоном и контрастностью');


Интересно будет сравнить исходное дневное изображение из первой части материала и сформированное программным способом.

Исходное дневное изображение Сформированное изображение

Проводя анализ исходного и сформированного программным путем изображений, можно сказать, что по качеству визуального восприятия результирующее изображение не уступает исходному, что свидетельствует об эффективности предложенного метода.

Дополнительно отметим, что качество результирующего изображения можно повысить, улучшив зрительное восприятие затемненных областей. Корректировка будет проводиться для каждой цветовой составляющей отдельно.

%Коррекция динамического яркостного диапазона
L_r_new = imadjust(L_rgb(:,:,1),[0; .3],[],.7);
L_g_new = imadjust(L_rgb(:,:,2),[0; .3],[],.7);
L_b_new = imadjust(L_rgb(:,:,3),[0; .3],[],.7);

figure, subplot(321),imshow(L_r_new);
title('Скорректированная составляющая r');
        subplot(323),imshow(L_g_new);
        title('Скорректированная составляющая g');
        subplot(325),imshow(L_b_new);
        title('Скорректированная составляющая b');
   subplot(322),imhist(L_r_new);
   title('Гистограмма составляющей r');
   subplot(324),imhist(L_g_new);
   title('Гистограмма составляющей g');
   subplot(326),imhist(L_b_new);
   title('Гистограмма составляющей b');

В некоторых случаях целесообразно провести дополнительное контрастирование изображения. И результат представляется в следующем виде.


Программа, которая реализует метод имитации дневных изображений на основе ночных:

%===== Формирование дневных изображений на основе ночных =====
clear;
%Считывание исходного изображения 
L_rgb=imread('n1.bmp');            
[N M s]=size(L_rgb);
L_rgb=double(L_rgb)./255;
figure,imshow(L_rgb);
title('Исходное изображение в цветовом пространстве RGB');
 
figure, subplot(321),imshow(L_rgb(:,:,1));
title('Цветовая составляющая r');
        subplot(323),imshow(L_rgb(:,:,2));
         title('Цветовая составляющая g');
        subplot(325),imshow(L_rgb(:,:,3));
         title('Цветовая составляющая b');
   subplot(322),imhist(L_rgb(:,:,1));
   title('Гистограмма составляющей r');
   subplot(324),imhist(L_rgb(:,:,2));
   title('Гистограмма составляющей g');
   subplot(326),imhist(L_rgb(:,:,3));
   title('Гистограмма составляющей b');
   
%Коррекция динамического яркостного диапазона
L_r_new=(L_rgb(:,:,1)-min(min(L_rgb(:,:,1))))./(max(max(L_rgb(:,:,1)))-min(min(L_rgb(:,:,1))));
L_g_new=(L_rgb(:,:,2)-min(min(L_rgb(:,:,2))))./(max(max(L_rgb(:,:,2)))-min(min(L_rgb(:,:,2))));
L_b_new=(L_rgb(:,:,3)-min(min(L_rgb(:,:,3))))./(max(max(L_rgb(:,:,3)))-min(min(L_rgb(:,:,3))));
 
figure, subplot(321),imshow(L_r_new);
title('Скорректированная составляющая r');
        subplot(323),imshow(L_g_new);
        title('Скорректированная составляющая g');
        subplot(325),imshow(L_b_new);
         title('Скорректированная составляющая b');
   subplot(322),imhist(L_r_new);
   title('Гистограмма составляющей r');
   subplot(324),imhist(L_g_new);
   title('Гистограмма составляющей g');
   subplot(326),imhist(L_b_new);
   title('Гистограмма составляющей b');
   
L_new(:,:,1)=L_r_new;   L_new(:,:,2)=L_g_new;   L_new(:,:,3)=L_b_new;   
figure, imshow(L_new);
title('Исходное изображение с скорректированным 
динамическим диапазоном интенсивностей');
 
%Повышение резкости изображения
h = fspecial('unsharp',0.2);
L_r_new_unsharp = imfilter(L_r_new,h,'replicate');
L_g_new_unsharp = imfilter(L_g_new,h,'replicate');
L_b_new_unsharp = imfilter(L_b_new,h,'replicate');
 
L_new_unsharp(:,:,1)=L_r_new_unsharp; 
L_new_unsharp(:,:,2)=L_g_new_unsharp;
 L_new_unsharp(:,:,3)=L_b_new_unsharp;
figure, imshow(L_new_unsharp);
title('Исходное изображение с скорректированными 
динамическим диапазоном и контрастностью');

Литература

  1. W.B.Thompson, P.Shirley A Spatial Post-Processing Algorithm for Images of Night Scenes, 2002
  2. Е.Макарова, А. Конушин. Формирование ночного изображения на основе дневного

В оглавление книги \ К предыдущему разделу \ К следующему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика