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

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

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

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

Некоторые алгоритмы повышения визуального качества изображений

Повышение визуального качества изображений с использованием метода Канни.

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

Считаем исходное изображение.

clear;
I = imread('hestain.bmp');

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

I=I(:,:,1);

Отметим, что преобразование полноцветного изображения в полутоновое можно выполнить также с использованием встроенной функции rgb2gray.

I=double(I)./255;
figure, imshow(I);title('Исходное изображение');

Исходное изображение
Исходное изображение


Далее локализируем границы, которые необходимо усилить. Для этого будем использовать метод Канни.

BW = edge(I,'canny');
figure, imshow(BW);
title('Выделение границ на исходном изображении методом Канни');

Выделение границ на исходном изображении методом Канни
Выделение границ на исходном изображении методом Канни


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

if BW(i,j)==1;
	box_mean=mean(I(i-r:i+r,j-r:j+r));
    if I(i,j)<box_mean;
    	a=.3;
    else
    	a=-.3;
    end;
   	Iout(i,j)=I(i,j)*(1+a);
else
	Iout(i,j)=I(i,j);
end;

Изображение с подчеркнутыми краями
Изображение с подчеркнутыми краями


Также отметим, что усиление границ объектов изображения не является постоянным, а зависит от конкретного изображения. Для регулировки усиления используется параметр a.

Программа, реализующая описанный выше метод.

%Повышение визуального качества изображений путем 
подчеркивания границ
clear;
I  = imread('hestain.bmp');
I=I(:,:,1);
I=double(I)./255;
figure, imshow(I);
title('Исходное изображение');
 
%Выделение границ методом Канни
BW = edge(I,'canny');
figure, imshow(BW);
title('Выделение границ на исходном изображении методом Канни');
[N M]=size(I);
 
%Подчеркивание границ
r=1;
for i=2:N-1;
    disp(i);
    for j=2:M-1;
        if BW(i,j)==1;
            box_mean=mean(I(i-r:i+r,j-r:j+r));
            if I(i,j)<box_mean;
                a=.3;
            else
                a=-.3;
            end;
            Iout(i,j)=I(i,j)*(1+a);
        else
            Iout(i,j)=I(i,j);
        end;
    end;
end;
figure, imshow(Iout);
title('Изображение с подчеркнутыми краями');

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

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

Приведем пример реализации метода. Для начала считаем исходное изображение.

I = imread('hestain.bmp');

Как и в предыдущем примере при реализации метода будем использовать только одну цветовую составляющую rgb-изображения.

I=I(:,:,1);
I=double(I)./255;
figure, imshow(I);title('Исходное изображение');

Исходное изображение
Исходное изображение


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

for i=1+r:N-r;
    disp(i);
    for j=1+r:M-r;
            box=I(i-r:i+r,j-r:j+r);
            S(i,j)=std(box(:));
    end;
end;

Среднеквадратическое отклонение значений интенсивностей пикселей изображения
Среднеквадратическое отклонение значений интенсивностей пикселей изображения


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

if I(i,j)>mean(box);
	I(i,j)=I(i,j)+k*S(i,j);
else
	I(i,j)=I(i,j)-k*S(i,j);
end;

Изображение с подчеркнутыми границами
Изображение с подчеркнутыми границами


Программа, реализующая описанный выше метод.

%Подчеркивание границ объектов изображения
clear;
I  = imread('hestain.bmp');
I=I(:,:,1);
I=double(I)./255;
figure, imshow(I);title('Исходное изображение');
 
[N M]=size(I);
 
%Подчеркивание границ
k=.65;
r=3;
for i=1+r:N-r;
    disp(i);
    for j=1+r:M-r;       
            box=I(i-r:i+r,j-r:j+r);
            S(i,j)=std(box(:));
            if I(i,j)>mean(box);
                I(i,j)=I(i,j)+k*S(i,j);
            else
                I(i,j)=I(i,j)-k*S(i,j);
            end;
    end;
