Нелинейное растяжение локальных контрастов

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

Шаг 1. Определение количественной меры локального контраста.

Шаг 2. Увеличение по определенному закону некоторой количественной меры локального контраста.

Шаг 3. Восстановление элемента преобразованного изображения с усиленным локальным контрастом.

Такие преобразования выполняются для каждого элемента изображения.

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

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

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

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

Нелинейное растяжение локальных контрастов - student2.ru

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

Нелинейное растяжение локальных контрастов - student2.ru

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

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

Для нелинейного преобразования локального контраста используем следующее выражение:

Нелинейное растяжение локальных контрастов - student2.ru (9)

где Нелинейное растяжение локальных контрастов - student2.ru - значение локального контраста элемента исходного изображения с координатами Нелинейное растяжение локальных контрастов - student2.ru , Нелинейное растяжение локальных контрастов - student2.ru - усиленное значение локального контраста элемента изображения с координатами Нелинейное растяжение локальных контрастов - student2.ru ; Нелинейное растяжение локальных контрастов - student2.ru - максимально возможное значение локального контраста Нелинейное растяжение локальных контрастов - student2.ru ; Нелинейное растяжение локальных контрастов - student2.ru , Нелинейное растяжение локальных контрастов - student2.ru - максимальное и минимальное значения локального контраста исходного изображения, Нелинейное растяжение локальных контрастов - student2.ru - оценка математического ожидания значений локального контраста (например, среднеарифметическое значение локальных контрастов элементов изображения), Нелинейное растяжение локальных контрастов - student2.ru , Нелинейное растяжение локальных контрастов - student2.ru - коэффициенты постоянного смещения; Нелинейное растяжение локальных контрастов - student2.ru - показатель степени Нелинейное растяжение локальных контрастов - student2.ru .

Проанализируем функцию преобразования локального контраста (9). Для этого рассмотрим графики двух функций - степенного преобразования и предложенной функции (9), которые представленные на рис. 3. Функция степенного преобразования локального контраста вычисляется за выражением типа Нелинейное растяжение локальных контрастов - student2.ru , где Нелинейное растяжение локальных контрастов - student2.ru .

Нелинейное растяжение локальных контрастов - student2.ru

Рис. 3. Графики функций преобразования локального контраста (1 - степенная функция, 2 - за выражением (9)).

Из рис. 3 видно, что предложенная функция обеспечивает лучшее усиление для небольших значений локального контраста. Значения локальных контрастов для реальных изображений имеют как раз такой уровень. Тем не менее при практической реализации используют частный случай выражения (9). Он состоит в проведении преобразований лишь для таких локальных контрастов, которые удовлетворяют условию Нелинейное растяжение локальных контрастов - student2.ru . В целом предложенный метод позволяет проводить эффективное усиление контрастности изображений.

