Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦОИ заочники / практика / Пояснения к лабораторным.docx
Скачиваний:
56
Добавлен:
23.02.2015
Размер:
464.42 Кб
Скачать

Улучшение изображений

Контрастирование с гамма-коррекцией

Синтаксис:

Id=imadjust(Is, [low high], [boton top], gamma) newmap=imadjust(map, [low high], [boton top], gamma) newmap=(map, [IR hR; IG hG; IB hB], [bR tR; bG tG; bB tB], [gR gG gB]) RGBd=imadjust(RGBs, [low high], [botton top], gamma) RGBD=(RGBS, [IR hR; IG hG; IB hB], [bR tR; bG tG; bB tB], [gR gG gB])

Описание:

Функция Id=imadjust(Is, [low high], [bottom top], gamma)создает полутоновое изображение Id путем контрастирования исходного полутонового изображения Is. Значения яркости в диапазоне [low high] преобразуются в значения яркости в диапазоне [bottom top]. Значения яркости, меньшие low, принимают значение bottom, а значения яркости, большие high, принимают значение top. Значения top, bottom, low, high должны принадлежать диапазону [0,1]. Если в качестве второго ([low high]) или третьего ([bottom top]) параметров передать пустой вектор [], то по умолчанию будет использован вектор [0,1].

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

Характеристики передачи уровней для различных значений gamma приведены на рис. 1.

а)

б)

Функция RGBd=imadjust(RGBs, [low high], [botton top], gamma)создает полноцветное изображение RGBd путем контрастирования исходного полноцветного изображения RGBs. Преобразование осуществляется аналогично преобразованию полутонового изображения отдельно для каждой из R-, G-, B-составляющих. Диапазоны преобразования интенсивностей составляющих [low high] и [botton top], а также показатель gamma задаются одинаковыми для всех составляющих. Различные диапазоны преобразования интенсивностей и показатель gamma для R-, G-, B-составляющих можно задать с помощью функцииRGBD=(RGBS, [IR hR; IG hG; IB hB], [bR tR; bG tG; bB tB], [gR gG gB]).

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

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

Заполнение областей интереса

Синтаксис:

Id=roifill(Is) Id=roifill(Is, c, r) Id=roifill(Is, BW) Id=roifill(XData, YData, Is, xi, yi) [Id, BW]=roifill(…) [XData, YData, Id, BW, xi, yi]=roifill(…)

Описание:

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

Функция Id=roifill(Is)позволяет интерактивно задать область на исходном полутоновом изображении Is и создает новое полутоновое изображение Id, которое отличается от исходного изображения Is тем, что заданная область заполнена. Данная функция выводит изображение Is в окно и ожидает от пользователя задания области интереса, предназначенной для заполнения. Область интереса должна быть заключена в полигон (многоугольник), вершины которого задаются однократным нажатием левой клавиши мыши. Предыдущую заданную вершину можно удалить, если нажать на клавиши Backspace или Delete. Нажатие на правую клавишу мыши или двойной щелчок левой клавишей задает последнюю вершину полигона. Также завершить процесс задания вершин без указания последней можно нажатием на клавишу Enter. Для определения точек, лежащих внутри полигона, используется правило Non-Zero Winding. Если при вызове функции параметр Is опущен, то изображение берется из текущего окна.

Функция Id=roifill(Is, c, r)позволяет явно задать координаты вершин полигона, ограничивающего заполняемую область, в векторах r (номера строк) и c (номера столбцов) одинаковой длины.

Функция Id=roifill(XData, YData, Is, xi, yi)аналогична предыдущей, но в ней координаты полигона, передаваемые в векторах xi и yi, задаются в пространственной системе координат. Двухэлементные векторы XData и YData определяют диапазон изменения значений по осям пространственной системы координат.

Области, которые необходимо заполнить, могут быть заданы с помощью бинарного изображения BW. В этом случае используется функция Id=roifill(Is, BW). Изображения Is и BW имеют одинаковый размер. Пикселы изображения BW, относящиеся к областям, предназначенным для заполнения, должны быть равны 1.

Для рассмотренных функций можно дополнительно определить 4 выходных параметра: [XData, YData, Id, BW, xi, yi]=roifill(…). Тогда в параметрах xi и yi будут возвращены координаты вершин полигона, ограничивающего заполненную область, а в XData и YData будут возвращены диапазоны значений по осям пространственной системы координат, которая использовалась для изображения Is.

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

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

Пример.

Рассмотрим использование функции roifillдля устранения небольших дефектов полутонового изображения. На рис. 1а показано исходное изображение с искусственным белым прямоугольником, который симулирует некоторый дефект на изображении. Уберем этот небольшой дефект, расположенный в центре изображения. Для этого с помощью функцииroipolyинтерактивно создадим бинарное изображение, задающее область интереса, а затем воспользуемся функцией roifill.

% Пример демонстрирует устранение на изображении малых по площади дефектов. %Чтение исходного изображения и вывод его на экран. I=imread('shot1.tif'); Imshow(I); %Задание области интереса (интерактивно). BW=roipoly; %Заполнение области интереса. I=roifill(I,BW); %Вывод результата на экран. figure, imshow(I);

Поиск границ повышения контраста на изображении

Синтаксис:

LOW_HIGH=stretchlim(I, TOL)LOW_HIGH=stretchlim(RGB, TOL)

Описание:

Функция LOW_HIGH=stretchlim(I, TOL)возвращает пару значений яркостей, которые могут использоваться функцией imadjust для увеличения контраста изображения. Параметр TOL=[LOW_FRACT HIGH_FRACT] описывает часть изображения с точки зрения минимальной и максимальной яркости. Когда параметр TOL представлен скаляром, тогда значения TOL=LOW_FRACT и HIGH_FRACT=1 - LOW_FRACT применяют к похожим частям изображения. Когда аргумент упущен, тогда, по умолчанию, TOL равно [0.01 0.99]. Когда параметр TOL равен 0, тогда LOW_HIGH=[min(I(:)) max(I(:))]. ФункцияLOW_HIGH=stretchlim(RGB, TOL)возвращает матрицу интенсивностей с размерностью 2x3 для повышения контрастности каждой составляющей RGB-изображений. Параметр TOL описывает параметры преобразования для каждой составляющей.

Требования к исходным данным.

Исходное изображение должно быть представлено в формате uint8, uint16 или double. Результирующие интенсивности LOW_HIGH должны быть представлены в формате double и находится в диапазоне между 0 и 1. Пример. I=imread('pout.tif'); J=imadjust(I, stretchlim(I), []); imshow(I), figure, imshow(J)

Соседние файлы в папке практика