end;
I=I(1+r:N-r,1+r:M-r);
I(I<0)=0;
I(I>1)=1;
figure, imshow(S);
title('Среднеквадратическое отклонение значений 
интенсивностей пикселей изображения');
figure, imshow(I);
title('Изображение с подчеркнутыми границами');

Улучшение цветных изображений с использованием среднеквадратических отклонений интенсивностей локальных окрестностей

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

Приведем пример программной реализации метода.

Сначала исходное изображение считывается в рабочее пространство Matlab.

I = imread('forest.bmp');
I=double(I)./255;
figure, imshow(I);title('Исходное изображение');

Исходное изображение
Исходное изображение


Далее для каждой из цветовых составляющих определяются параметры локальных окрестностей – минимум, максимум и среднеквадратическое отклонение интенсивностей пикселей. Все эти параметры определены для локальной окрестности с размерами r.

	min_box_r=min(min(I(i-r:i+r,j-r:j+r,1)));
    min_box_g=min(min(I(i-r:i+r,j-r:j+r,2)));
    min_box_b=min(min(I(i-r:i+r,j-r:j+r,3)));
    max_box_r=max(max(I(i-r:i+r,j-r:j+r,1)));
    max_box_g=max(max(I(i-r:i+r,j-r:j+r,2)));
    max_box_b=max(max(I(i-r:i+r,j-r:j+r,3)));
    sigm_r=std2(I(i-r:i+r,j-r:j+r,1));
    sigm_g=std2(I(i-r:i+r,j-r:j+r,2));
    sigm_b=std2(I(i-r:i+r,j-r:j+r,3));

Также задается соответствующий коэффициент усиления

Kr=15*sigm_r;Kg=15*sigm_g;Kb=15*sigm_b;

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

Iout(i,j,1)=I(i,j,1)*(1-Kr)+(I(i,j,1)-min_box_r)/(max_box_r-min_box_r+eps)*Kr;
Iout(i,j,2)=I(i,j,2)*(1-Kg)+(I(i,j,2)-min_box_g)/(max_box_g-min_box_g+eps)*Kg;
Iout(i,j,3)=I(i,j,3)*(1-Kb)+(I(i,j,3)-min_box_b)/(max_box_b-min_box_b+eps)*Kb;  

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

1) Размер локальной окрестности 3 x 3, коэффициент усиления Kr = Kg = Kb = 3.

Размер локальной окрестности 3 x 3, коэффициент усиления Kr = Kg = Kb = 3


2) Размер локальной окрестности 3 x 3, коэффициент усиления Kr = Kg = Kb = 7.

Размер локальной окрестности 3 x 3, коэффициент усиления Kr = Kg = Kb = 7


3) Размер локальной окрестности 3 x 3, коэффициент усиления Kr = Kg = Kb = 15.

Размер локальной окрестности 3 x 3, коэффициент усиления Kr = Kg = Kb = 15


4) Размер локальной окрестности 7 x 7, коэффициент усиления Kr = Kg = Kb = 3.

Размер локальной окрестности 7 x 7, коэффициент усиления Kr = Kg = Kb = 3


5) Размер локальной окрестности 7 x 7, коэффициент усиления Kr = Kg = Kb = 7.

Размер локальной окрестности 7 x 7, коэффициент усиления Kr = Kg = Kb = 7


6) Размер локальной окрестности 7 x 7, коэффициент усиления Kr = Kg = Kb = 15.

Размер локальной окрестности 7 x 7, коэффициент усиления Kr = Kg = Kb = 15


7) Размер локальной окрестности 15 x 15, коэффициент усиления Kr = Kg = Kb = 3.

Размер локальной окрестности 15 x 15, коэффициент усиления Kr = Kg = Kb = 3


8) Размер локальной окрестности 15 x 15, коэффициент усиления Kr = Kg = Kb = 7.

Размер локальной окрестности 15 x 15, коэффициент усиления Kr = Kg = Kb = 7


9) Размер локальной окрестности 15 x 15, коэффициент усиления Kr = Kg = Kb = 15.

Размер локальной окрестности 15 x 15, коэффициент усиления Kr = Kg = Kb = 15


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

Программа, реализующая описанный выше метод.

%Улучшение качества цветных изображений
clear;
I = imread('forest.bmp');
I=double(I)./255;
figure, imshow(I);title('Исходное изображение');

[N M k]=size(I);
 
%Підкреслення границь
r=fix(15/2);
for i=1+r:N-r;
    disp(i);
    for j=1+r:M-r;                
    	min_box_r=min(min(I(i-r:i+r,j-r:j+r,1)));
        min_box_g=min(min(I(i-r:i+r,j-r:j+r,2)));
        min_box_b=min(min(I(i-r:i+r,j-r:j+r,3)));
        max_box_r=max(max(I(i-r:i+r,j-r:j+r,1)));
        max_box_g=max(max(I(i-r:i+r,j-r:j+r,2)));
        max_box_b=max(max(I(i-r:i+r,j-r:j+r,3)));
        sigm_r=std2(I(i-r:i+r,j-r:j+r,1));
        sigm_g=std2(I(i-r:i+r,j-r:j+r,2));
        sigm_b=std2(I(i-r:i+r,j-r:j+r,3));
        Kr=15*sigm_r;Kg=15*sigm_g;Kb=15*sigm_b;
        Iout(i,j,1)=I(i,j,1)*(1-Kr)+(I(i,j,1)-min_box_r)/(max_box_r-min_box_r+eps)*Kr;
        Iout(i,j,2)=I(i,j,2)*(1-Kg)+(I(i,j,2)-min_box_g)/(max_box_g-min_box_g+eps)*Kg;
        Iout(i,j,3)=I(i,j,3)*(1-Kb)+(I(i,j,3)-min_box_b)/(max_box_b-min_box_b+eps)*Kb;          
    end;
end;
Iout=Iout(1+r:N-r,1+r:M-r,:);
figure, imshow(Iout);
%imwrite(Iout,'15_15.jpg');

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


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

Система Orphus

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