%Программа, реализующая метод повышения контрастности изображений%с использованием энтропииclear;%=====Считывание исходных данных=====L=imread('image1.tif');[N M]=size(L);m=15;n=15;n1=fix(n/2);m1=fix(m/2);%===Преобразование матрицы элементов изображения для избежания краевого эффекта=====a=L(1,1);b=L(1,M);c=L(N,1);d=L(N,M);for i=1:n1; for j=1:m1; L1(i,j)=a; L3(i,j)=b; L6(i,j)=c; L8(i,j)=d; end;end; L2=L(1,1:M); L02=L2; for i=1:n1-1; L2=[L2;L02]; end; L7=L(N,1:M); L07=L7; for i=1:n1-1; L7=[L7;L07]; end; L4=L(1:N,1); L4=L4'; L04=L4; for i=1:m1-1; L4=[L4;L04]; end; L4=L4'; L5=L(1:N,M); L5=L5'; L05=L5; for i=1:m1-1; L5=[L5;L05]; end; L5=L5'; L1=[L1;L4]; L1=[L1;L6]; L1=L1'; L2=[L2;L]; L2=[L2;L7]; L2=L2'; L3=[L3;L5]; L3=[L3;L8]; L3=L3'; L1=[L1;L2]; L1=[L1;L3]; Lr=L1';clear L2;clear L3;clear L4;clear L5;clear L6;clear L7;clear L8;clear L02;clear L04;clear L05;clear L07;clear L1;clear L;%=====Определение параметров локальной окрестности=====Entropia=ones(N+2*n1,M+2*m1); for i=1+n1:N+n1; disp(i) for j=1+n1:M+m1; if j==1+m1; D=0; for a=-n1:n1; for b=-m1:m1; D(n1+1+a,m1+1+b)=Lr(i+a,j+b); end; end; end; if j>1+m1; for a=-n1:n1; D(n1+1+a,m+1)=Lr(i+a,j+m1); end; D=D(1:n,2:m+1); end; Pk_vektor=hist(D(:),max(max(D))-min(min(D))+1)/(n*m); for ind=1:length(Pk_vektor); if Pk_vektor(ind)==0; Pk_vektor(ind)=1; end; end; Entropia(i,j)=-sum(Pk_vektor.*log(Pk_vektor)); end; end;n_filter=3;m_filter=n_filter;F=ones(n_filter,m_filter);Lser=filter2(F,Lr,'same')/(n_filter*m_filter);clear n_filter;clear m_filter;clear F;amax=.7;amin=.5;%=====Определение локальных контрастов и функции их преобразования=====C=abs(Lr-Lser)./(Lr+Lser+eps);alfa=amin+.2.*(1-exp(-((Entropia./max(max(Entropia))-.5).^2) ./(2*.14^2))).^3;C=C.^alfa;for i=1+n1:N+n1;for j=1+n1:M+m1; if Lr(i,j)>=Lser(i,j); Lvyh(i,j)=Lser(i,j)*(1+C(i,j))/(1-C(i,j)+eps); else Lvyh(i,j)=Lser(i,j)*(1-C(i,j))/(1+C(i,j)); end; %=====Проверка корректности диапазона===== if Lvyh(i,j)>=255; Lvyh(i,j)=255; end; if Lvyh(i,j)<=0; Lvyh(i,j)=0; end;end;end;Lvyh=Lvyh(n1+1:N+n1,m1+1:M+m1);Lvyh=round(Lvyh);L=Lr(n1+1:N+n1,m1+1:M+m1);%=====Визуализация результатов обработки=====colormap(gray(255));subplot(221);image(L');axis('image'); subplot(222);image(Lvyh');axis('image');Результаты работы программы представлены на рис.
Нелинейное растяжение локальных контрастов - student2.ru Нелинейное растяжение локальных контрастов - student2.ru
а) б)
Нелинейное растяжение локальных контрастов - student2.ru Нелинейное растяжение локальных контрастов - student2.ru
в) г)

Рис. Локально-адаптивный метод повышения визуального качества изображений с использованием энтропии: а) исходное изображение; б) изображение а, обработанное известным методом с использованием энтропии; в) изображение а, обработанное известным методом с использованием классического подхода к определению энтропии; г) изображение а, обработанное предложенным методом.

%Программа, реализующая метод контрастирования изображений с использованием%среднеквадратических отклонений значений яркостей элементов локальной окрестности.clear;%=====Считывание исходных данных=====L=imread('image2.tif');[N M]=size(L);m=15;n=15;n1=fix(n/2);m1=fix(m/2);%===Преобразование матрицы элементов изображения для избежания краевого эффекта=====a=L(1,1);b=L(1,M);c=L(N,1);d=L(N,M);for i=1:n1; for j=1:m1; L1(i,j)=a; L3(i,j)=b; L6(i,j)=c; L8(i,j)=d; end;end; L2=L(1,1:M); L02=L2; for i=1:n1-1; L2=[L2;L02]; end; L7=L(N,1:M); L07=L7; for i=1:n1-1; L7=[L7;L07]; end; L4=L(1:N,1); L4=L4'; L04=L4; for i=1:m1-1; L4=[L4;L04]; end; L4=L4'; L5=L(1:N,M); L5=L5'; L05=L5; for i=1:m1-1; L5=[L5;L05]; end; L5=L5'; L1=[L1;L4]; L1=[L1;L6]; L1=L1'; L2=[L2;L]; L2=[L2;L7]; L2=L2'; L3=[L3;L5]; L3=[L3;L8]; L3=L3'; L1=[L1;L2]; L1=[L1;L3]; Lr=L1';clear L2;clear L3;clear L4;clear L5;clear L6;clear L7;clear L8;clear L02;clear L04;clear L05;clear L07;clear L1;clear L;%=Определение среднеквадратических отклонений значений яркостей элементов локальной окрестности=SV=zeros(N+2*n1,M+2*m1);for i=1+n1:N+n1;for j=1+m1:M+m1; if j==1+m1; D=0; for a=-n1:n1; for b=-m1:m1; D(n1+1+a,m1+1+b)=Lr(i+a,j+b); end; end; end; if j>1+m1; for a=-n1:n1; D(n1+1+a,m+1)=Lr(i+a,j+m1); end; D=D(1:n,2:m+1); end; D=D(:); SV(i,j)=std(D); end; end;%=====Определение массива усредненных значений элементов изображения=====n_filter=3;m_filter=n_filter;F=ones(n_filter,m_filter);Lser=filter2(F,Lr,'same')/(n_filter*m_filter);amin=.35;amax=.95;C=(Lr-Lser)./(Lr+Lser+eps);C=abs(C);for i=1+n1:N+n1; disp(i)for j=1+m1:M+m1; if SV(i,j)<=1; SV(i,j)=1; end; if j==1+m1; TM=0; for a=-n1:n1; for b=-m1:m1; TM(n1+1+a,m1+1+b)=SV(i+a,j+b); end; end; end; if j>1+m1; for a=-n1:n1; TM(n1+1+a,m+1)=SV(i+a,j+m1); end; TM=TM(1:n,2:m+1); end; SV_MIN=min(min(TM)); SV_MAX=max(max(TM)); C(i,j)=C(i,j)^(amin+(amax-amin)*(SV(i,j)-SV_MIN)/(SV_MAX-SV_MIN)); if Lroshyrena(i,j)>=Lser(i,j); Lvyh(i,j)=Lser(i,j)*(1+C(i,j))/(1-C(i,j)); else Lvyh(i,j)=Lser(i,j)*(1-C(i,j))/(1+C(i,j)); end;%=====Проверка корректности диапазона===== if Lvyh(i,j)>=255; Lvyh(i,j)=255; end; if Lvyh(i,j)<=0; Lvyh(i,j)=0; end;end;end;Lvyh=Lvyh(n1+1:N+n1,m1+1:M+m1);Lvyh=round(Lvyh);L=Lroshyrena(n1+1:N+n1,m1+1:M+m1);%=====Визуализация результатов=====colormap(gray(255));subplot(221);image(L);axis('image');subplot(222);image(Lvyh);axis('image'); Результаты работы программы представлены на рис.
Нелинейное растяжение локальных контрастов - student2.ru Нелинейное растяжение локальных контрастов - student2.ru Нелинейное растяжение локальных контрастов - student2.ru
а) б) в)

