Построение графиков каркасных контуров и поверхностей
Методы построения трехмерных каркасных (сеточных) контуров и поверхностей могут быть полезными при визуализации передаточных функций двумерных изображений. Самый простой способ нарисовать сеточный график данной двумерной функции Н состоит в применении функции mesh, которая имеет базовый синтаксис:
.
Эта
функция рисует каркасный контур для
точек
и
,
где
.
Вид каркасного контура становится очень
плотным и неудобным для глаза, когда
числа М и N — велики. В этом случае
удобно строить только каждую k-ую
точку по каждой оси с помощью команды
.
Как правило, если использовать при построении каркасного контура от 40 до 60 точек по каждой оси, то результат будет вполне приемлемым компромиссом между разрешением и внешним видом изображения.
По умолчанию MATLAB строит сеточные графики в цвете. Команда
устанавливает черную сетку. MATLAB также накладывает оси и линии координатной сетки на сеточный график. Эти атрибуты отключаются командой
.
Снова включить их можно соответствующей командой, в которой off заменено на on. Наконец, точка обзора (местоположение наблюдателя) контролируется функцией view, которая имеет синтаксис
.
На
рисунке 13 показано, что az
и el представляют
собой, соответственно, азимут и угол
возвышения (измеренные в градусах).
Стрелками обозначены положительные
направления. Значения по умолчанию:
и
,
которые помещают наблюдателя в квадрант,
задаваемый полуосями —х и —у,
откуда он смотрит на квадрант,
определяемый положительными полуосями
х и у на рисунке 13.
Рисунок 13 – Геометрия функции view
Чтобы узнать текущее значение углов обзора, следует набрать
А чтобы присвоить этим параметрам значения по умолчанию, надо набрать
Точку обзора можно менять интерактивно, если нажать мышью на кнопку Rotate 3D в строке инструментов окна графиков, а затем действовать мышью в окне графика.
При построении общих графиков удобно использовать описанный выше метод, т.к. в нем используется всего два параметра и он является более наглядным.
Пример 5. Построение сеточных графиков.
Рассмотрим гауссов низкочастотный фильтр из примера 4.
H =fftshift(lpfilter('gaussian',500,500,50));
На рисунке 14 показан сеточный (каркасный) график, построенный командами
figure('Name','H'), mesh(H(1:10:500,1:10:500))
Рисунок 14 – График, построенный функцией mesh
Повышение резкости при частотной фильтрации
В противоположность низкочастотной фильтрации, которая приводит к размытию изображений, высокочастотная фильтрация повышает резкость изображения, ослабляя низкие частоты и оставляя высокие частоты преобразования Фурье относительно неизменными.
Основы высокочастотной фильтрации
Имея
передаточную функцию
низкочастотного фильтра, можно
получить передаточную функцию
соответствующего высокочастотного
фильтра с помощью формулы
.
Значит, функцию lpfilter можно использовать для построения генератора высокочастотных фильтров:
function H = hpfilter(type, M, N, D0, n)
if nargin == 4
n = 1;
end
Hlp = lpfilter(type, M, N, D0, n);
H = 1 - Hlp;
Пример 6. Высокочастотная фильтрация.
На рисунке 15а приведен тот же тестовый образец f, что и на рисунке 12а. Рисунок 15б получен с помощью следующих команд, результат которых демонстрирует применение высокочастотного гауссова фильтра к изображению f:
PQ=paddedsize(size(f));
D0=0.05*PQ(1);
H=hpfilter('gaussian',PQ(1), PQ(2),D0);
g=dftfilt(f, H);
figure, imshow ((f), [])
figure, imshow (g, [])
На рисунке 15б заметно повышение четкости границ и усиление других контуров. Вместе с тем, поскольку средняя яркость изображения задается величиной , а высокочастотная фильтрация гасит низкие частоты в окрестности начала отсчета, то отфильтрованное изображение потеряло большую часть фоновой тональности, имевшуюся на исходном изображении.
|
|
а |
б |
Рисунок 15 – а) Исходное изображение; б) Результат высокочастотной фильтрации Гаусса
Фильтрация с усилением высоких частот
Высокочастотные фильтры отбрасывают коэффициент dc, в итоге среднее становится равным нулю. Чтобы компенсировать этот недостаток, необходимо добавить некоторое смещение к высокочастотному фильтру. Если смещение комбинируется вместе с умножением фильтра на коэффициент усиления, больший 1, то такая процедура называется фильтрацией с усилением высоких частот. Поскольку этот коэффициент больше единицы, то в результате происходит увеличение высоких частот. Конечно, амплитуда низких частот при этом тоже увеличивается, однако этот эффект меньше влияет на низкие частоты, поскольку смещение мало по сравнению с коэффициентом усиления. Высокочастотное усиление имеет передаточную функцию
,
где а — это смещение, b
— коэффициент усиления, а
— передаточная функция фильтра высоких
частот.
Выравнивание гистограммы осуществляется с помощью функции histeq, которая имеет следующий синтаксис:
Id=histeq(Is, hgram)
[Id, T]=histeq(Is, hgram)
Id=histed(Is, n)
[Id, T]=histeq(Is, n)
newmap=histeq(X, map, hgram)
[newmap, T]=histeq(X, map, hgram)
newmap=histeq(X, map)
[newmap, T]=histeq(X, map)
Функция histeq улучшает контраст изображения с помощью преобразования значений пикселов исходного изображения таким образом, чтобы гистограмма яркостей пикселов результирующего изображения приблизительно соответствовала некоторой предопределенной гистограмме [1,2]. Данная функция предназначена для преобразования полутоновых изображений или палитровых изображений.
Функция histeq(Is, hgram) преобразует исходное полутоновое изображение Is таким образом, чтобы гистограмма яркостей пикселов результирующего полутонового изображения Id приблизительно соответствовала гистограмме, задаваемой вектором hgram. Количество элементов в hgram задает число столбцов гистограммы, а значение каждого элемента - относительную высоту каждого столбца. Значение элементов вектора hgram должно быть в диапазоне [0, 1]. Функция hgram автоматически масштабирует значения элементов hgram так, чтобы сумма значений элементов в гистограмме была равна количеству пикселов изображения, т.е. sum(hgram)=prod(size(Is)). Гистограмма результирующего изображения Id будет лучше соответствовать заданной гистограмме hgram в том случае, когда количество столбцов hgram (length(hgram)) много меньше количества градаций яркости исходного изображения Is.
Функция Id=histeq(Is, n) преобразует исходное полутоновое изображение Is таким образом, чтобы результирующее полутоновое изображение Id имело гистограмму яркостей пикселов, близкую к равномерной. Равномерная гистограмма hgram создается из n столбцов как hgram=ones(1, n)*prod(size(Is))/n. Чем меньше n по сравнению с количеством градаций яркости в изображении Is, тем более равномерной получается гистограмма яркостей пикселов результирующего изображения Id. По умолчанию значение n равно 64, и данный параметр можно не указывать при вызове функции. Формат результирующего изображения Id совпадает с форматом исходного Is.
Функция [Id, T]=histeq(Is, n) дополнительно возвращает вектор T, задающий характеристику передачи уровней яркости исходного изображения Is в уровни яркости результирующего изображения Id.
Функция newmap=histeq(X, map, hgram) преобразует палитру map, связанную с палитровым изображением Х, таким образом, чтобы гистограмма яркостей пикселов изображения Х с палитрой newmap приблизительно соответствовала гистограмме hgram. Для получения значений яркости из палитры map используется функция rgb2ntsc. Количество элементов вектора hgram должно быть равно размеру палитры map.
Функция newmap=histeq(X, map, hgram) преобразует палитру map, связанную с палитровым изображением Х, таким образом, чтобы гистограмма яркостей пикселов изображения Х с палитрой newmap была близка к равномерной.
Функция [newmap, T]=histeq(X, …) дополнительно возвращает вектор Т, задающий характеристику передачи уровней яркости из исходной палитры map в уровни яркости результирующей палитры newmap.
Существуют также другие, более сложные подходы к решению задачи улучшения изображений путем гистограммных преобразований. Они базируются не только на анализе гистограммы распределения яркостей элементов изображения в целом, но и ее отдельных компонент. Также существует ряд методов, основанных на анализе локальных гистограмм отдельных участков изображения. Существование большого количества методов гистограммных преобразований объясняется их относительной простотой и высокой эффективностью.
Характеристика передачи уровней яркости Т выбирается путем минимизации функции F(k)=|c1(T(k))-c0(k)|, где c0 - сумма всех пикселов полутонового изображения I с яркостью, меньше либо равной k; c1 - сумма значений заданной гистограммы hgram для всех дискретных уровней яркости, меньших либо равных k. При минимизации на функцию Т накладывают следующие ограничения: Т должна быть монотонной и c1(T(k)) не должно превышать c0(a) более, чем на половину количества точек с яркостью а.
Рассмотрим пример. Пример демонстрирует повышение контраста изображения с помощью выравнивания гистограммы.
Полутоновое изображение I читается из файла и выводится на экран (рисунок 16а). Строится гистограмма яркостей пикселов исходного изображения (рисунок 16б). Функция histeq выравнивает гистограмму изображения I. Результат преобразования и гистограмма яркостей его пикселов выводятся на экран (соответственно рисунок 16в и рисунок 16г).
%Чтение исходного изображения и вывод его на экран.
I=imread(‘image1.tif’);
imshow(I);
%Построение гистограммы исходного изображения.
figure, imhist(I);
%Выравнивание гистограммы.
I=histeq(I, 80);
%Вывод преобразованного изображения на экран.
Figure, imshow(I);
%Вывод гистограммы преобразованного изображения.
figure, imhist(I);
|
|
а |
б |
|
|
в |
г |
Рисунок 16 – Фильтрация с усилением высоких частот
Пример 7. Комбинированная фильтрация с усилением высоких частот и гистограммная эквализация.
На рисунке 17а представлен рентгеновский снимок грудной клетки f. Поскольку рентгеновские лучи хуже поддаются фокусировке, как это делается со световыми лучами при помощи линз, рентгеновские снимки, как правило, выглядят расплывчато. Цель этого примера заключается в повышении резкости данного изображения. В этом конкретном примере яркость изображения сдвинута в темную область градационной шкалы, поэтому мы воспользуемся этим обстоятельством для демонстрации пространственной обработки, которая удачно дополняет фильтрацию в частотной области.
|
|
а |
б |
|
|
в |
г |
Рисунок 17 – Фильтрация с усилением высоких частот
На
рисунке 17б изображен результат фильтрации
рисунка 17а с использованием
высокочастотного фильтра Баттерворта
порядка 2 с частотой срезания
,
равной 5% от вертикального размера
расширенного изображения. Высокочастотная
фильтрация не очень сильно зависит от
параметра
,
поскольку радиус фильтра не так мал,
чтобы пропускать частоты, расположенные
возле начала отсчета. Как и ожидалось,
результат фильтрации не очень выразителен,
однако на нем слабо различимы основные
контуры изображения. Рисунок 17в
демонстрирует преимущество фильтрации
с усилением высоких частот (в данном
случае,
и
),
при котором сохранен общий яркостной
тон исходного изображения. Следующая
последовательность команд была
использована при построении изображений
на рисунке 17, где f обозначает
входное изображение.
PQ=paddedsize(size(f));
D0=0.05*PQ(1);
HBW=hpfilter('btw',PQ(1), PQ(2),D0,2);
H=0.5+2*HBW;
gbw=dftfilt(f, HBW);
ghf=dftfilt(f, H);
ghe=histeq(ghf,256)
figure, imshow ((f), [])
figure, imshow (gbw, [ ])
figure, imshow (ghf, [ ])
figure, imshow (ghe, [ ])
Изображение, характеризующееся узким диапазоном яркости, является идеальным кандидатом для гистограммной эквализации. Из рисунка 16г видно, что этот метод действительно продолжает улучшать изображение. Обратите внимание на четкое выявление структур костей и других деталей, которых даже не видно на трех предыдущих изображениях. В последнем изображении можно обнаружить некоторое усиление шумов, но это явление весьма характерно для рентгеновских снимков при растяжении диапазона их яркости. Результат, полученный при совместном использовании фильтрации с усилением высоких частот и метода гистограммной эквализации, превосходит любой результат, который можно было бы получить, применяя каждый из этих методов по отдельности.
