Нелинейное растяжение локальных контрастов
Усиление контраста - одна из важных задач обработки изображений, распознавания образов и машинного зрения. Решение этой задачи непосредственно связано с повышением вероятности правильного восприятия изображения. В последнее время разработаны методы улучшения изображений, которые базируются на нелинейных преобразованиях локальных контрастов с учетом особенностей человеческого зрения. Реализация этих методов состоит в выполнении трех основных шагов:
Шаг 1. Определение количественной меры локального контраста.
Шаг 2. Увеличение по определенному закону некоторой количественной меры локального контраста.
Шаг 3. Восстановление элемента преобразованного изображения с усиленным локальным контрастом.
Такие преобразования выполняются для каждого элемента изображения.
Предлагается новый подход к повышению контраста изображения, который базируется на преобразовании гистограммы локальных контрастов.
Рассмотрев гистограммы распределения значений локальных контрастов реальных изображений отметим, что в большинстве случаев они имеют небольшие значения и занимают примерно треть допустимого диапазона (рис. 1).
Следовательно, реальные изображения характеризуются, в основном, небольшими значениями локальных контрастов. Гистограмма распределения значений локальных контрастов изображения, которое было обработано некоторым методом усиление контраста, будет иметь вид, представленный на рис. 2.
Анализируя гистограммы распределения значений локальных контрастов исходного и обработанного изображений, можно предположить, что гистограмма на рис. 2 получена вследствие нелинейного растяжения гистограммы на рис. 1.
Рис. 1. Типичная гистограмма распределения значений локальных контрастов исходного изображения.
Рис. 2. Гистограмма распределения значений локальных контрастов изображения, обработанного некоторым методом повышения контрастности.
Рассмотрим метод повышения контрастности изображений с использованием предложенного подхода. Основные этапы реализации данного метода будут аналогичны к вышеупомянутой трехэтапной схеме [2], за исключением этапа нелинейного преобразования локальных контрастов, который рассмотрим более детально.
Для нелинейного преобразования локального контраста используем следующее выражение:
![]() | (9) |
где - значение локального контраста элемента исходного изображения с координатами
,
- усиленное значение локального контраста элемента изображения с координатами
;
- максимально возможное значение локального контраста
;
,
- максимальное и минимальное значения локального контраста исходного изображения,
- оценка математического ожидания значений локального контраста (например, среднеарифметическое значение локальных контрастов элементов изображения),
,
- коэффициенты постоянного смещения;
- показатель степени
.
Проанализируем функцию преобразования локального контраста (9). Для этого рассмотрим графики двух функций - степенного преобразования и предложенной функции (9), которые представленные на рис. 3. Функция степенного преобразования локального контраста вычисляется за выражением типа , где
.
Рис. 3. Графики функций преобразования локального контраста (1 - степенная функция, 2 - за выражением (9)).
Из рис. 3 видно, что предложенная функция обеспечивает лучшее усиление для небольших значений локального контраста. Значения локальных контрастов для реальных изображений имеют как раз такой уровень. Тем не менее при практической реализации используют частный случай выражения (9). Он состоит в проведении преобразований лишь для таких локальных контрастов, которые удовлетворяют условию . В целом предложенный метод позволяет проводить эффективное усиление контрастности изображений.
![]() | ![]() |
а) | б) |
![]() | ![]() |
в) | г) |
Рис. Локально-адаптивный метод повышения визуального качества изображений с использованием энтропии: а) исходное изображение; б) изображение а, обработанное известным методом с использованием энтропии; в) изображение а, обработанное известным методом с использованием классического подхода к определению энтропии; г) изображение а, обработанное предложенным методом.
%Программа, реализующая метод контрастирования изображений с использованием%среднеквадратических отклонений значений яркостей элементов локальной окрестности.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'); Результаты работы программы представлены на рис. ![]() | ![]() | ![]() |
а) | б) | в) |
Рис. Локально-адаптивний метод улучшения визуального качества изображений с использованием среднеквадратических отклонений значений яркостей элементов локальной окрестности: а) исходное изображение; б) изображение а, обработанное известным методом; в) изображение а, обработанное предложенным методом.
%Программа, реализующая метод нелинейного (степенного) преобразования (растяжения)%локальных контрастов (глобальная реализация)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'); ![]() | ![]() |
а) исходное изображение | б) изображение а, обработанное методом Гордона |
![]() | ![]() |
в) метод нелинейного преобразования локальных контрастов (глобальный) | г) метод нелинейного преобразования локальных контрастов (скользящий) |
Рис. Обработка изображений методом нелинейного растяжения локальных контрастов.
Как было сказано выше этот метод может быть реализован в скользящем варианте, в котором преобразование локальных контрастов выполняется с учетом характеристик локальных окрестностей.
%Программа, реализующая метод нелинейного (степенного) преобразования (растяжения)%локальных контрастов (скользящая реализация)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');Литература.