Рис. Локально-адаптивний метод улучшения визуального качества изображений с использованием среднеквадратических отклонений значений яркостей элементов локальной окрестности: а) исходное изображение; б) изображение а, обработанное известным методом; в) изображение а, обработанное предложенным методом.

%Программа, реализующая метод нелинейного (степенного) преобразования (растяжения)%локальных контрастов (глобальная реализация)clear;%=====Считывание исходных данных=====L=imread('im.tif');[N M]=size(L);%=====Задание параметров локальных окрестностей=====m=5;n=m;n1=fix(n/2);m1=fix(m/2);R=255;%=====Преобразование матрицы интенсивностей с целью избежания краевого эффекта=====a=L(1,1);b=L(1,M);c=L(N,1);d=L(N,M);for i=1:n1; for j=1:m1; L1(i,j)=a; L3(i,j)=b; L6(i,j)=c; L8(i,j)=d; end;end; L2=L(1,1:M); L02=L2; for i=1:n1-1; L2=[L2;L02]; end; L7=L(N,1:M); L07=L7; for i=1:n1-1; L7=[L7;L07]; end; L4=L(1:N,1); L4=L4'; L04=L4; for i=1:m1-1; L4=[L4;L04]; end; L4=L4'; L5=L(1:N,M); L5=L5'; L05=L5; for i=1:m1-1; L5=[L5;L05]; end; L5=L5'; L1=[L1;L4]; L1=[L1;L6]; L1=L1'; L2=[L2;L]; L2=[L2;L7]; L2=L2'; L3=[L3;L5]; L3=[L3;L8]; L3=L3'; L1=[L1;L2]; L1=[L1;L3]; Lr=L1';clear L2;clear L3;clear L4;clear L5;clear L6;clear L7;clear L8;clear L02;clear L04;clear L05;clear L07;clear L1;clear L;%=====Определение усредненного локального среднего изображения=====F=ones(n,m);Lser=filter2(F,Lr,'same')/(n*m);С=abs(Lr-Lser)/(Lr+Lser);CMIN=min(min(C));CMAX=max(max(C));alfa=.9; %=====Параметр нелинейного преобразования=====%=====Нелинейное (при a>1 или a<1) растяжение локальных контрастов=====C=((C-CMIN)./(CMAX-CMIN)).^alfa;%=====Восстановление яркостей результирующего изображения=====for i=1+n1:N+n1; disp(i)for j=1+m1:M+m1; if Lr(i,j)>=Lser(i,j); Lvyh(i,j)=Lser(i,j)*(1+C(i,j))/(1-C(i,j)); else Lvyh(i,j)=Lser(i,j)*(1-C(i,j))/(1+C(i,j)); end; if Lvyh(i,j)>=R; Lvyh(i,j)=R; end; if Lvyh(i,j)<=0; Lvyh(i,j)=0; end;end;end;Lvyh=Lvyh(n1+1:N+n1,m1+1:M+m1);Lvyh=round(Lvyh);L=Lroshyrena(n1+1:N+n1,m1+1:M+m1);%=====Визуализация результатов=====subplot(221);imshow(L');axis('image');subplot(222);imshow(Lvyh');axis('image');
Нелинейное растяжение локальных контрастов - student2.ru Нелинейное растяжение локальных контрастов - student2.ru
а) исходное изображение б) изображение а, обработанное методом Гордона
Нелинейное растяжение локальных контрастов - student2.ru Нелинейное растяжение локальных контрастов - student2.ru
в) метод нелинейного преобразования локальных контрастов (глобальный) г) метод нелинейного преобразования локальных контрастов (скользящий)

Рис. Обработка изображений методом нелинейного растяжения локальных контрастов.

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

%Программа, реализующая метод нелинейного (степенного) преобразования (растяжения)%локальных контрастов (скользящая реализация)clear;%=====Считывание исходных данных=====L=imread('im1.bmp');L=L(:,:,1);L=double(L)./255;[N M]=size(L);%=====Задание параметров локальных окрестностей=====m=17;n=m;n1=fix(n/2);m1=fix(m/2);R=255/255;%=====Преобразование матрицы интенсивностей с целью избежания краевого эффекта=====a=L(1,1);b=L(1,M);c=L(N,1);d=L(N,M);for i=1:n1; for j=1:m1; L1(i,j)=a; L3(i,j)=b; L6(i,j)=c; L8(i,j)=d; end;end; L2=L(1,1:M); L02=L2; for i=1:n1-1; L2=[L2;L02]; end; L7=L(N,1:M); L07=L7; for i=1:n1-1; L7=[L7;L07]; end; L4=L(1:N,1); L4=L4'; L04=L4; for i=1:m1-1; L4=[L4;L04]; end; L4=L4'; L5=L(1:N,M); L5=L5'; L05=L5; for i=1:m1-1; L5=[L5;L05]; end; L5=L5'; L1=[L1;L4]; L1=[L1;L6]; L1=L1'; L2=[L2;L]; L2=[L2;L7]; L2=L2'; L3=[L3;L5]; L3=[L3;L8]; L3=L3'; L1=[L1;L2]; L1=[L1;L3]; Lr=L1';clear L2;clear L3;clear L4;clear L5;clear L6;clear L7;clear L8;clear L02;clear L04;clear L05;clear L07;clear L1;clear L;alfa=5; %=====Параметр нелинейного преобразования=====%=====Восстановление яркостей результирующего изображения=====C=zeros(N+n+1,M+m+1);C1=zeros(N+n+1,M+m+1);for i=1+n1:N+n1; disp(i)for j=1+m1:M+m1; if j==1+m1; D=0; for a=-n1:n1; for b=-m1:m1; D(n1+1+a,m1+1+b)=Lr(i+a,j+b); end; end; end; if j>(1+m1); for a=-n1:n1; D(n1+1+a,m+1)=Lr(i+a,j+m1); end; D=D(1:n,2:m+1); end; Lser(i,j)=sum(sum(D))/(n*m); C(i,j)=abs((Lr(i,j)-Lser(i,j))/(Lr(i,j)+Lser(i,j))); end; end;for i=1+n1:N+n1; disp(i)for j=1+m1:M+m1; if j==1+m1; D=0; for a=-n1:n1; for b=-m1:m1; D(n1+1+a,m1+1+b)=C(i+a,j+b); end; end; end; if j>(1+m1); for a=-n1:n1; D(n1+1+a,m+1)=C(i+a,j+m1); end; D=D(1:n,2:m+1); end; CMIN(i,j)=min(min(D)); CMAX(i,j)=max(max(D)); C1(i,j)=((C(i,j)-CMIN(i,j))/(CMAX(i,j)-CMIN(i,j)))^alfa; if C1(i,j)>1; C1(i,j)=1; end; if C1(i,j)<0; C1(i,j)=0; end; if Lr(i,j)>=Lser(i,j); Lvyh(i,j)=Lser(i,j)*(1+C1(i,j))/(1-C1(i,j)+eps); else Lvyh(i,j)=Lser(i,j)*(1-C1(i,j))/(1+C1(i,j)); end; if Lvyh(i,j)>R; Lvyh(i,j)=R; end; if Lvyh(i,j)<0; Lvyh(i,j)=0; end;end;end;Lvyh=Lvyh(n1+1:N+n1,m1+1:M+m1);L=Lr(n1+1:N+n1,m1+1:M+m1);%=====Визуализация результатов=====subplot(221);imshow(L');axis('image');subplot(222);imshow(Lvyh');axis('image');

Литература.

Наши рекомендации