• Регистрация
Редактор-сообщества-Экспонента
Редактор-сообщества-Экспонента+26.70
редактор
  • Написать
  • Подписаться

Список функций Image Processing Toolbox

Изображения и видео 
24.10.2019

В статье приведено описание основных функций Image Processing Toolbox

Оглавление

Форматы представления данных

  • xyz2uint16 - Преобразование цветовых данных из формата XYZ в uint16

  • xyz2double - преобразование данных в XYZ-значения в формате double

  • double - представление элементов массива в формате double

  • uint8 - представление элементов массива в формате uint8

  • im2double - представление изображения массивом в формате double

  • im2uint8 - представление изображения массивом в формате uint8

  • im2uint16 - представление изображения массивом в формате uint16

  • im2mis - представление изображений в Java MemoryImageSource 

  • im2java2d - преобразование изображения в буферизованное изображение Java

  • im2java - преобразование данных в Java-изображение

  • lab2uint8 - преобразование данных из формата L*a*b* в uint8

  • lab2uint16 - преобразование данныхL*a*b* в формат uint16

  • lab2double - преобразование данных L*a*b* в формат double

  • iptnum2ordinal - преобразование положительных целых чисел в строку

Определение типа изображения

  • isbw - проверить, является ли изображение бинарным

  • isgray - проверить, является ли изображение полутоновым

  • isind - проверить, является ли изображение палитровым

  • isrgb - проверить, является ли изображение полноцветным

Работа с графическими форматами файлов

  • imfinfo - чтение из файла информации об изображении

  • imread - чтение изображения из файла

  • imwrite - запись изображения в файл

  • imageinfo - Создание информационных данных о изображении

  • imagemodel - Доступ к свойствам изображений с точки зрения их отображения

Установка и чтение глобальных переменных IPT

  • iptsetpref - установка глобальных переменных IPT

  • iptgetpref - чтение глобальных переменных IPT

  • getline - выбор ломаной линии с помощью мышки

  • getpts - выбор точек с помощью мышки

  • getrect - выбор прямоугольника с помощью мышки

  • ipticondir - возвращает название директории, содержащей IPT и MATLAB иконки

  • iptgetapi - доступ к прикладному программному интерфейсу

Вывод изображений на экран и захват их с экрана

  • imshow - вывод изображения на экран

  • truesize - установка размеров окна для отображения изображений

  • subimage - вывод нескольких изображений в одном окне

  • colorbar - вывод на экран палитры

  • imcontour - построение для изображения линий уровня

  • immovie - создание видеопоследовательности

  • montage - вывод на экран всех кадров многокадрового изображения

  • warp - наложение изображения на поверхность

  • zoom - масштабирование изображения в окне изображения

  • getimage - получение изображения из графического объекта

  • dicominfo - чтение метаданных из DICOM-файла

  • dicomread - чтение DICOM изображений

  • dicomwrite - запись изображений в DICOM-файл

  • dicomuid - Генерация идентификатора для DICOM-файлов 

  • imview - Отображение изображений в Image Viewer 

  • imgcf - получение последних отображаемых изображений

  • imgca - получение недавно обрабатываемых данных

  • imgetfile - отображение диалогового окна открытия изображений

  • imhandles - установка ручного управления изображениями

  • dicomanon - анонимность DICOM-файла

  • dicomdict - получение или установка активного словаря DICOM-данных

  • impositionrect - создание передвигаемого прямоугольника

  • imscrollpanel - панель прокрутки для интерактивного управления изображениями

  • analyze75info - считывание метаданных из установленного заголовка файла данных Analyze 7.5

  • analyze75read - считывание данных изображения из Analyze 7.5

Преобразования типов изображений

  • im2bw - бинаризация отсечением по порогу яркости

  • mat2gray - преобразование матрицы чисел в полутоновое изображение

  • rgb2gray - преобразование полноцветного изображения в полутоновое

  • ind2gray - преобразование палитрового изображения в полутоновое

  • gray2ind - преобразование полутонового изображения в палитровое

  • grayslice - преобразование полутонового изображения в палитровое отсечением по нескольким порогам

  • ind2rgb -преобразование палитрового изображения в полноценное

  • dither - диффузионное псевдосмешение цветов

  • rgb2ind - преобразование полноцветного изображения в палитровое

  • imapprox - уменьшение количества цветов палитрового изображения

  • cmunique - поиск палитры минимального размера

  • cmpermute - изменение порядка цветов в палитре

  • label2rgb - преобразование матрицы меток в RGB-изображение

Конвертирование цветовых систем

  • rgb2hsv - конвертирование из RGB в HSV

  • hsv2rgb - конвертирование из HSV в RGB

  • rgb2ntsc - конвертирование из RGB в YIQ

  • ntscc2rgb - конвертирование из YIQ в RGB

  • rgb2ycbcr - конвертирование из RGB в YCbCr

  • ycbcr2rgb - конвертирование из YCbCr в RGB

  • rgbplot - изображение компонентов RGB палитры (MATLAB Toolbox) 

  • graythresh - вычисление глобального порога изображения с использованием метода Отса

  • iccread - считывание описания ICC

Геометрические преобразования изображений

  • imcrop - кадрирование изображений

  • imresize - изменение размеров изображения

  • imrotate - поворот изображения

  • checkerboard - создание шахматно-образных изображений

  • findbounds - определение границ при пространственных преобразованиях

  • imtransform - применение пространственных преобразований изображений

  • makeresampler - создание повторяющейся структуры

  • maketform - создание структуры пространственных преобразований (TFORM) 

  • tformarray - применение пространственных преобразований для многомерных массивов

  • tformfwd - применение прямых пространственных преобразований

  • para2fan - вычисление веерно-лучевых проекций на основании параллельно-лучевых томографических данных

  • tforminv - применение обратных пространственных преобразований

  • fan2para - вычисление параллельно-лучевых проекций данных томографии с расходящимся пучком 

  • fanbeam - вычисление веерно-лучевых преобразований

  • fliptform - перестановка исходных и результирующих данных в структуре TFORM

  • ifanbeam - вычисление инверсного веерно-лучевого преобразования

  • applycform - применение преобразования цветовых пространств

  • makecform - создание структуры преобразования цветовых значений

  • whitepoint - описание полноцветной белой точки в цветовом пространстве

  • immagbox - локальное увеличение с использованием панели прокрутки

Анализ изображений

  • imhist - построение гистограммы

  • improfile - построение профиля

  • impixel - определение значения пиксела

  • pixval - управление режимом отображения значений пикселов

  • mean2 - вычисление среднего значения элементов матрицы

  • std2 - вычисление среднеквадратического отклонения элементов матрицы

  • corr2 - вычисление коэффициентов корреляции между двумя матрицами

  • xcorr2 - вычисление двумерной взаимной корреляционной функции

  • imabsdiff - определение отличительных признаков двух изображений

  • imadd - суммирование двух изображений или суммирование изображения и константы

  • imcomplement - дополнение изображений

  • imdivide - разделение двух изображений или разделения изображения на константу

  • imlincomb - вычисление линейной комбинации двух изображений

  • immultiply - умножение двух изображений или умножение изображения на константу

  • imsubtract - вычитание двух изображений или вычитание константы из изображения

  • regionprops - определение свойств области изображения

  • cpstruct2pairs - конвертирование cpstruct в наиболее важные контрольные точки

  • cp2tform - вывод пространственных преобразований между парой контрольных точек

  • cpcorr - определение согласованных контрольных точек с использованием кросс-корреляции

  • cpselect - инструмент выбора контрольных точек

  • normxcorr2 - нормализация двумерной кросс-корреляции

  • deconvblind - улучшение изображений с использованием обратной свертки

  • deconvlucy - улучшение изображений с использованием метода Лаки-Ричардсона

  • deconvreg - улучшение изображений с использованием регуляризационной фильтрации

  • deconvwnr - улучшение изображений с использованием фильтра Винера

  • ippl - проверка наличия библиотеки функций (Intel Performance Primitives Library (IPPL))

  • getrangefromclass - получение динамического диапазона изображений на основе их формата

  • graycomatrix - полутоновая матрица смежности для изображений

  • graycoprops - свойства полутоновых матриц смежности

  • hough - преобразование Хо

  • houghlines - получение линий сегментации на основе преобразований Хо

  • houghpeaks - локализация пиков при преобразованиях Хо

  • imdisplayrange - отображение динамического диапазона яркостей изображения

  • entropy - энтропия интенсивности элементов изображения

  • entropyfilt - локальная энтропия интенсивностей элементов изображения

  • impixelinfoval - средства получения информации о пикселе без текстовых меток

  • getimagemodel - восстановление моделей объектов изображения на основе объектов изображения

  • impixelregion - средства просмотра локального массива пикселей

  • impixelregionpanel - панель инструментария отображения локального массива пикселей изображения

  • impixelinfo - средства получения информации о пикселях

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

  • histeq - выравнивание гистограммы

  • imadjust - контрастирование с гамма–коррекцией

  • brighten - управление яркостью палитры

  • imnoise - добавление шума

  • roifill - заполнение областей интереса

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

  • edgetaper - виделение краев с использованием функции протяженности точек

  • otf2psf - преобразование оптической функции в функцию протяженности точек 

  • psf2otf - преобразование функции протяженности точек в оптическую функцию

  • adapthisteq - Выполнение контрастно ограниченной адаптивной эквализации гистограммы 

  • decorrstretch - Применение декорреляционного растяжения многоканальных изображений 

  • axes2pix - интерактивный методы регулирования контраста и яркости

  • imcontrast - средства усиления контраста изображения

Фильтрация изображений

  • conv2 - свертка изображений

  • convn - свертка N–мерных сигналов

  • convmtx2 - вычисление матрицы свертки

  • filter2 - двумерная линейная фильтрация

  • freqz2 - двумерная АЧХ

  • fspecial - задание маски предопределенного фильтра

  • fsamp2 - формирование маски линейного фильтра по желаемой АЧХ

  • ftrans2 - формирование маски линейного фильтра методом преобразования частот

  • fwind1 - формирование маски линейного фильтра по желаемой АЧХ с использованием одномерного окна

  • fwind2 - формирование маски линейного фильтра по желаемой АЧХ с использованием двумерного окна

  • blkproc - обработка блоков изображения

  • bestblk - определение размера блока

  • nlfilter - обобщенный нелинейный фильтр

  • colfilt - оптимизированная операция фильтрации

  • im2col - преобразование фрагментов изображения в столбцы

  • col2im - преобразование вспомагательного изображения

  • ordfilt2 - ранговая фильтрация

  • medfilt2 - медианная фильтрация

  • wiener2 - адаптивная винеровская фильтрация

  • roifilt2 - фильтрация областей интереса

  • imfilter - фильтрация двумерных и многомерных изображений

  • freqspace - определение отзыва в двумерной частотной области (MATLAB Toolbox) 

Сегментация изображений

  • poly2mask - преобразование некоторой области в маску

  • qtdecomp - сегментация методом разделения

  • qtgetblk - получение блоков из квадро–дерева результатов сегментации

  • qtsetblk - замена блоков–результатов сегментации

  • edge - выделение границ

  • roipoly - задание области интереса с помощью полигона

  • roicolor - бинаризация по заданым цветам

  • watershed - Алгоритм маркерного водораздела

Морфологические операции над бинарным изображением

  • uintlut - вычисление новых значений массива на основе табличных преобразований

  • applylut - преобразование бинарного изображения с помощью таблицы перекодировки

  • bwboundaries - отслеживание локальных границ на бинарном изображении

  • bwmorph - морфологические операции над бинарным изображением

  • bwareaopen - открытие бинарных площадей (малых объектов)

  • bwdist - определение периода преобразования бинарных объектов

  • bwfill - заполнение областей фона

  • bwhitmiss - бинарные hit-miss операции

  • bwlabeln - установка метки связанных элементов в многомерных бинарных изображениях

  • bwpack - упаковка бинарных изображений

  • bwperim - выделение границ бинарных объектов

  • bwselect - выделение объектов

  • bwtraceboundary - oтслеживание контуров бинарных изображений

  • bwulterode - предельная эрозия

  • bwunpack - распаковка бинарных изображений

  • conndef - отсутствие связности

  • dilate - наращение бинарного объекта

  • erode - эрозия бинарного объекта

  • imbothat - выполнение низкочастотной фильтрации

  • imclearborder - подавление световой структуры связанной с краями изображения

  • imclose - закрыть изображение

  • imdilate - расширение изображения

  • imerode - эрозия изображения

  • imextendedmax - максимальная длительность преобразований

  • imextendedmin - минимальная длительность преобразований

  • imfill - заполнение областей изображения

  • imhmax - H-максимальные преобразования

  • imhmin - H-минимальные преобразования

  • imimposemin - установка минимума

  • imopen - открыть изображение

  • imreconstruct - морфологическое восстановление изображений

  • imregionalmax - максимум области

  • imregionalmin - минимум области

  • imtophat - выполнение высокочастотной фильтрации

  • makelut - формирование таблицы перекодировки

Поиск объектов и вычисление их признаков

  • bwlabel - поиск объектов

  • bwarea - вычисление площади объектов

  • bweuler - вычисление числа Эйлера

  • imfeature - вычисление признаков объектов

  • imattributes - получение информации об атрибутах изображения

Преобразования Фурье

  • fft2 - двумерное БПФ

  • fftn - n–мерное БПФ

  • ifft2 - обратное двумерное БПФ

  • ifftn - n–мерное обратное БПФ

  • fftshift - перегрупировка выходного массива преобразования Фурье

Дискретное косинусное преобразование

  • dct2 - двумерное ДКП

  • idct2 - обратное двумерное ДКП

  • dctmtx - вычисление матрицы коэффициентов ДКП

Преобразование Радона

  • radon - прямое преобразование Радона

  • iradon - обратное преобразование Радона

  • phantom - создание модельного изображения головы

Создание и обработка структурных элементов

  • getheight - создание вертикальных структурных элементов

  • getneighbors - определение местоположения соседних структурных элементов

  • getnhood - создание соседних структурных элементов

  • getsequence - создание последовательности разложенных структурных элементов

  • isflat - возвращение одинаковых структурных элементов

  • reflect - представление структурных элементов через их центр

  • strel - создание морфологических структурных элементов

  • translate - преобразование структурных элементов

Операции с массивами

Демонстрация

  • dctdemo - демонстрация сжатия изображений на основе двумерных дискретных косинусных преобразований

  • edgedemo - демонстрация выделения границ объектов изображения

  • firdemo - демонстрация двумерной фильтрации изображений и проектирования фильтров

  • imadjdemo - демонстрация корректировки яркостей и эквализации гистограммы изображений

  • landsatdemo - демонстрация сложноцветных изображений

  • nrfiltdemo - демонстрация фильтрации шумовой составляющей

  • qtdemo - демонстрация разложения квадродеревьев

  • roidemo - демонстрация обработки областей интереса

     

     

     

    Наверх

    xyz2uint16 - Преобразование цветовых данных из формата XYZ в uint16

    Синтаксис:

    xyz16=xyz2uint16(xyz)

    Описание:

    Функция xyz16=xyz2uint16(xyz) выполняет преобразование массива значения цветов XYZ с размерностью Mx3 или MxNx3 в формат uint16. Обработанный массив xyz16 имеет тот же размер, что и xyz.

     

    Описанные преобразования в пакете обработки изображений (Image Processing Toolbox) соответствуют установленным требованиям Международной комиссии по освещению о представлении массива в формате удвоенной точности. Элементы массива XYZ , согласно этим требованиям (ICC.1:2001-4, www.color.org), представляются 16-битовыми числами без знака. 8-битовое представление элементов массива не является стандартным. Преобразования, которые выполняются согласно этим требованиям, представлены в таблице.

    Значения (X, Y и Z) uint16 значения
    0.0 0
    1.0 32768
    1.0 + (32767/32768) 65535

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

    Данные xyz представляются неразреженным массивом вещественных чисел в формате uint16 или double. Массив xyz16 представляется в формате uint8.

     

     

    Наверх

    xyz2double - преобразование данных в XYZ-значения в формате double

    Синтаксис:

    xyzd=xyz2double(XYZ)

    Описание:

    Функция xyxd=xyz2double(XYZ) преобразует массив с размерностью Mx3 или MxNx3 в  XYZ-значения цвета в формате double. Размерность xyzd аналогична размерности  XYZ.

     

    Описанные преобразования в пакете Image Processing Toolbox выполняются в режиме удвоенной точности, согласно требованиям Международной комиссии по освещению от 1931 года. Массив XYZ , который представлен в формате uint16, согласно данным требованиям представляется 16-битными целыми числами без знака. Кодирование согласно этим требованиям представлено в таблице.

    Значение (X, Y или Z) uint16 значение
    0.0 0
    1.0 32768
    1.0 + (32767/32768) 65535

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

    Данные xyz представляются неразреженным массивом вещественных чисел в формате uint16 или double. Массив xyzd представляется в формате double.

     

     

    Наверх

    double - представление элементов массива в формате double

    Синтаксис:

    B=double(A)

    Описание:

    Функция double используется для преобразования элементов массива А в действительные числа удвоенной точности и помещает их в новый массив В. Если А является массивом чисел в формате double, то осуществляется копирование из массива А в В. Данная функция используется для преобразования данных матрицы изображения из формата uint8 в формат double.

     

     

    Наверх

    uint8 - представление элементов массива в формате uint8

    Синтаксис:

    B=uint8(A)

    Описание:

    Функция uint8 используется для преобразования элементов массива А в целые неотрицательные числа в диапазоне [0, 255] и помещает их в новый массив В. Если А является массивом чисел в формате uint8, то осуществляется копирование из массива А в В. Данная функция используется для преобразования данных матрицы изображения из формата double в формат uint8.

    При выполнении преобразования дробная часть отбрасывается. По этой причине рекомендуется предварительно округлять значения элементов массива до ближайшего целого с помощью функции  round, например: B=uint8(round(A)). Для элементов массива А вне диапазона [0, 255] значения в массиве В не определены и могут быть различными для различных вычислительных платформ.

    На платформе Intel при преобразовании из double в uint8 сначала действительное число преобразуется в целое число, а затем берется младший байт целочисленного представления числа в памяти ПК. Таким образом значение 256 из массива А будет преобразовано в 0, так как младший байт целочисленного представления числа 256 равен 0. Отрицательные целые числа хранятся в памяти ПК в дополнительном коде. Значение -1 из массива А будет преобразовано в 255, так как младший байт представления в дополнительном коде числа -1 равен 255.

    Система MATLAB не осуществляет никакого контроля соответствия диапазонов, и обязанность следить за правильностью преобразований полностью возлагается на пользователя.

    Пример.

    % examp1.m

    % Пример демонстрирует использование функции uint8.

    x=[-10.3 -1.9 0.0 10.15 10.8 255.2 300.3 600.9];

    y=uint8(x);

    % Будет выведено:

    % y=246 255 0 10 100 255 44 88

    z=uint8(round(x))

    % Будет выведено:

    % z=246 254 0 10 101 255 44 89

     

     

    Наверх

    im2double - представление изображения массивом в формате double

    Синтаксис:

    B=im2double(A)

    YВ=im2double(XS, ‘indexed’)

    Описание:

    Функция im2double позволяет представить все пикселы матрицы изображения в виде действительных чисел двойной точности. При реализации этой функции, в отличии от функции  double, осуществляется приведение значений пикселов к требуемому диапазону. Для бинарных, полутоновых и полноцветных изображений это диапазон [0,1], а для палитровых изображений – [1, N], где N – количество цветов в палитре.

    Функция B=im2double(A) преобразует бинарное, полутоновое или полноцветное изображение А в формат double и помещает результат в новую матрицу В. Преобразования осуществляются в соответствии со следующими соотношениями:

    Бинарное B=im2double(A)
    Полутоновое B=im2double(A)/255
    Полноцветное B=im2double(A)/255

    Функция YВ=im2double(XS, ‘indexed’) преобразует в формат double палитровое изображение XS и помещает результат в новую матрицу YВ. Преобразование описывается соотношением:

    YВ=double(XS)+1

     

     

    Наверх

    im2uint8 - представление изображения массивом в формате uint8

    Синтаксис:

    B=im2uint8(A)

    YВ=im2uint8(XS, ‘indexed’)

    Описание:

    Функция im2double позволяет представить все пикселы матрицы изображения в виде целых неотрицательных чисел в диапазоне [0, 255]. При конвертировании, в отличие от функции uint8, осуществляется приведение значений пикселов к требуемому диапазону.

    Функция B=im2uint8(A) преобразует в формат uint8 бинарное, полутоновое или полноцветное изображение А и помещает результат в новую матрицу В. Преобразования осуществляются в соответствии со следующими соотношениями:

    Бинарное B=logical(uint8(A))
    Полутоновое B=uint8(round(A*255))
    Полноцветное B=uint8(round(A*255))

    Функция YВ=im2uint8(XS, ‘indexed’) преобразует в формат uint8 палитровое изображение XS  и помещает результат в новую матрицу YВ. Преобразование описывается соотношением:

    YВ=double(XS)+1

     

     

    Наверх

    im2uint16 - представление изображения массивом в формате uint16

    Синтаксис:

    I2=im2uint16(I1) RGB2=im2uint16(RGB1)

    I=im2uint16(BW)

    X2=im2uint16(X1, 'indexed')

    Описание : 

    Функция im2uint16 использует изображение в качестве исходных данных и возвращает его вформате представления данных uint16. Если исходное изображение былопредставлено в формате uint16, тогда результирующее изображение будет емуидентично. Если исходное изображение было представлено в формате double илиuint8, тогда функция im2uint16 возвращает эквивалентное изображение в форматеuint16, проведя нужные яркостные преобразования (масштабирование).

    Функция I2=im2uint16(I1) преобразует полутоновое изображение I1 в формат uint16,проведя соответствующие яркостные масштабирующие преобразования данных.

    Функция RGB2=im2uint16(RGB1) преобразует цветное изображение RGB1 в формат uint16,проведя соответствующие яркостные масштабирующие преобразования данных.

    Функция I=im2uint16(BW) преобразует бинарное изображение BW в яркостное (полутоновое)изображение в формате uint16.

    Функция X2=im2uint16(X1, 'indexed') преобразует индексное изображение X1 в форматuint16, проведя соответствующие преобразования данных. Отметим, что подобныепреобразования реально касаются только тех изображений, для которых они возможны.Например, если изображение X1 представлено в формате double, тогда значенияинтенсивностей его элементов max(X1(:)) могут достигать 65536.

     

     

    Наверх

    im2java2d - преобразование изображения в буферизованное изображение Java

    Синтаксис:

    jimage=im2java2d(I)jimage=im2java2d(X, MAP)

    Описание:

     

    Функция jimage=im2java2d(I) проводит преобразование изображения в отдельный класс Java-изображений java.awt.image.BufferedImage. Изображение I должно быть яркостным (полутоновым), RGB или бинарным изображением.

    Функция jimage=im2java2d(X, MAP) также преобразует индексное изображение X с палитрой MAP в отдельный класс Java-изображений java.awt.image.BufferedImage.

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

    Исходное яркостное (полутоновое), индексное или RGB изображение должно быть представлено в формате uint8, uint16 или double. Если исходное изображение бинарное, то оно должно быть представлено в формате logical.

    Пример.В этом примере считаем изображение в рабочее пространство MATLAB и с помощью функции im2java2d преобразуем его в Java-формат java.awt.image.BufferedImage.I=imread('moon.tif');javaImage=im2java2d(I);frame=javax.swing.JFrame;icon=javax.swing.ImageIcon(javaImage);label=javax.swing.JLabel(icon);frame.getContentPane.add(label);frame.packframe.show

     

     

    Наверх

    im2java - преобразование данных в Java-изображение

    Синтаксис:

    jimage=im2java(I)jimage=im2java(X, MAP)jimage=im2java(RGB)

    Описание:

     

    При работе с изображениями в среде MATLAB возникает необходимость в их конвертации в класс Java, т.е. java.awt.Image.

    Функция jimage=im2java(I) преобразует яркостное изображение в данные в формате java.awt.Image.

     

    Функция jimage=im2java(X, MAP) преобразует индексное изображение X с палитрой MAP в формат java.awt.Image.

    Функция jimage=im2java(RGB) преобразует RGB-изображение в формат Java.

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

    Исходное изображение может быть представлено в формате uint8, uint16 или double.

    Примечание.

    Для создания изображений в формате java.awt.Image необходимо, чтобы данные были представлены в формате uint8. Если исходные данные представлены в формате uint8, то после обработки функцией jimage получим те же данные в том же формате uint8. Если же исходные изображения были представлены в формате uint16, то функция im2javaпреобразует их в эквивалентное изображение в формате uint8 с дальнейшим преобразованием в формат java.awt.Image.

    Пример.В этом примере считаем изображение из файла в рабочее пространство MATLAB и далее, применяя функцию im2java, преобразуем его в Java-изображение.I=imread('your_image.tif');javaImage=im2java(I);frame=javax.swing.JFrame;icon=javax.swing.ImageIcon(javaImage);label=javax.swing.JLabel(icon);frame.getContentPane.add(label);frame.packframe.show

     

     

    Наверх

    lab2uint8 - преобразование данных из формата L*a*b* в uint8

    Синтаксис:

    lab8=lab2uint8(lab)

    Описание:

     

    Функция lab8=lab2uint8(lab) выполняет преобразование массива цветовых значений размерностью Mx3 или MxNx3 из формата L*a*b* в формат uint8. Размерность данных lab8 совпадает с размерностью исходных данных lab.

    Форматы представления данных массивов удвоенной точности L*a*b* , которые используются в пакете Image Processing Toolbox, соответствуют общепринятым требованиям. Массив L*a*b* , который представлен в формате uint8 или uint16, соответствует требованиям ICC (ICC.1:2001-4, www.color.org). Некоторые особенности ICC-кодирования приведены в таблицах.

    Значение (L*) Значение uint8 Значение uint16
    0.0 0 0
    100.0 255 65280
    100.0 + (25500/65280) None 65535

     

    Значение (a* или b*) Значение uint8 Значение uint16
    -128.0 0 0
    0.0 128 32768
    127.0 255 65280
    127.0 + (255/256) - 65535

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

    Исходные данные lab должны быть представлены не разреженным массивом вещественных чисел в формате uint8, uint16 или double. Результирующие данные представляются в формате uint8.

     

     

    Наверх

    lab2uint16 - преобразование данныхL*a*b* в формат uint16

    Синтаксис:

    lab16=lab2uint16(lab)

    Описание:

    Функция lab16=lab2uint16(lab) реализует преобразование некоторого массива с размерностью Mx3 или MxNx3 в значения цвета L*a*b* , представленные в формате uint16. Массив lab16 имеет тот же формат, что и lab.

     

    Аналогично как и в функции lab2double, а также в других функциях, преобразования в пакете Image Processing Toolbox реализованы согласно требованиям Международной комиссии по освещению от 1976 года, т.е. значения L*a*b* -массива представлены в формате удвоенной точности. Массивы L*a*b* , которые представлены в формате uint8 или uint16, преобразуются к виду ICC, описанному в ICC.1:2001-4 (www.color.org), для представления в формате целых чисел без знака. Примеры ICC-кодирования представлены в таблицах.

    Значение (L*) uint8 значение uint16 значение
    0.0 0 0
    100.0 255 65280
    100.0+(25500/65280) None 65535

     

    Значение (a* or b*) uint8 значение uint16 значение
    -128.0 0 0
    0.0 128 32768
    127.0 255 65280
    127.0+(255/256) None 65535

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

    Данные lab должны быть представлены неразреженным массивом вещественных чисел в формате uint8, uint16 или double. Массив lab16 имеет формат представления данных uint16.

     

     

    Наверх

    lab2double - преобразование данных L*a*b* в формат double

    Синтаксис:

    labd=lab2double(lab)

    Описание:

    Функция labd=lab2double(lab) реализует преобразование некоторого массива с размерностью Mx3 или MxNx3 в значения цвета L*a*b* , представленные в формате double. Результирующий массив имеет ту же размерность что и lab.

     

    Преобразования в пакете Image Processing Toolbox реализованы согласно требованиям Международной комиссии по освещению от 1976 года, т.е. значения L*a*b* -массива представлены в формате удвоенной точности. Массивы L*a*b* , которые представлены в формате uint8 или uint16, преобразуются к виду ICC, описанному в ICC.1:2001-4 (www.color.org), для представления в формате целых чисел без знака. Примеры ICC-кодирования представлены в таблицах.

    Значение (L*) uint8 значение uint16 значение
    0.0 0 0
    100.0 255 65280
    100.0+(25500/65280) None 65535

     

    Значение (a* or b*) uint8 значение uint16 значение
    -128.0 0 0
    0.0 128 32768
    127.0 255 65280
    127.0+(255/256) None 65535

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

    Данные lab должны быть представлены неразреженным массивом вещественных чисел в формате uint8, uint16 или double. Массив labd представляется в формате double.

     

     

    Наверх

    iptnum2ordinal - преобразование положительных целых чисел в строку

    Синтаксис:

    string = iptnum2ordinal(number)

    Описание:

    Функция string = iptnum2ordinal(number) преобразовывает положительные целые числа в текстовую строку string.

    Пример:

    В следующем примере показано пример возвращения строки "четыре".

    str = iptnum2ordinal(4)

     

    Аналогичный пример.

    str = iptnum2ordinal(23)

     

     

    Наверх

    isbw - проверить, является ли изображение бинарным

    Синтаксис:

    flag=isbw(S)

    Описание:

    Функция isbw возвращает 1, если S является бинарным изображением, и 0 - в противном случае. Считается, что массив представляет собой бинарное изображение, если он удовлетворяет следующим условиям:

    - является двумерным;

    - имеет формат представления данных double, при этом все его элементы имеют значение либо 0, либо 1, или имеет формат представления данных uint8;

    - для этого массива установлен логический флаг, который является некоторым атрибутом массивов MATLAB и может быть установлен функцией logical.

     

     

    Наверх

    isgray - проверить, является ли изображение полутоновым

    Синтаксис:

    flag=isgray(S)

    Описание:

    Функция isgray возвращает 1, если S является полутоновым изображением, и 0 - в противном случае. Считается, что массив представляет собой полутоновое изображение, если он удовлетворяет следующим условиям:

    - является двумерным;

    - имеет формат представления данных double, при этом все его элементы имеют значение из диапазона [0, 1], или имеет формат представления данных uint8 вне зависимости от значения логического флага.

     

     

    Наверх

    isind - проверить, является ли изображение палитровым

    Синтаксис:

    flag=isind(S)

    Описание:

    Функция isind возвращает 1, если S является палитровым изображением, и 0 - в противном случае. Считается, что массив представляет собой палитровое изображение, если он удовлетворяет следующим условиям:

    - является двумерным;

    - имеет формат представления данных double, при этом все его элементы являются целыми числами, большими 0, или имеет формат представления данных uint8 и логический флаг сброшен.

    Пример.

    Легко заметить, что существует некоторая неоднозначность при определении типа изображения с помощью функций isbw, isgray, isind. Один и тот же массив может одновременно считаться бинарным и полутоновым или палитровым и полутоновым изображением. Подобный подход не противоречит здравому смыслу. Например, бинарное изображение может рассматриваться как частный случай полутонового. Однако в ряде случаев необходимо учитывать особенности работы функций isbw, isgray, isind.

    Рассмотрим работу функций isbw, isgray, isind для различных вариантов массива, состоящего только из нулей и единиц. Заметим, что для массивов, состоящих не только из нулей и единиц, результат будет иным.

    % example.m

    % Пример демонстрирует работу функций isbw, isgray, isind.

    Im=[1 0 1 0 1];

    % Массив в формате double, логический флаг сброшен.

    isbw(Im);

    ans

    %Будет выведено:

    %=0;

    isgray(Im);

    ans

    %=1

    isind(Im);

    ans

    %=0;

    Im=logical(Im);

    % Массив в формате double, логический флаг установлен.

    isbw(Im);

    ans

    %= 1

    isgray( Im);

    ans

    %=1

    isind( Im);

    ans

    % =0

    lm=[1 0 1 0 1];

    Im = uint8( Im );

    % Массив в формате uint8, логический флаг сброшен.

    isbw(Im);

    ans

    %=0

    isgray( Im);

    ans

    %=1

    isind( Im);

    ans

    %=1

    Im = logical(Im);

    % Массив в формате uint8, логический флаг установлен.

    isbw( Im);

    ans

    %=1

    isgray(Im);

    ans

    %=1

    isind(Im);

    ans

    %=0

     

     

    Наверх

    isrgb - проверить, является ли изображение полноцветным

    Синтаксис:

    Flag=isrgb(S)

    Описание:

    Функция isrgb возвращает 1, если S является полноцветным изображением, и 0 - в противном случае. Считается, что массив представляет собой полноцветное изображение, если он удовлетворяет следующим условиям:

    - является трехмерным массивом размера MxNx3, где М - число строк изображения, N - число столбцов;

    - имеет формат представления данных double, при этом значения всех его элементов принадлежат диапазону [0, 1 ]; или имеет формат представления данных uint8;

    - логический флаг сброшен.

     

     

    Наверх

    imfinfo - чтение из файла информации об изображении

    Синтаксис:

    info=imfinfo(filemane, fmt)

    info=imfinfo(filemane)

    Описание:

    Функции imfinfo(filemane, fmt) и imfinfo(filemane) в структуре info возвращают информацию об изображении и способе его хранения из файла с именем filemane. Первая функция позволяет кроме имени файла  filemane задать его расширение - ftm. В этом случае если MATLAB не может найти файл с именем filemane, то ищется файл с именем filemane и расширением ftm.

    Параметры filemane и ftm являются строками. Пакет ІРТ поддерживает работу со следующими графическими форматами файлов:

    Значение параметра ftm Название формата
    ‘bmp’ Windows Bitmap (BMP)
    ‘tif’ или ‘tiff’ Tag Image File Format (TIFF)
    ‘jpg’ или ‘jpeg’ Joint Photographic Experts Group (JPEG)
    ‘pcx’ Windows Painbrush (PCX)
    ‘hdf’ Hierarchical Data Format (HDF)
    ‘xwd’ X Windows Dump (XWD)

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

    Имя поля Тип данных Описание
    Filename Строка Имя файла, если файл находится в текущей директории, или полный путь к файлу
    FileModDate Строка Дата и время последней модификации файла
    FileSize Число Размер файла в байтах
    Format Строка Формат файла, значение поля совпадает с трехбуквенным вариантом параметра fmt
    FormatVersion Строка или число Версия формата
    Width Число Ширина изображения в пикселах
    Height Число Высота изображения в пикселах
    BitDepth Число Глубина изображения в битах на пиксел
    ColorType Строка Тип изображения:
    ‘truecolor’ или ‘RGB’ для полноцветных изображений;
    ‘grayscale’ для полутоновых изображений;
    ‘indexed’ для палитровых изображений

    В файлах форматов TIFF и HDF может хранится несколько изображений. В этом случае info является массивом структур.

     

     

    Наверх

    imread - чтение изображения из файла

    Синтаксис:

    D=imread(filename, fmt)

    [X,map]=imread(filename, fmt)

    […]=imread(filename)

    […]=imread(…, idx)

    […]=imread(…, ref)

    Описание:

    Функция D=imread(filename, fmt) читает из файла с именем filename бинарное, полутоновое или полноцветное изображение и помещает его в массив D. Функция  [X,map]=imread(filename, fmt) читает из файла с именем filename палитровое изображение X с палитрой map.

    Если MATLAB не может найти файл с именем filename, то ищется файл с именем filename и расширением fmt. Параметры filename и fmt являются строками. Параметр fmt в вызове функции может быть опущен, в этом случае формат файла автоматически определяется из его содержимого. В таблице приведены типы изображений, которые могут быть прочитаны функцией imread.

    Формат Глубина цвета Особенности
    BMP 1, 4, 8, 24 Несжатые файлы
    4, 8 Файлы с RLE-сжатием
    TIFF 1, 8, 24 Несжатые файлы
    1, 8, 24 Файлы, использующие Packbit-сжатие
    1 Файлы, использующие ССITT-сжатие
    JPEG 8, 24  
    PCX 1, 8, 24  
    HDF 8, 24  
    XWD 1, 8  

    Функция […]=imread(…, idx) читает одно изображение из TIFF-файла, содержащего несколько изображений. Номер изображения по порядку в списке IFD указывается в параметре idx. Если параметр idx при вызове функции не указан, то читается первое по порядку изображение в файле.

    Функция […]=imread(…, ref) читает одно изображение из HDF-файла, содержащего несколько изображений. Каждое изображение в HDF-файле имеет уникальный номер-описатель. Этот описатель указывается в параметре ref. Если параметр ref при вызове функции не указан, то читается первое по порядку изображение в файле.

    Прочитанное из файла изображение имеет формат представления данных uint8.

     

     

    Наверх

    imwrite - запись изображения в файл

    Синтаксис:

    imwrite(S, filename, fmt)

    imwrite(X, map, filename, fmt)

    imwrite(…, filename)

    imwrite(…, Parameter, Value)

    Описание:

    Функция imwrite(S, filename, fmt) записывает в файл с именем filename бинарное, полутоновое или полноцветное изображение S. Функция imwrite(X, map, filename, fmt) записывает в файл с именем filename палитровое изображение X с палитрой map. Формат файла определяется параметром ftm. Параметры filename и ftm являются строками. Возможные значения параметра ftm приведены в описании функции iminfo.

    Функция imwrite(…, filename) аналогична описанным функциям, но формат файла определяется по расширению filename.

    В таблице 1 приведены типы изображений, которые могут быть прочитаны функцией imwrite.

    Таблица 1.

    Формат Тип изображений
    BMP 8 бит/пиксел - палитровые,
    24 бит/пиксел - палитровые
    TIFF Бинарные несжатые или с использованием Packbit- или CCITT-сжатия;
    8 бит/пиксел - палитровые или полутоновые несжатые или с использованием Packbit-сжатия;
    несжатые или с использованием Packbit-сжатия
    JPEG 8 бит/пиксел - полутоновые,
    24 бит/пиксел - полноцветные;
    палитровые конвертируются в полноцветные
    PCX 8 бит/пиксел - полутоновые
    HDF 8 бит/пиксел - полутоновые и палитровые,
    24 бит/пиксел - полноцветные
    XWD 8 бит/пиксел-палитровые

    При записи изображений в файлы форматов TIFF, JPEG, HDF можно указать ряд дополнительных параметров, влияющих на способ сохранения изображений. Для этого в функции imwrite после параметров filename и ftm передается одна или несколько пар параметров Parameter, Value.

    Если запись осуществляется в JPEG-файлы, то можно указывать показатель качества сжатого изображения. Для этого Parameter должен быть строкой ‘Quality’, а Value - число, которое определяет степень сжатия изображения. Этот показатель может принимать значения в диапазоне [0, 100]. Чем меньше значение этого показателя, тем выше степень сжатия, но хуже качество изображения.

    При записи изображений в TIFF-файл можно использовать следующие дополнительные параметры (табл. 2):

    Таблица 2.

    Параметр Возможные значения Value Значение Value по умолчанию
    ‘Compression‘ ‘none’ - не использовать сжатие;
    ‘packbits’ - использовать метод сжатия Рackbits;
    ‘ccitt’ - использовать метод сжатия ССІТТ
    ‘ccitt’ - для бинарных изображений;
    ‘packbits’ - для других типов изображений
    ‘Description’ Любая строка. Эта строка находится в поле ImageDascription структуры, возвращаемой iminfo ‘’
    ‘Resolution’ Разрешение в точках на дюйм 72

    При записи изображений в HDF - файл можно использовать следующие дополнительные примеры (табл. 3):

    Таблица 3.

    Параметр Возможные значения Value Значение Value по умолчанию
    ‘Compression‘ ‘none’ - не использовать сжатие;
    ‘rle’ - использовать метод сжатия RLE;
    ‘jpeg’ - использовать метод сжатия JPEG
    ‘rle’
    ‘Quality’ Показатель качества при JPEG - сжатии, это число задается в диапазоне [0, 100] 75
    ‘’WriteMode ‘overwrite’ - переписать существующий файл;
    ‘append’ - добавить изображение в существующий файл
    ‘overwrite’

    Если исходное изображение имеет формат представления данных double, то перед записью в файл данные изображения автоматически преобразуются в формат uint8.

     

     

    Наверх

    imageinfo - Создание информационных данных о изображении

    Синтаксис:

    imageinfo

    imageinfo(h)

    imageinfo(filename)

    imageinfo(info)

    imageinfo(himage,filename)

    imageinfo(himage,info)

    hfig = imageinfo(...)

    Описание:

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

    В таблице приведен список основных составляющих информации об изображении. Отметим, что число информационных составляющих зависит от типа изображения.

    Атрибуты имени Значение
    Width (columns) Число столбцов в изображении.
    Height (rows) Число строк в изображении.
    Class Тип данных зависит от изображения.
    Примечание: Для single или int16 изображений функция imageinfo возвращает данные в формате double, поскольку объекты изображения преобразуются в этот формат.
    Image type Один из типов изображений, идентифицируемых приложением Image Processing Toolbox: 'intensity', 'truecolor', 'binary' или 'indexed'.
    Minimum intensity Для яркостных изображений это значение представляет наименьшее значение яркости некоторого пикселя.
    Для индексных изображений это значение представляет наименьший индекс в палитре цветов.
    Этот параметр отсутствует для изображений типа 'binary' или 'truecolor'.
    Maximum intensity Для яркостных изображений это значение представляет наибольшее значение яркости некоторого пикселя.
    Для индексных изображений это значение представляет наибольший индекс в палитре цветов.
    Этот параметр отсутствует для изображений типа 'binary' или 'truecolor'.

    Функция imageinfo(h) создает информационный инструмент для описания изображений с использованием параметра h, где h обеспечивает установку окна отображения, осей и объектов отображения.

    Функция imageinfo(filename) создает информационный инструмент для описания изображений, содержащий метаданные изображений из графического файла. Изображение может не визуализироваться в окне отображения. Параметром filename может представляться файл любого типа, который регистрируется информационной функцией в реестре формата файлов imformats или может быть прочитан функцией imfinfo. Параметр filename может также представлять DICOM-файлы, информация о которых считывается функцией dicominfo.

    Функция imageinfo(info) создает информационный инструмент для описания изображений, содержащий метаданные изображений в структуре info. info представляет структуру, возвращаемую функцией imfinfo или dicominfo.

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

    Функция imageinfo(himage,info) создает информационный инструмент для описания изображений, содержащий информацию относительно основных атрибутов изображения, описанных в himage и метаданные изображений в структуре info.

    Функция hfig=imageinfo(...) возвращает отображение информационного инструментария изображений.

    Пример:

    imageinfo('peppers.png')

     

    h = imshow('bag.png');

    info = imfinfo('bag.png');

    imageinfo(h,info);

    imshow('trees.tif');

    imageinfo;

     

     

    Наверх

    imagemodel - Доступ к свойствам изображений с точки зрения их отображения

    Синтаксис:

    imgmodel = imagemodel(himage)

    Описание:

    Функция imgmodel = imagemodel(himage) создает объекты модели изображения для himage. Параметр himage представляет объект изображения или массив объектов изображения.

    Функция imagemodel возвращает объект модели изображения или массив объектов модели изображения, когда himage является массивом объектов изображения.

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

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

    Метод Значение
    getClassType Возвращает строку, указывающую на класс изображений. str = getClassType(imgmodel),
    где параметр imgmodel представляет модель изображения и str является текстовой строкой типа 'uint8'
    getDisplayRange Возвращает массив, содержащий минимальное и максимальное значения диапазона отображения для яркостного изображения. Для всех других типов изображений, кроме яркостного, возвращается пустой массив. disp_range = getDisplayRange(imgmodel)
    где параметр imgmodel является действительной моделью изображения, а disp_range массивом в формате чисел удвоенной точности в диапазоне [0 255]. 
    getImageHeight Возвращает скаляр в формате чисел двойной точности, содержащий число строк. height = getImageHeight(imgmodel)
    где параметр imgmodel является моделью изображения, а height скаляром в формате удвоенной точности.
    getImageType Возвращает текстовую строку, описывающую тип изображения. str = getImageType(imgmodel)
    где imgmodel представляет модель изображения, а str представляет одну из текстовых строк 'intensity', 'truecolor', 'binary' или 'indexed'.
    getImageWidth Возвращает скаляр, содержащий число столбцов. width = getImageWidth(imgmodel)
    где параметр imgmodel является моделью изображения, width скаляром в формате удвоенной точности.
    getMinIntensity Возвращает минимальное значение на изображении, вычисленное по формуле min(Image(:)). Для яркостных изображений, это значение представляет собой минимальную яркость. Для индексных изображений, это значение равно минимальному индексу. Для других типов изображений это значение представляется пустым массивом. minval = getMinIntensity(imgmodel)
    где параметр imgmodel представляет модель изображения, а minval - числовое значение. Формат minval зависит от формата объекта изображения.
    getMaxIntensity Возвращает максимальное значение на изображении, вычисленное по формуле max(Image(:)). Для яркостных изображений это значение равно максимальной интенсивности. Для индексных изображений оно равно максимальному индексу. Для других типов изображений это значение представляется пустым массивом.
    maxval = getMaxIntensity(imgmodel)
    где imgmodel представляет модель изображения, а maxval - числовое значение. Формат maxval зависит от формата объекта изображения.
    getNumberFormatFcn Возвращает функцию преобразования числового значения в строку.
    fun = getNumberFormatFcn(imgmodel)
    где параметр imgmodel представляет действительную модель изображения. fun представляет функцию, которая захватывает числовые значения и возвращает их в виде текстовой строки. Например, ее можно использовать для преобразования числового значения getPixelValue в тестовую строку.
    str = fun(getPixelValue(imgmodel,100,100)) 
    getPixelInfoString Возвращает текстовую строку, содержащую значение пикселя, расположение которого описано в виде строки и столбца.
    str = getPixelInfoString(imgmodel,row,column)
    где параметр imgmodel представляет действительную модель изображения, а row и column скаляры значений строк и столбцов. str представляется некоторым характерным массивом. Например, для RGB-изображений, возвращается текстовая строка типа '[66 35 60]'.
    getPixelRegionFormatFcn Возвращает некоторую функцию, конвертирующую значение пикселя в текстовую строку.
    fun = getPixelRegionFormatFcn(imgmodel)
    где параметр imgmodel представляет действительную модель изображения. fun представляет собой некоторую функцию, захватывающую информацию о расположении пикселя объекта изображения и возвращающую значение пикселя в виде строки описанного текстового формата. Например, при работе с RGB-изображением, функция возвращает текстовую строку в формате 'R:000 G:000 B:000', где 000 представляет действительное значение пикселя. str = fun(100,100)
    getPixelValue Возвращает значение пикселя, расположение которого описано через строку и столбец в виде числового массива.
    val = getPixelValue(imgmodel,row, column)
    где параметр imgmodel представляет действительную модель изображения, а row и column строки и столбцы в виде числовых скалярных значений. Формат параметра val зависит от формата объекта изображения.
    getDefaultPixelInfoString Возвращает текстовую строку, описывающую тип информации, возвращаемой информационной строкой о пикселе. Эта строка может использоваться в качестве информации о значении пикселя.
    str = getDefaultPixelInfoString(imgmodel)
    где параметр imgmodel представляет действительную модель изображения. В зависимости от типа изображения, str может быть одной из тестовых строк 'Intensity', '[R G B]', 'BW' или ' [R G B]'.
    getDefaultPixelRegionString Возвращает текстовую строку, указывающую на тип информации, отображаемой в Pixel Region tool для каждого типа изображения. Эта строка может использоваться для получения действительных значений пикселей.
    str = getDefaultPixelRegionString(imgmodel)
    где параметр imgmodel представляет действительную модель изображения. В зависимости от типа изображения, str может быть одной из текстовых строк '000', 'R:000 G:000 B:000]', '0' или '<000> R:0.00 G:0.00 B:0.00'.
    getScreenPixelRGBValue Возвращает отображаемые значения пикселей, расположение которых описывается параметрами ROW и COLUMN в виде массива в формате double.
    val = getScreenPixelRGBValue(imgmodel,row, col)
    где параметр imgmodel представляет действительную модель изображения, а row и column соответственно строки и столбцы в виде числовых скалярных значений. val представляется массивом в формате удвоенной точности, например, [0.2 0.5 0.3].

    Примечание:

    Функция imagemodel работает через запрашиваемые объекты изображения CData. Для изображений в формате single или int16, объекты изображения преобразуются из CData в double. Например, в нашем случае h = imshow(int16(ones(10))), class(get(h,'CData')) возвращает 'double'. Поэтому, getClassType(imgmodel) возвращает 'double'.

    Пример:

    Рассмотрим пример использования функции imagemodel.

    h = imshow('peppers.png');

    im = imagemodel(h);

    figure,subplot(1,2,1)

    h1 = imshow('hestain.png');

    subplot(1,2,2)

    h2 = imshow('coins.png');

    im = imagemodel([h1 h2]);

     

     

    Наверх

    iptsetpref - установка глобальных переменных IPT

    Синтаксис:

    iptsetpref(prefname, value)

    Описание:

    Функция iptsetpref(prefname, value) присваивает глобальной переменной с именем prefname значение value. Имена глобальных переменных не зависят от регистра.

    Установленные значения сохраняются в течение текущей сессии MATLAB либо пока не будут изменены последующим вызовом функции iptsetpref. Для того, чтобы сохранить значения между сессиями MATLAB, необходимо поместить соответствующие вызовы iptsetpref в файл startup.m.

    В таблице ниже приведены возможные имена и значения глобальных переменных.

    Параметр prefmane Возможные значения Описание
    'ImshowBorder' 'loose' Изображение будет отображаться функцией imshow с отступом от края окна figure. Таким образом, в окне остается место для дополнительных надписей. Используется по умолчанию
    'tight' Изображение будет отображаться функцией imshow так, чтобы оно занимало все окно figure
    'ImshowAxesVisible' 'on' При выводе изображения функцией imshow в окне figure дополнительно будут выведены оси координат
    'off' При выводе изображения функцией imshow в окне figure оси координат не выводятся. Используется по умолчанию
    'ImshowTruesize' 'auto' Если в окне figure находится только изображение и его оси координат, то при выводе изображения функцией imshow автоматически вызывается функция truesize. Используется по умолчанию
    'manual' При выводе изображения функцией imshow функция truesize не вызывается автоматически. Ее можно вызвать отдельно или передать соответствующий параметр функции imshow
    'TruesizeWarning' 'on' При вызове функции truesize в окне интерпретатора MATLAB будет выводиться предупреждение в том случае, если размер выводимого изображения больше размеров окна. Используется по умолчанию
    'off' Предупреждение функцией truesize не выводится

     

     

    Наверх

    iptgetpref - чтение глобальных переменных IPT

    Синтаксис:

    value=iptgetpref(prefname)

    Описание:

    Функция value=iptgetpref(prefname) возвращает значение глобальной переменной с именем prefname. Имена глобальных переменных не зависят от регистра.

    Если вызвать функцию iptgetpref без входного параметра, то в value возвращается структура, содержащая значения всех глобальных переменных. Имена полей структуры совпадают с именами глобальных переменных.

     

     

    Наверх

    getline - выбор ломаной линии с помощью мышки

    Синтаксис:

    [x, y]=getline(fig)[x, y]=getline(ax)[x, y]=getline[x, y]=getline(... , 'closed')

    Описание:

     

    Функция [x, y]=getline(fig) позволяет выбрать ломаную линию в текущем окне изображения fig с помощью мышки. Координаты ломаной линии помещаются в X и Y. Использование одного нажатия клавиши мышки приводит к прибавлению точки к ломаной кривой. Использование нажатия правой клавиши или удвоенного щелчка обозначает установку завершающей точки при выборе ломаной линии. Нажатие Return или Enter также приводит к установке последней точки при выборе ломаной линии. Нажатие Backspace или Delete возвращает к выбору предварительной точки ломаной линии.

    [x, y]=getline(ax) - позволяет создать ломаную линию в системе координат, описанной в ax.
    [x, y]=getline - аналогично выражению [x, y]=getline(gcf).
    [x, y]=getline(..., 'closed') - динамика и возвращение результирующего полинома.

     

     

    Наверх

    getpts - выбор точек с помощью мышки

    Синтаксис:

    [x, y]=getpts(fig)

    [x, y]=getpts(ax)

    [x, y]=getpts

     

    Описание:

    Функция [x, y]=getpts(fig) позволяет выбрать точки в текущих координатах окна отображения fig с помощью мышки. Координаты выбранных точек помещаются в X и Y.

     

    Использование левой клавиши мышки приводит в установке точки. Нажатие правой клавиши или двойной щелчок приводят к установке последней выбранной точки. Нажатие Return или Enter также приводит к установке последней выбранной точки. Нажатие Backspace или Delete приводит к выбору предварительной точки.

    [x, y]=getpts(ax) - установка выбранной точки в координатах, описанных в ax.
    [x, y]=getpts - эквивалентное выражение [x, y]=getpts(gcf).

     

     

    Наверх

    getrect - выбор прямоугольника с помощью мышки

    Синтаксис:

    rect=getrect(fig)rect=getrect(ax)rect=getrect(fig)

    Описание:

     

    Функция rect=getrect(fig) позволяет установить прямоугольник в текущих координатах фигуры с использованием мышки. Координаты прямоугольника помещаются в X и Y.

    Использование нажатия клавиш мышки и плавного ее передвижения приводит к созданию нужного прямоугольника. Параметр rect представляется четырехэлементным вектором в форме [xmin ymin width height].

     

    Функция rect=getrect(ax) приводит к созданию прямоугольника в текущих координатах, описанных в ax.

     

     

    Наверх

    ipticondir - возвращает название директории, содержащей IPT и MATLAB иконки

    Синтаксис:

    [D1 D2] = ipticondir

    Описание:

    Функция [D1, D2] = imicondir возвращает название директории, содержащей иконку приложения Image Processing Toolbox (D1) и иконку MATLAB (D2).

    Примеры:

    [iptdir, MATLABdir] = ipticondir

    dir(iptdir)

     

     

    Наверх

    iptgetapi - доступ к прикладному программному интерфейсу

    Синтаксис:

    API = iptgetapi(h)

    Описание:

    Функция API = iptgetapi(h) возвращает API-структуру, связанную с параметром h, в случае его существования. В других случаях, функция iptgetapi возвращает пустой массив.

    Для более детальной информации см. функции immagbox, impositionrect или imscrollpanel.

    Примеры:

    hFig = figure('Toolbar','none',...

                  'Menubar','none');

    hIm = imshow('tape.png');

    hSP = imscrollpanel(hFig,hIm);

    api = iptgetapi(hSP);

    api.setMagnification(2) % 2X = 200%

     

     

    Наверх

    imshow - вывод изображения на экран

    Синтаксис:

    imshow(l, n)

    imshow(l, [low high])

    imshow(BW)

    imshow(X, map)

    imshow(RGB)

    imshow(...,display_option)

    imshow(XData, YData, ...)

    imshow filename

    h=imshow(...)

    Описание:

    Функция imshow(I, n) выводит на экран полутоновое изображение I, используя при выводе n уровней серого. Если при вызове функции опустить параметр n, то когда MATLAB запущен в графическом режиме TrueColor, для вывода полутонового изображения используется 256 градаций серого или 64 градации серого, когда MATLAB запущен в графическом режиме с меньшим количеством цветов.

    Функция imshow(I, [low high]) выводит на экран полутоновое изображение I, дополнительно контрастируя выводимое изображение. Пикселы изображения I, яркость которых меньше либо равна low, отображаются черным цветом. Пикселы, яркость которых больше либо равна high, отображаются белым цветом. Пикселы, яркость которых имеет значение между low и high, отображаются серым цветом. Все уровни серого равномерно распределены от low до high. Если вызвать функцию imshow(I, [ ]), указав вторым аргументом пустой массив, то low будет присвоено минимальное значение в I(low = min(I(:))), a high будет присвоено максимальное значение в I(max = max(I(:))).

    Функция imshow(BW) выводит на экран бинарное изображение BW. Пикселы, значение которых равно 0, отображаются черным цветом. Пикселы, значение которых равно 1, отображаются белым цветом.

    Функция imshow(X, map) выводит на экран палитровое изображение Х с палитрой mар.

    Функция imshow(RGB) выводит па экран полноцветное изображение RGB.

    Дополнительно в перечисленные функции можно передать параметр display_оption (imshow(...,display_ option)), который может принимать значения 'truesize' и 'notruesize'. Если параметр display_option равен 'truesize', то imshow будет автоматически вызывать функцию truesize. Если параметр display_option равен 'notruesize', то вызова функции  truesizeпроисходить не будет. Когда параметр display_option не определен, вызов функции truesize зависит от значения глобальной переменной IPT 'ImshowTruesize'.

    Кроме того, в перечисленные функции можно передать два двухэлементных вектора XData и YData, определяющих диапазон изменения значений по осям пространственной системы координат: imshow(XData, YData,...).

    Функция imshow filename выводит на экран изображение из файла с именем filename. Для чтения файла imshow вызывает функцию imread.

    Если для функций imshow определить выходной параметр h=imshow(...), то в h будет возвращен описатель (handler) выведенного изображения как объекта графического интерфейса MATLAB.

     

     

    Наверх

    truesize - установка размеров окна для отображения изображений

    Синтаксис:

    truesize(fig, [mrows mcols])

    truesize(fig)

    Описание:

    Функция truesize(fig, [mrows mcols]) устанавливает для окна с описателем fig размер в mrows пикселов по вертикали и mcols пикселов по горизонтали. Если в данное окно выводится изображение, то оно масштабируется до этих размеров.

    Функция truesize(fig) устанавливает для окна с описателем fig размер, равный размерам изображения, выведенного в окне fig. В результате изображение выводится без масштабирования.

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

    Когда глобальная переменная 'TruesizeWarning' имеет значение 'on' (включено), то в командном окне системы MATLAB выводится предупреждение, если размер выводимого изображения больше размера экрана.

     

     

    Наверх

    subimage - вывод нескольких изображений в одном окне

    Синтаксис:

    subimage(S)

    subimage(X,map)

    subimage(XData, Ydata, …)

    h= subimage(…)

    Описание:

    Функция subimage(S) в сочетании с функцией MATLAB subplot позволяет вывести в одно окно figure несколько полноцветных, полутоновых и бинарных изображений S. Аналогично для вывода палитровых изображений работает функция subimage(X,map). Заметим, что в одно окно могут выводиться изображения разного типа.

    Функция subplot(m, n, p) разбивает текущее окно на  подокон и устанавливает текущим окно с номером p. Подокна нумеруются слева направо и сверху вниз, начиная от левого верхнего подокна, которое имеет номер 1. Функция subimageвыводит изображение в текущее подокно.

    Кроме того, в функцию subimage можно передать два двухэлементных вектора XData и Ydata, определяющих диапазон изменения значений по осям пространственной системы координат: subimage(XData, Ydata, …).

    Если для функций subimage определить выходной параметр h=subimage(…), то в h будет возвращен описатель (handler) выведенного изображения как объекта графического интерфейса системы MATLAB.

    Пример.

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

    Программа демонстрирует чтение расфокусированного изображения и его фильтрацию с целью увеличения резкости. Исходное изображение и результат выводятся в одно окно (рис. 1).

    %Пример демонстрирует фильтрацию изображения с целью повышения резкости

    %и вывод исходного и получившегося изображения в одно окно.

    %Чтение исходного файла

    im=imread(‘lena.tif’);

    im=im2double(im);

    %Фильтрация с целью повышения резкости.

    h=fspecial(‘unsharp’, 0.5);

    imsharp=conv2(im, h);

    imsharp=im2uint8(imsharp);

    %Вывод исходного и полученного изображения в одно окно.

    subplot(1,2,1), subimage(im);

    subplot(1,2,2), subimage(imsharp);

    Рис. 1

     

     

    Наверх

    colorbar - вывод на экран палитры

    Синтаксис:

    colorbar

    colorbar(‘vert’)

    colorbar(‘horiz’)

    colorbar(h)

    h=colorbar(…)

    Описание:

    Функция colorbar без параметров или функция  colorbar(‘vert’) добавляет в текущее окно справа от изображения вертикальный прямоугольник с цветами текущей палитры. Функция colorbar(‘horiz’) добавляет в текущее окно снизу от изображения горизонтальный прямоугольник с цветами текущей палитры.

    Функция colorbar(h) добавляет в окно с описателем h вертикальный прямоугольник с цветами текущей палитры.

    Если для функции colorbar определить выходной параметр h=colorbar(…), то в h будет возвращен описатель (handler) нарисованной палитры как объекта графического интерфейса MATLAB.

     

     

    Наверх

    imcontour - построение для изображения линий уровня

    Синтаксис:

    imcontour(I, n)

    imcontour(I, v)

    imcontour(XData, YData, …)

    imcontour(…, LineSpec)

    [C, h]=imcontour(…)

    Описание:

    Функция imcontour рассматривает полутоновое изображение I как трехмерную поверхность (x, y -  пространственной системы координат и третья координата – яркость), строит для поверхности линии уровня аналогично функции MATLAB contour и выводит их на экран. Линии уровня образуются в результате пересечения плоскостей, перпендикулярных оси яркости и рассматриваемой поверхности. Линии уровня, соответствующие различным яркостям (лежащим в различных плоскостях), обозначаются разными цветами.

    Функция imcontour(I, n) строит линии уровня для полутонового изображения I, используя n плоскостей, проходящих через значения, равномерно распределенные по оси яркости. Если в вызове функции параметр n опущен, то он выбирается автоматически.

    Функция imcontour(I, v) строит линии уровня для полутонового изображения I, используя плоскости, проходящие через значения на оси яркости из вектора v.

    Функция imcontour(XData, YData, …) в двухкомпонентных векторах XData и Ydata дополнительно определяет диапазон изменения значений по осям пространственной системы координат.

    Функция imcontour(…, LineSpec) дополнительно определяет тип линии в параметре LineSpec. Существующие типы линий можно посмотреть в описании функции MATLAB plot.

    Функция [C, h]=imcontour(…) возвращает массив С координат линий уровня и вектор h описателей графических объектов для изображений, соответствующих каждой линии уровня.

    Пример.

    Для полутонового изображения (рис. 1а) создается изображение с линиями уровня для трех уровней яркости (рис. 1б).

    %Пример демонстрирует построение линий уровня

    %для полутонового изображения

    %Чтение изображения и вывод его на экран

    I=imread(‘lena.tif’);

    imshow(I);

    %Вывод линий уровня для трех уровней яркости в новое окно.

    figure, imcontour(I,3);

     

     

    Рис. 1

     

     

    Наверх

    immovie - создание видеопоследовательности

    Синтаксис:

    MovX=immovie(MX, map)

    Описание:

    Функция MovX=immovie(MX, map) формирует матрицу MovX из многокадрового палитрового изображения MX с палитрой map. Матрица MovX представляет собой видеопоследовательность, которая может быть показана на экране с помощью функции MATLAB movie.

    Многокадровое палитровое изображение MX составляется из нескольких палитровых изображений одинакового размера  и использующих одинаковую палитру. MX является четырехмерным массивом , где  – количество кадров.

    Пример.

    Имеется 4 полноцветных изображения. Требуется составить из этих кадров видеопоследовательность (маленький фильм) и показать его на экране.

    %Пример демонстрирует создание видеопоследовательности.

    %Чтение отдельных кадров из файлов.

    f1=imread(‘frame1.bmp’);

    f2=imread(‘frame2.bmp’);

    f3=imread(‘frame3.bmp’);

    f4=imread(‘frame4.bmp’);

    %Преобразование полноцветных изображений в палитровые.

    %Поскольку у всех кадров должна быть одинаковая палитра,

    %то первое изображение преобразовываем с подбором оптимальной

    %палитры map и применяем эту палитру к остальным изображениям.

    [f1, map]=rgb2ind(f1, 200);

    f2=rgb2ind(f2, map);

    f3=rgb2ind(f3, map);

    f4=rgb2ind(f4, map);

    %Формируем многокадровое палитровое изображение

    MX=cat(4, f1, f2, f3, f4);

    %Формируем матрицу видеопоследовательности.

    mov=immovie(MX, map);

    %Выводим 10 раз видеопоследовательность на экран

    %с частотой 8 кадров в секунду.

    movie(mov, 10, 8);

     

     

    Наверх

    montage - вывод на экран всех кадров многокадрового изображения

    Синтаксис:

    montage(MS);

    montage(MX, map);

    h=montage(…)

    Описание:

    Функция montage(MS) одновременно выводит на экран в текущее окно все кадры многокадрового полноцветного, полутонового или бинарного изображения MS. Многокадровое полутоновое или бинарное изображение составляется из нескольких соответственно полутоновых или бинарных изображений одинакового размера . Такое многокадровое изображение является четырехмерным массивом , где  – количество кадров. Многокадровое полноцветное изображение составляется из нескольких полноцветных изображений одинакового размера . Полноцветное многокадровое изображение является четырехмерным массивом , где  – количество кадров.

    Функция montage(MX, map) одновременно выводит на экран в текущее окно все кадры многокадрового палитрового изображения MX с палитрой map. Многокадровое палитровое изображение MX составляется из нескольких палитровых изображений одинакового размера  и использующих одинаковую палитру. MX является четырехмерным массивом , где  – количество кадров.

    Функция h=montage(…) возвращает описатель выведенного многокадрового изображения как объекта графического интерфейса системы MATLAB.

     

     

    Наверх

    warp - наложение изображения на поверхность

    Синтаксис:

    warp(S)

    warp(X, map)

    warp(I, n)

    warp(z,…)

    warp(x,y,z,…)

    h= warp(…)

    Описание:

    Функция warp(S) выводит в текущее окно плоскую прямоугольную поверхность, на которую наложено полноцветное или бинарное изображение S.

    Функция warp(X, map) выводит в текущее окно плоскую прямоугольную поверхность, на которую наложено палитровое изображение X с палитрой map.

    Функция warp(I, n) выводит в текущее окно плоскую прямоугольную поверхность, на которую наложено полутоновое изображение I. При выводе на экран используется n градаций яркости.

    Функция warp(x, y, z) выводит в текущее окно поверхность, задаваемую вектором координат x, y, z, на которую наложено изображение.

    Функция warp(z,…) выводит в текущее окно поверхность, задаваемую вектором координат z (координаты x, y подбираются автоматически), на которую наложено изображение.

    Функция h= warp(…) возвращает описатель выведенной поверхности или объекта графического интерфейса MATLAB.

    Пример.

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

    %Пример демонстрирует наложение изображения

    %на сферическую поверхность.

    %Чтение исходного файла изображения и вывод его на экран.

    I=imread(‘blood.tif’);

    imshow(I);

    %Создание сферической поверхности

    % и наложение на нее изображения.

    [x, y, z]=sphere;

    figure, warp(x, y, x, I);

     

    a)                                      б)

    Рис. 1.

     

     

    Наверх

    zoom - масштабирование изображения в окне изображения

    Синтаксис:

    zoom on

    zoom off

    zoom out

    zoom reset

    zoom 

    zoom xon

    zoom yon

    zoom(factor)

    zoom(fig, option)

    Описание:

    Команда zoom on включает режим интерактивного масштабирования для текущего окна (figure). В этом режиме щелчок клавиши мыши приводит к увеличению или уменьшению окна в factor раз. Курсор мыши должен находится в пределах изображения. Щелчок левой клавишей мыши приводит к увеличению окна, а щелчок правой клавишей - к уменьшению. Если перемещать курсор при нажатой левой клавише мыши, то можно указать прямоугольный фрагмент изображения, который следует увеличить до размеров всего окна.

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

    Команда zoom reset запоминает текущие размеры отображаемого фрагмента изображения как его первоначальные размеры. Позднее к этим размерам можно будет возвратиться с помощью команды zoom out. 

    Команда zoom off выключает режим интерактивного масштабирования.

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

    Команда zoom xon и zoom yon включают режим интерактивного масштабирования отдельно по горизонтали или вертикали соответственно.

    Функция zoom(factor) устанавливает значение коэффициента масштабирования. По умолчанию factor=2.

    Функция zoom(fig, option) управляет режимом масштабирования для окна с описателем fig. Параметр option может принимать значения параметров описанных выше команд: on, off, xon, yon, reset, factor.

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

     

     

    Наверх

    getimage - получение изображения из графического объекта

    Синтаксис:

    D=getimage(h)

    [xData, yData, D]=getimage(h)

    […, D, flag]=getimage(h)

    Описание:

    Функция D=getimage(h) возвращает изображение D, содержащееся в графическом объекте MATLAB, например в окне figure, с описателем h. Если объект с описателем h не содержит изображения, то функция возвращает пустую матрицу.

    Функция [xData, yData, D]=getimage(h) дополнительно возвращает два двухэлементных вектора xData и yData, содержащих диапазоны изменения координат по осям пространственной системы координат изображения D.

    Функция […, D, flag]=getimage(h) дополнительно возвращает целочисленный параметр flag, который указывает тип изображения, содержащегося в графическом объекте с описателем h и, соответственно, помещенного в D.

    Параметр flag может принимать следующие значения:

    Флаг Тип изображения
    0 Графический объект не содержит изображение. D – пустая матрица
    1 D – полутоновое изображение со значениями яркости в стандартных диапазонах, т.е. [0, 1] – для формата представления данных double, [0,255] – для формата представления данных uint8
    2 D – палитровое изображение
    3 D – полутоновое изображение со значениями яркости вне стандартных диапазонов
    4 D – полноцветное изображение

     

    Наверх

    dicominfo - чтение метаданных из DICOM-файла

    Синтаксис:

    info=dicominfo(filename)

    info=dicominfo(filename,'dictionary', D)

    Описание:

    Функция info=dicominfo(filename) формирует метаданные, полученные из DICOM-файла (Digital Imaging and Communications in Medicine).

    Функция info=dicominfo(filename, 'dictionary', D) использует словарные данные для считывания в массив D DICOM-сообщений. Системе MATLAB необходимо указать путь к записываемому файлу. По умолчанию этот файл называется dicom-dict.txt.

    Пример:

    info=dicominfo('CT-MONO2-16-ankle.dcm')

    info=

    Filename:[1x47 char]

    FileModDate:'24-Dec-2000 19:54:47'

    FileSize:525436

    Format:'DICOM'

    FormatVersion:3

    Width:512

    Height:512

    BitDepth:16

    ColorType:'grayscale'

    …      и т.д.

     

     

    Наверх

    dicomread - чтение DICOM изображений

    Синтаксис:

    X=dicomread(filename)

    X=dicomread(info)

    [X, map]=dicomread(...)

    [X, map, alpha]=dicomread(...)

    [X, map, alpha, overlays]=dicomread(...)

    Описание:

    Функция X=dicomread(filename) считывает видеоинформацию, представленную файлом в формате “Цифровые изображения и коммуникации в медицине” (Digital Imaging and Communications in Medicine (DICOM)). В большинстве случаев, это массив полутонового изображения X с размерностью MN или массив цветного изображения X с размерностью MN3. Многомерные изображения могут представляться четырехмерным массивом.

    Функция X=dicomread(info) считывает справочные данные из DICOM-файла в структуру info, которая генерируется функцией dicominfo.

    Функция [X, map]=dicomread(...) возвращает изображение X и палитру MAP. Когда массив X является полутоновым или цветным (true) изображением, параметр map пустой.

    Функция [X, map, alpha]=dicomread(...) возвращает изображение X, палитру map и alpha канал для матрицы X. Значение параметра alpha равно 0, если пикселы темные, в других случаях равен индексам палитры. Значения RGB в палитре map при помощи alpha замещают значения массива X. Размерность alpha совпадает с размерностью массива X, а в многомерном случае – с размерностью мультифреймовых изображений.

    Функция [X,map, alpha, overlays]=dicomread(...) также возвращает изображение X, палитру map, alpha канал для матрицы X и некоторые оверлейные данные из DICOM–файла. Эти данные представляют собой однобитные черно-белые изображения, размерность которых совпадает с размерностью X. Оверлейные данные могут представляться как многомерными массивами, так и быть пустыми в случае их отсутствия.

    Синтаксис записи исходных параметров должен быть следующим:

    [...]=dicomread(filename, param1, value1, param2, value2, ...)

    [...]=dicomread(info, param1, value1, param2, value2, ...)

    Параметры названия (names) и значения (values) должны быть следующими.

    'Frames', V Функция dicomread считывает только фреймы в вектор V с изображений. V должен быть целым числом, вектором целых чисел или строчкой в формате 'all'. По умолчанию вектор V имеет формат представления данных 'all'.
    'Dictionary', D Функция dicomread использует данные словарного файла, название которого отображено в D. По умолчанию это значение представлено в 'dicom-dict.txt'.
    'Raw', TF Функция dicomread выполняет преобразование значений пикселов в зависимости от значения параметра TF. Если параметр TF равен 1 (по умолчанию), функция dicomread считывает пикселы из изображения и не проводит преобразование их значений. Если значение параметра TF равно 0, то проводятся преобразования с использованием динамических рангов, а цветные изображения конвертируются в цветовое пространство RGB.
    Примечание 1: Поскольку цветовое пространство HSV не отвечает требованиям стандарта DICOM, функция dicomread не может автоматически конвертировать их в RGB.
    Примечание 2: Функция dicomread никогда не проводит преобразований цветовых пространств изображений, содержащих печатные данные.
    Примечание 3: Преобразование значений и цветовых систем не приводит к изменению метаданных.

    Пример 1:

    При использовании функции dicomread для восстановления данных матрицы X и ее палитры map, необходимо сделать так:

    [X, map]=dicomread('US-PAL-8-10x-echo.dcm');

    montage(X, map);

    Пример 2:

    Для получения информации из DICOM–файла функция dicomread использует dicominfo. Отображаются изображения с помощью функции imshow.

    info=dicominfo('CT-MONO2-16-ankle.dcm');

    Y=dicomread(info);

    imshow(Y, []);

     

     

    Наверх

    dicomwrite - запись изображений в DICOM-файл

    Синтаксис:

    dicomwrite(X, filename)

    dicomwrite(X, map, filename)

    dicomwrite(..., param1, value1, param2, value2, ...)

    dicomwrite(..., meta_struct, ...)

    dicomwrite(..., info, ...)

    status=dicomwrite(...)

    Описание:

    Функция dicomwrite(X, filename) записывает бинарное полутоновое или цветное изображение X в файл формата DICOM (Digital Imaging and Communications in Medicine).

    Функция dicomwrite(X, map, filename) записывает индексное изображение X вместе с палитрой map.

    Функция dicomwrite(..., param1, value1, param2, value2, ...) определяет дополнительные метаданные для записи DICOM–файлов. С помощью параметров (param1, param2 и т.д.) записываются другие атрибуты и опции DICOM–файлa. Каждый атрибут или опция соответствует некоторому значению (value1, value2 и т.д.).

    Полный список названий атрибутов DICOM–файла содержится в словарном файле, который включен в Image Processing Toolbox.

    В таблице приведен список опций, которые поддерживаются функцией dicomwrite.

    Название опции Описание Значение
    'Endian' Определяет байтовый порядок для файла. 'Little' [по умолчанию]
    'Big'
    'VR' Определяет двухзнаковый код представления значений, записанных в файле ('explicit') или возможных данных со словаря ('implicit'). 'Implicit' [по умолчанию]
    'Explicit'
    Примечание: Когда значение опции 'Endian' определено как 'Big', то опция 'VR' может принимать только значение 'Explicit'.
    'CompressionMode' Определяет метод сжатия для хранения изображений. 'None' [по умолчанию]
    'JPEG lossy' (с потерями информации)
    'RLE'
    'TransferSyntax' Определяет синтаксис преобразований DICOM–файлов.
    Примечание:
    Когда определена опция 'TransferSyntax', функция dicomwrite игнорирует другие три опции, если они были определены.
    Синтаксис преобразований DICOM–файла определяет по умолчанию значения для опций 'Endian', 'VR' и 'CompressionMode'.

    Функция dicomwrite(..., meta_struct, ...) определяет метаданные в структуре meta_struct. Название структурных областей должно быть отображено в названиях атрибутов или опций DICOM–файла. Значения областей являются значениями атрибутов или опций.

    Функция dicomwrite(..., info, ...) определяет метаданные в структуре info, которая генерирует функцию dicominfo. Для более детальной информации о структуре см. функцию dicominfo.

    Функция status=dicomwrite(...) возвращает перечень трех типов метаданных, которые содержатся в dicomwrite. Этот синтаксис используется, когда определена структура info, создающая dicominfo в функции dicomwrite. В структуре info может быть определено много полей. Когда метаданные не определены, dicomwrite возвращает пустую матрицу ([]).

    При использовании dicomwrite структура содержит три поля.

    Поле Описание
    'dicominfo_fields' Массив содержит названия метаданных, которые могут быть использованы при записи.
    'wrong_IOD' Массив содержит названия атрибутов (IOD=Information Object Definition).
    'not_modifiable' Массив содержит названия полей метаданных, которые не изменяются при использовании.

    Пример:

    Этот пример демонстрирует использование dicominfo для восстановления информации о содержании простого DICOM–файла, который содержится в Image Processing Toolbox. Пример использует dicomread для считывания данных из файла и записи данных в новый DICOM–файл, содержащий метаданные исходного файла.

    info=dicominfo('CT-MONO2-16-ankle.dcm');

    Y=dicomread(info);

    status=dicomwrite(Y, 'my_dicomfile.dcm', info);

    status=

    dicominfo_fields: {12x1 cell}

    wrong_IOD: {21x1 cell}

    not_modifiable: {23x1 cell}

    status.dicominfo_fields

    ans=

    'BitDepth'

    'ColorType'

    'FileModDate'

    'FileSize'

    'FileStruct'

    'Filename'

    'Format'

    'FormatVersion'

    'Height'

    'SelectedFrames'

    'StartOfPixelData'

    'Width'

     

     

    Наверх

    dicomuid - Генерация идентификатора для DICOM-файлов 

    Синтаксис:

    UID=dicomuid

    Описание:

     

    Функция UID=dicomuid создает строку UID, содержащую новый идентификатор для DICOM-файлов.

    Вызов функции dicomuid формирует уникальный идентификатор. Следующий вызов функции dicomuid всегда приводит к формированию нового значения.

     

     

    Наверх

    imview - Отображение изображений в Image Viewer 

    Синтаксис:

    imview(I)imview(RGB)imview(X, map)imview(I, range)imview(filename)imview(..., 'InitialMagnification', initial_mag)h=imview(...)imview close all

    Описание:

     

    Функция imview(I) отображает полутоновое изображение I.

    Функция imview(RGB) отображает RGB-изображение (true-color).

     

    Функция imview(X, map) отображает индексное изображение X с палитрой map.

    Функция imview(I, range) отображает полутоновое изображение I, где параметр range является двухэлементным вектором [LOW HIGH], который контролирует диапазон (полутоновый) яркостей в отображаемом изображении. Функция imview отображает значение LOW (или другие значения, которые меньше чем LOW) как черное и значение HIGH (или другие значения, которые больше чем HIGH) как белые. Промежуточные значения отображаются различными оттенками серого. Параметр range может быть также пустым ([]), в этом случае функция imview отображает минимальное значение изображения I черным, а максимальное значение - белым. Другими словами, функция imview(I,[]) эквивалентна выражению imview(I, [min(I(:)) max(I(:))]).

     

    Функция imview(filename) отображает изображение, содержащиеся в файле с названием, описанным в filename. Файл должен содержать изображение, которое может быть прочитано функцией imread. Когда файл содержит много изображений, отображается только первое.

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

     

    H=imview(...) возвращает ручное управление средствами просмотра. Функция close(H) закрывает средство просмотра изображений (image viewer).

    Функция imview close закрывает все окна просмотра изображений (image viewers).

     

    Функция imview(..., 'InitialMagnification', initial_mag) отображает изображение, которое описывается параметрами InitialMagnification, контролирующими начальное увеличение для отображения изображений. Параметр initial_mag может принимать одно из следующих значений.

    Значение Описание
    100 Отображается изображение в 100% увеличении; каждый элемент изображения отображается одним пикселем
    'fit' Изображение помещается в окно Image Viewer.

    Требования к исходным данным.Исходное изображение может быть представлено данными в формате logical, uint8, uint16 или double.Пример.Это пример открытия и отображения файла, описанного текстовой строкой:imview('board.tif').Это пример открытия и отображения индексного изображения:[X, map]=imread('trees.tif');imview(X, map)Это пример ввода полутонового изображения в рабочее пространство MATLAB и его отображение:I=imread('cameraman.tif');imview(I)Это пример отображения изображения с описанием диапазона интенсивностей. Эта функция использует также управление Image Viewer:h=imview(I,[0 80]);close(h)Примечание.Управление многооконным Image Viewer.

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

    imview close all

     

    Сделать такую же операцию, которая заключается в закрытии всех отрытых окон Image Viewer, можно с использованием кнопки Close All в Window-меню командного окна MATLAB.

    В отдельных случаях Window-меню можно использовать и для открытия и управления окнами Image Viewer.

     

    Управление памятью.

    Для увеличения объема памяти, которая поступает в распоряжение Image Viewer, создается файл с названием 'java.opts' и помещается в исходную директорию MATLAB. По умолчанию, MATLAB использует память Virtual Machine объемом 64 MB.

     

    Файл java.opts может использовать объем памяти до 128 MB:

    -Xmx128m

     

    С целью предупреждения перегрузок, опция -Xmx option устанавливается на уровне, не превышающем 66% от оперативной памяти.

    Система UNIX создает файл java.opts в рабочей директории и заходит в эту директорию перед запуском MATLAB.

     

    В системе Windows:


    1. Создается файл java.opts в директории, откуда будет запущен MATLAB. 

    2. Создается ярлык MATLAB. 

    3. Нажатие правой клавиши приводит к выбору окна Properties (Свойства).

    4. В окне Properties описано название директории, в которой создан файл java.opts; эта директория является стартовой для MATLAB.

  • MATLAB как и Image Viewer использует память Java Virtual Machine. Для просмотра больших изображений запускают MATLAB, а далее используют Image Viewer.

     

     

    Наверх

    imgcf - получение последних отображаемых изображений

    Синтаксис:

    hfig = imgcf

    Описание:

    Функция hfig = imgcf возвращает последние отображаемые изображения. Изображения визуализируются в окне figure.

    Если окно figure не было открыто, то функция imgcf создает новое окно figure.

    Примечание:

    Функция imgcf может быть полезна для получения окна Image Tool figure.

    Пример:

    imtool rice.png

    cmap = copper(256);

    set(imgcf,'Colormap',cmap)

     

     

    Наверх

    imgca - получение недавно обрабатываемых данных

    Синтаксис:

    hax = imgca

    hax = imgca(hfig)

    Описание:

    Функция hax = imgca возвращает недавно обрабатываемые данные, которые связаны с изображением. Эти данные могут представлять собой координатные оси в виде окна отображения или окна просмотра Image Tool window.

    Когда окно просмотра не содержит этих данных, то функция imgca создает новые координатные оси.

    Функция hax = imgca(hfig) возвращает координатные оси, которые содержат изображение в описанном окне просмотра.

    Примечание:

    Функция imgca может использоваться для получения осей в Image Tool.

    Пример:

    Считаем изображение из файла coins.png. Вычислим некоторые его характеристики и представим результаты с помощью функций imtool и imgca.

    I = imread('coins.png');

    figure, imshow(I)

    bw = im2bw(I, graythresh(getimage));

    figure, imshow(bw)

    bw2 = imfill(bw,'holes');

    L = bwlabel(bw2);

    s = regionprops(L, 'centroid');

    centroids = cat(1, s.Centroid);

    Отобразим полученные результаты.

    imtool(I)

    hold(imgca,'on')

    plot(imgca,centroids(:,1), centroids(:,2), 'r*')

    hold(imgca,'off')

     

     

    Наверх

    imgetfile - отображение диалогового окна открытия изображений

    Синтаксис:

    [filename, user_canceled] = imgetfile

    Описание:

    Функция [filename, user_canceled] = imgetfile отображает диалоговое окно открытия изображений, а также указывает полный путь к выбранному файлу. Если пользователь надавит кнопку Cancel, параметр user_canceled будет иметь значение TRUE. В противном случае, параметр user_canceled равен FALSE.

    Диалоговое окно открытия изображения является прообразом интерактивной командной строки системы MATLAB. В imformats перечислены все типы файлов диалогового окна, включая DICOM.

     

     

    Наверх

    imhandles - установка ручного управления изображениями

    Синтаксис:

    himage = imhandles(H)

    Описание:

    Функция himage = imhandles(H) через использование параметра h в качестве исходного, возвращает все предыдущие изображения. В свою очередь, h представляет собой массив параметров, описывающих оси, окно просмотра и другие установки.

    Результат himage представляется в виде массива.

    Примечание:

    Функция imhandles может выдавать ошибку, если объекты изображения в himage не имеют предыдущей версии.

    Примеры:

    Пример демонстрирует ручное управление объектами изображения в данном окне отображения.

    figure, imshow('moon.tif');

    himage = imhandles(gcf)

     

    В этом примере показано отображение двух изображений в окне просмотра с использованием функции imhandles.

    subplot(1,2,1), imshow('autumn.tif');

    subplot(1,2,2), imshow('glass.png');

    himages = imhandles(gca)

     

     

    Наверх

    dicomanon - анонимность DICOM-файла

    Синтаксис:

    dicomanon(file_in, file_out)

    dicomanon(...,'keep',FIELDS)

    dicomanon(...,'update',ATTRS)

    Описание:

    Функция dicomanon(file_in,file_out) перемещает конфиденциальную медицинскую информацию из DICOM-файла file_in и создает новый файл file_out с модифицируемыми значениями. Данные изображения и другие атрибуты не модифицируются.

    Функция dicomanon(...,'keep',FIELDS) модифицирует все конфиденциальные данные, за исключением данных, перечисленных в FIELDS и представленных в виде массива с соответствующими названиями полей. Такой синтаксис удобен для хранения метаданных, которые могут идентифицировать пациента при диагностике (например, PatientAge, PatientSex и т.д.).

    Примечание:

    Хранение определенных полей может носить конфиденциальный характер.

    Функция dicomanon(...,'update',ATTRS) модифицирует и частично обновляет конфиденциальные данные. Параметр ATTRS представляет собой структуру, названия полей которой совпадают с соответствующими атрибутами. Значения структур являются значениями атрибутов. Используется синтаксис иерархического хранения или специальных названий для более общих свойств.

    Для более детальной информации о полях, которые подлежат модификации или переносу, см. DICOM Supplement 55 на сайте   http://medical.nema.org/.

    Примеры:

    Перенос всех конфиденциальных метаданных из файла.

    dicomanon('patient.dcm', 'anonymized.dcm')

     

    Создание учебного файла.

    dicomanon('tumor.dcm', 'tumor_anon.dcm', ...

              'keep', {'PatientAge', 'PatientSex', 'StudyDescription'})

    Анонимность серии изображений, которые хранятся иерархично.

    values.StudyInstanceUID = dicomuid;

    values.SeriesInstanceseriesUID = dicomuid;

    d = dir('*.dcm');

    for p = 1:numel(d)

        dicomanon(d(p).name, sprintf('anon%d.dcm', p), ...

            'update', values)

    end

     

     

    Наверх

    dicomdict - получение или установка активного словаря DICOM-данных

    Синтаксис:

    dicomdict('set', dictionary)

    dictionary = dicomdict('get')

    dictionary = dicomdict('factory')

    Описание:

    Функция dicomdict('set',dictionary) устанавливает словарь DICOM-данных для запоминания значений в виде строки, содержащей название файла. DICOM-зависимые функции, в большинстве случаев, используют словарь по умолчанию.

    Функция dictionary = dicomdict('get') возвращает строку, содержащую название файла с запоминаемыми данными.

    Функция dictionary = dicomdict('factory') восстанавливает данные DICOM-словаря, приводя первоначальное значение.

    Примечание:

    По умолчанию данные словаря хранятся в виде MAT-файла, dicom-dict.mat. Приложение также включает текстовую версию данных словаря dicom-dict.txt. Если есть необходимость создания своего DICOM-словаря, необходимо открыть файл dicom-dict.txt в текстовом редакторе, модифицировать его, а потом запомнить под другим именем.

    Примеры:

    dictionary = dicomdict('get')

     

    dictionary =

    dicom-dict.mat

     

     

    Наверх

    impositionrect - создание передвигаемого прямоугольника

    Синтаксис:

    H = impositionrect(hparent,position)

    Описание:

    Функция H = impositionrect(hparent,position) создает прямоугольник на объекте с описанием hparent. Возвращаемая функция H управляет прямоугольником, который представлен объектом hggroup. Прямоугольник описывается четырехэлементным вектором [XMIN YMIN WIDTH HEIGHT].

    Все измерения описываются свойством object. По умолчанию функция impositionrect использует вектор значений [0 0 1 1].

    Примечание:

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

    С прямоугольником связано контекстное меню, которое можно использовать для копирования в буфер, изменения цвета прямоугольника на экране монитора и др.

    Синтаксис функции API:

    Прямоугольник связан с функцией API, которая дает возможность управлять им. Для получения функции API используется функция iptgetapi.

    API = iptgetapi(H)

     

    В приведенном ниже списке описаны функции и их роль при размещении прямоугольника.

    Функции Описание
    setPosition Установка прямоугольника на новую позицию.
    api.setPosition(new_position),
    где параметр new_position представляет четырехэлементный вектор, описывающий новое расположение.
    getPosition Возвращает информацию о текущем расположении прямоугольника.
    position = api.getPosition()

    Расположение описывается четырехэлементным вектором.
    delete Удаляет информацию о расположении прямоугольника, связанную с функцией API.
    api.delete()
    setColor Установка цвета, который используется при прорисовке месторасположения прямоугольника.
    api.setColor(new_color),

    где параметр new_color представляет собой трехэлементный вектор, описывающий значения RGB изображения.
    addNewPositionCallback Добавляет функцию управления списком функций новых позиций.
    id = api.addNewPositionCallback(fun)
    При изменении позиции прямоугольника, каждая функция в прямоугольнике называется соответственно принятому синтаксису:
    fun(position)

    Возвращаемое значение id используется только с NewPositionCallback.
    removeNewPositionCallback Возвращает соответствующую функцию из списка новых позиций api.removeNewPositionCallback(id), где параметр id представляет собой идентификатор, возвращаемый api.addNewPositionCallback
    setDragConstraintCallback Установка функции принудительного передвижения описывается параметром fcn.
    api.setDragConstraintCallback(fcn)
    При каждом изменении расположения прямоугольника с помощью мышки, функция принудительного передвижения использует следующий синтаксис:
    constrained_position = fcn(new_position),

    где параметр new_position представляется в виде четырехэлементного вектора. Это позволяет пользователю контролировать размещение прямоугольника при передвижении.

    Пример:

    Отобразим в командном окне размещение прямоугольника при передвижении.

    close all, plot(1:10)

    h = impositionrect(gca, [4 4 2 2]);

    api = iptgetapi(h);

    api.addNewPositionCallback(@(p) disp(p));

    Заставим прямоугольник передвигаться только вверх и вниз.

    close all, plot(1:10)

    h = impositionrect(gca, [4 4 2 2]);

    api = getappdata(h, 'API');

    api.setDragConstraintCallback(@(p) [4 p(2:4)]);

     

    Опишем цвет прямоугольника.

    close all, plot(1:10)

    h = impositionrect(gca, [4 4 2 2]);

    api = iptgetapi(h, 'API');

    api.setColor([1 0 0]);

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

    close all, imshow cameraman.tif

    h = impositionrect(gca, [100 100 10 10]);

     

     

    Наверх

    imscrollpanel - панель прокрутки для интерактивного управления изображениями

    Синтаксис:

    hpanel = imscrollpanel(hparent, himage)

    Описание:

    Функция hpanel = imscrollpanel(hparent, himage) создает панель прокрутки, содержащую объекты изображения (для навигации). Параметр himage управляет этими объектами. Параметр hparent управляет окном отображения, которое содержит новую панель прокрутки. Параметр hpanel управляет панелью прокрутки, которая является объектом uipanel.

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

    Функция imscrollpanel изменяет некоторые объекты изображения. Взамен привычной иерархии объектов figure->axes->image, функция imscrollpanel вставляет некоторые объекты uipanel и uicontrol между окном просмотра и осями объекта.

    API функции.

    Панель прокрутки содержит структуру управления функциями, названную API. С помощью этой структуры можно манипулировать панелью прокрутки. Для получения этой структуры используется функция iptgetapi. Приведем пример.

    api = iptgetapi(hpanel)

     

    В таблице приведен список API функций панели прокрутки в порядке их появления в этой структуре.

    API функции панели прокрутки Описание
    setMagnification Установка увеличения.
    mag = api.getMagnification(new_mag),
    где параметр new_mag представляет собой коэффициент увеличения.
    getMagnification Возвращает текущий коэффициент увеличения.
    mag = api.getMagnification()

    Умножая параметр mag на 100 получим процентное представление. Например, если mag=2, тогда это эквивалентно 200% увеличению.
    setMagnificationAndCenter При изменении увеличения точки cx, cy будут показаны в центре панели прокрутки. Эта операция эквивалентна симуляции увеличения и смещению центра.
    api.setMagnificationAndCenter(mag,cx,cy)
    findFitMag Возвращает коэффициент увеличения, который устанавливается для данного изображения в панели прокрутки.
    mag = api.findFitMag()

    setVisibleLocation Перемещает изображение объекта в точку описанного расположения.
    api.setVisibleLocation(xmin,ymin) 
    api.setVisibleLocation([xmin ymin])
    getVisibleLocation Возвращает описание текущего расположения объектов.
    loc = api.getVisibleLocation(),

    где параметр loc представляется вектором [xmin ymin].
    addNewMagnificationCallback Возвращает текущую видимую часть изображения.
    r = api.getVisibleImageRect(),
    где параметр r описывает прямоугольник [xmin ymin width height].
    removeNewMagnificationCallback Добавляет функцию управления fcn в список новых увеличений.
    id = api.addNewMagnificationCallback(fcn)

    При каждом изменении увеличения панели прокрутки, каждая функция в списке именуется в соответствии с синтаксисом:
    fcn(mag),
    где параметр mag представляет собой скаляр коэффициентов увеличения. Возвращаемое значение id используется в removeNewMagnificationCallback.
    addNewLocationCallback Перемещение соответствующей функции из списка новых увеличений.
    api.removeNewMagnificationCallback(id),

    где параметр id представляет собой идентификатор, возвращаемый addNewMagnificationCallback.
    removeNewLocationCallback Дополняет функцию управления fcn в список функций новых размещений.
    id = api.addNewLocationCallback(fcn)
    При каждом изменении панели прокрутки, каждая функция в списке именуется в соответствии с синтаксисом:
    fcn(loc),

    где параметр loc представляется в виде [xmin ymin].
    getVisibleImageRect Перемещает соответствующую функцию из списка новых месторасположений.
    pi.removeNewLocationCallback(id),
    где параметр id представляет собой идентификатор, возвращаемый функцией addNewLocationCallback.

    Пример:

    В этом примере показано создание панели прокрутки с функцией увеличения.

    1.Создание панели прокрутки

    hFig = figure('Toolbar','none',...

                  'Menubar','none');

    hIm = imshow('saturn.png');

    hSP = imscrollpanel(hFig,hIm);

    set(hSP,'Units','normalized',...

            'Position',[0 .1 1 .9])

     

    2.Добавление блока увеличения и средств общего просмотра.

    hMagBox = immagbox(hFig,hIm); 

    pos = get(hMagBox,'Position');

    set(hMagBox,'Position',[0 0 pos(3) pos(4)])

    imoverview(hIm) 

    3.Управление панелью прокрутки API для контроля просмотра.

    api = iptgetapi(hSP);

     

    4.Получение данных о текущем увеличении и расположении.

    mag = api.getMagnification() 

    r = api.getVisibleImageRect()

    5.Просмотр верхнего левого угла изображения.

    api.setVisibleLocation(0.5,0.5)

     

    6.Изменение значения увеличения.

    api.setMagnification(api.findFitMag())  

    7.Увеличение на 1600%.

    api.setMagnificationAndCenter(16,306,800)

     

     

    Наверх

    analyze75info - считывание метаданных из установленного заголовка файла данных Analyze 7.5

    Синтаксис:

    info = analyze75info(filename)

    info = analyze75info(filename,'ByteOrder', endian)

    Описание:

    Функция info = analyze75info(filename) считывает заголовок файла filename Analyze 7.5. Функция возвращает параметр info, поля структуры которой содержат информацию об установленных данных.

    Analyze 7.5 является продуктом, который реализует визуализацию и анализ 3-мерных биомедицинских изображений. Он был разработан группой по обработке биомедицинских изображений клиники Майо. Данные в Analyze 7.5 состоят фактически из двух файлов - файла заголовка и файла изображения. Файлы имеют одинаковые названия, но различные расширения. Файл заголовка имеет расширение .hdr и файл изображения имеет расширение .img. Для получения более подробной информации о формате представления метаданных в Analyze 7.5 см. сайт   http://www.mayo.edu/bir/PDF/ANALYZE75.pdf.

    Функция info = analyze75info(filename,'ByteOrder', endian) считывает заголовок файла Analyze 7.5, используя битовый порядок, описанный через параметр endian, который может принимать следующие значения:

    Значение Описание
    'ieee-le' Прямой порядок байтов (формат хранения и передачи двоичных данных, при котором сначала передается младший (наименее значимый) бит (байт)).
    'ieee-be' Обратный порядок байтов (формат хранения и передачи двоичных данных, при котором сначала передается старший (наиболее значимый) бит (байт)).

    Примеры:

    Считаем заголовок файла Analyze 7.5. Файл, который используется в примере, может быть получен из http://www.radiology.uiowa.edu/downloads/.

    info = analyze75info('CT_HAND.hdr');

     

    Опишем байтовый порядок установленных данных.

    info = analyze75info('CT_HAND', 'ByteOrder', 'ieee-be');

     

     

    Наверх

    analyze75read - считывание данных изображения из Analyze 7.5

    Синтаксис:

    X = analyze75read(filename)

    X = analyze75read(info)

    Описание:

    Функция X = analyze75read(filename) считывает данные изображения из Analyze 7.5 файла filename. Функция возвращает данные изображения в виде X. Для однофреймовых полутоновых изображений X представляет собой массив с размерностью mxn. analyze75read использует для X тип данных, который установлен в файле заголовка.

    Analyze 7.5 представляет собой продукт, который предназначен для визуализации и анализа трехмерных биомедицинских изображений и был разработан группой по обработке биомедицинских изображений клиники Майо. Данные в Analyze 7.5 состоят фактически из двух файлов - файла заголовка и файла изображения. Файлы имеют одинаковые названия, но различные расширения. Файл заголовка имеет расширение .hdr и файл изображения имеет расширение .img. Для получения более подробной информации о формате представления метаданных в Analyze 7.5 см. сайт   http://www.mayo.edu/bir/PDF/ANALYZE75.pdf.

    Функция X = analyze75read(info) считывает данные изображения из файла, который описан параметром info.

    Примечание:

    Функция analyze75read возвращает данные в виде рентгенографической ориентации, по умолчанию используя формат Analyze 7.5.

    Примеры:

    Пример 1:

    Считаем данные изображения из Analyze 7.5 файла изображения. Файл, который используется в примере, можно получить из страницы   http://www.radiology.uiowa.edu/downloads/.

    X = analyze75read('CT_HAND');

     

    Поскольку формат Analyze 7.5 имеет радиологическую ориентацию, для корректного отображения в MATLAB изображение нужно перевернуть.

    X = flipdim(X,1);

    Выбор фреймов с 51 по 56 и использование функции reshape при создании массива для их монтажа.

    Y = reshape(X(:,:,51:56),[size(X,1) size(X,2) 1 6]);

    montage(Y);

     

    Пример 2:

    Получение данных из метафайла, содержащего файл заголовка, с помощью функции analyze75info.

    info = analyze75info('CT_HAND.hdr');

    X = analyze75read(info);

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

    Данные X должны быть представлены в виде массива в формате logical, uint8, int16, int32, single или double. Составные или данные типа RGB не поддерживаются.

     

     

    Наверх

    im2bw - бинаризация отсечением по порогу яркости

    Синтаксис:

    BW=im2bw(S, threshold)

    BW=im2bw(X, map, threshold)

    Описание:

    Группа функций imbw создает бинарное изображение, используя отсечение по порогу яркости. Для этой цели полноцветные и палитровые изображения конвертируются в полутоновые. Пикселы результирующего бинарного изображения BW принимают значения 0 (черный цвет), если яркость соответствующих пикселов исходного изображения меньше порога threshold, и значения 1 (белый цвет), если яркость соответствующих пикселов исходного изображения больше либо равна threshold. Порог threshold должен задаваться в диапазоне [0, 1]. Часто данную операцию называют бинаризацией по порогу.

    Функция BW=im2bw(S, threshold) используется для преобразования полутонового или полноцветного изображения S в бинарное BW.

    Функция BW=im2bw(X, map, threshold) используется для преобразования палитрового изображения X с палитрой map в бинарное BW.

    Исходное изображение может иметь формат представления данных double или uint8. Результирующее изображение имеет формат uint8.

    Пример.

    Рассмотрим пример выделения на изображении черных круглых объектов на полутоновом изображении (рис. 1а). Если threshold установить равным 0.5, то образуется бинарное изображение BW, показанное на рис. 1б. Далее на этом изображении можно, например, подсчитать количество объектов интереса с помощью функции bwlabel(~BW).

    %Пример демонстрирует бинаризацию полутонового изображения

    %по порогу яркости.

    %Чтение изображения и вывод его на экран.

    I=imread(‘blood.tif’);

    imshow(I);

    %Бинаризация по порогу 0.5

    %и вывод полученного бинарного изображения на экран.

    BW=im2bw(I, 0.5);

    figure, imshow(BW);

     

    a)                                                                   б)

    Рис. 1.

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

     

     

    Наверх

    mat2gray - преобразование матрицы чисел в полутоновое изображение

    Синтаксис:

    I=mat2gray(M, [amin amax])

    I=mat2gray(M)

    Описание:

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

    Функция I=mat2gray(M, [amin amax]) создает из матрицы М полутоновое изображение I, масштабируя значения элементов матрицы М, находящиеся в диапазоне [amin, amax], к диапазону [0, 1] в соответствии со следующим алгоритмом:

    если М(r, с)[amin, amax], то I(r, с)=(М(r, с)-amin)/(amax-amin);

    если М(r, с)<amin, то I(r, с)=0;

    если М(r, с)>amax, то I(r, с)=1.

    Функция I=mat2gray(M) создает из матрицы М полутоновое изображение I, диапазон масштабирования задается минимальным и максимальным значениями в матрице М, т. е. amin=min( М(:)), amax=max(М(:)).

    Исходная матрица должна иметь формат double. Результирующее изображение также будет представлено в формате double.

    Необходимо отметить, что в результате применения некоторых функций обработки к полутоновым или полноцветным изображениям значения пикселов результирующего изображения выходят за пределы диапазона [0, 1]. В этом случае может потребоваться преобразовать результат с помощью функции mat2gray.

     

     

    Наверх

    rgb2gray - преобразование полноцветного изображения в полутоновое

    Синтаксис:

    I=rgb2gray(RGB) 

    newmap=rgb2gray(map)

    Описание:

    Функция I=rgb2gray(RGB) создает полутоновое изображение I, преобразуя R-, G-, В-составляющие пикселов полноцветного изображения в соответствующие им значение яркости.

    Функция newmap=rgb2gray(map) создает палитру newmap, состоящую из значений яркости (градаций серого), полученных преобразованием R-, G-, B-составляющих цветов исходной палитры mар.

    Яркость полагают равной Y-составляющей цветовой системы YІQ. Для преобразования в цветовую систему YIQ функция rgb2gray вызывает функцию rgb2ntsc.

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

     

     

    Наверх

    ind2gray - преобразование палитрового изображения в полутоновое

    Синтаксис:

    I=ind2gray(X, map)

    Описание:

    Функция ind2gray создает полутоновое изображение I, преобразуя R-, G-, В-составляющие из палитры map, соответствующие индексам палитрового изображения X, в значения яркости.

    Яркость полагают равной Y-составляющей цветовой системы YIQ. Для преобразования в цветовую систему YIQ внутри функции rgb2gray используется функция rgb2ntsc.

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

     

     

    Наверх

    gray2ind - преобразование полутонового изображения в палитровое

    Синтаксис:

    [X, map]=gray2ind(I, n)

    Описание:

    Функция gray2ind создает палитровое изображение Х с палитрой mар, преобразуя полутоновое изображение I. Палитра mар содержит n градаций серого цвета равномерно распределенных в диапазоне [0, 1]. По умолчанию значение n равно 64.

    Для создания палитры внутри функции gray2ind вызывается функция gray(n).

    Если n меньше либо равно 256, то результирующее палитровое изображение X имеет формат представления данных uint8. В противном случае Х имеет формат double.

     

     

    Наверх

    grayslice - преобразование полутонового изображения в палитровое отсечением по нескольким порогам

    Синтаксис:

    Х=grayslice(l, n)

    Х=grayslice(l, v)

    Описание:

    Функция grayslice создает палитровое изображение Х из полутонового I, используя отсечение по нескольким порогам яркости Tl, T2, ..., Tk-l. В результате преобразования получается только матрица индексов X, но не формируется палитра. Для показа получившегося палитрового изображения можно воспользоваться функцией imshow(X, map), где map - любая палитра с размером, большим либо равным k.

    Функция Х=grayslice(I, n) устанавливает пороги равными: Tl=1/n, T2=2/n, ..., Tk-1=(n-1)/n, где n - скалярное число, большее 1. При этом количество цветов результирующего изображения k = n+1.

    Функция Х=grayslice(I, v) устанавливает пороги равными Tl=v(l). T2=v(2), ..., Tk-1=v(length(v)), где v - вектор. При этом количество цветов результирующего изображения k на единицу превышает количество элементов вектора v: k=length(v)+1.

    Данные исходного изображения могут быть представлены в формате uint8, тем не менее пороги должны иметь значения в диапазоне от 0 до 1.

    Матрица индексов результирующего изображения Х формируется в соответствии со следующими правилами:

    если k больше 256, то результирующее палитровое изображение Х имеет формат double и выполняются соотношения

    Х(r, с)=1, если I(г, с)<Т1;

    Х(r, с)=2, если Tl < I(r, с)<T2;

    …;

    X(r,c)=k, ecли Tk-1<I(r,c);

    если k меньше либо равно 256, то результирующее палитровое изображение Х имеет формат uint8 и выполняются соотношения

    Х(r, с)=0,если I(r,с)<Т1;

    Х(r, с)=1, если Tl<1(r, с)<T2;

    …;

    Х(r, с) = k-1, если Tk-1<I(r, с).

    Пример.

    Используем функцию grayslice для окрашивания полутонового изображения псевдоцветами. Рассмотрим изображение на рис. 1, а. Результирующее изображение Х с палитрой mар показано на рис. 1, б.

    %examp.m

    %Пример демонстрирует окрашивание полутонового изображения

    %псевдоцветами.

    %Создание палитры их трех цветов map=zeros(3,3);

    %Темно-синий цвет

    mар(1,1)=0; mар(1, 2)=0; mар(1, 3)=0.5;

    % Зеленый цвет.

    map(2,1)=0; map(2, 2) = 1; map(2, 3)=0;

    % Белый цвет.

    map(3,1)=1; map(3, 2)=1; map(3, 3)=1;

    % Чтение исходного изображения. I=imread('rs.tif');

    % Окрашивание псевдоцветами.

    X=grayslice(l,[30 180]);

    % Вывод изображения в псевдоцветах на экран.

    imshow(X, map);

     

    Рис. 1.

     

     

    Наверх

    ind2rgb -преобразование палитрового изображения в полноценное

    Синтаксис:

    RGB=ind2rgb(X, map)

    Описание:

    Функция ind2rgb создает полноцветное изображение RGB из палитрового изображения Х с палитрой mар.

    Исходное изображение Х может иметь формат uint8 или double, результирующее изображение RGB всегда имеет формат double.

     

     

    Наверх

    dither - диффузионное псевдосмешение цветов

    Синтаксис:

    Х=dither(RGB, map, Qm, Qe)

    BW=dither(I)

    Описание:

    Функция Х=dither(RGB, map, Qm, Qe) создает палитровое изображение X с палитрой map из полноцветного изображения RGB, используя алгоритм Флойда-Стенберга диффузионного псевдосмешения цветов. Параметры Qm и Qe определяют скорость и точность работы алгоритма. Qm задает число бит для представления каждой из цветовых составляющих во вспомогательной таблице преобразования цветов, а Qe определяет точность вычисления ошибки - разницы между действительным значением цвета пиксела и ближайшим цветом в палитре. Qm может изменяться в диапазоне [1, 10] и должно быть меньше Qe. Qe может изменяться в диапазоне [1,31]. Если Qe < Qm, то псевдосмешения цветов не происходит. При вызове функции параметры Qm, Qe можно не указывать. По умолчанию Qm=5, Qe=8.

    Если размер палитры mар меньше либо равен 256, то результирующее изображение Х имеет формат uint8, в противном случае оно имеет формат double.

    Функция BW=dither(I) создает бинарное изображение BW из полутонового I, используя диффузионное псевдосмешение цветов. Результирующее изображение имеет формат uint8. Алгоритм:

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

    При реализации функции dither используется хорошо известный алгоритм Флойда-Стенберга [1]. В этом алгоритме пиксел изображения заменяет свой цвет на ближайший в евклидовой метрике из имеющихся в палитре и вычисляет ошибки цветности для каждой из цветовых составляющих, вычитая значения RGB-цвета палитры и значения RGB-цвета исходного изображения. Для полутоновых изображений вычисляется ошибка яркости. Затем ошибки распространяются на соседние пикселы путем добавления некоторой доли ошибки к значениям соответствующих составляющих и происходит так называемая диффузия ошибки. По этой причине алгоритмы подобного типа еще называют рассеиванием или распределением ошибки (error diffusion). Ошибки распространяются на правые и нижние соседние пикселы в следующих соотношениях, определяемых матрицей

    ,

    где X обозначает пиксел, ошибка которого распространяется. Алгоритм применяется рекурсивно ко всем пикселам изображения при обходе матрицы изображения слева направо и сверху вниз.

    Использование псевдосмешения цветов позволяет улучшить цветовое восприятие за счет ухудшения разрешения и повышения уровня ВЧ шумов.

     

     

    Наверх

    rgb2ind - преобразование полноцветного изображения в палитровое

    Синтаксис:

    [X, map]=rgb2ind(RGB)

    [X, тар]=rgb2ind(RGB, n, dither_option)

    [X, map]=rgb2ind(RGB, tol, dither_option)

    X=rgb2ind(RGB, map, dither_option)

    Описание:

    Функция rgb2ind создает палитровое изображение из полноцветного, используя один из четырех способов: запись в виде палитрового изображения без уменьшения количества цветов, установка равномерной палитры, оптимальный подбор палитры, использование некоторой предопределенной палитры. Три последних способа преобразования могут также использовать диффузионное псевдосмешение цветов (dithering) с помощью алгоритма Флойда-Стенберга [1].

    [X, map)=rgb2ind(RGB) создает палитровое изображение X из полноцветного RGB, составляя палитру mар из всех уникальных цветов, представленных в исходном изображении. Результирующая палитра mар может быть очень большого размера.

    [X, mар]=rgb2ind(RGB, tol, dither_option), где tol - число в диапазоне (0,1), создает палитровое изображение Х из полноцветного RGB, устанавливая равномерную палитру mар из цветов, которые в диапазоне [0, 1] берутся с шагом tol по каждой из цветовых составляющих R, G, В. Цвета исходного изображения заменяются ближайшими из установленной палитры mар. Максимально возможное число цветов в палитре mар составляет (floor(l/tol) + 1)^3. Действительное число цветов в палитре может оказаться меньше максимального, так как из палитры удаляются все цвета, которые отсутствуют в изображении.

    [X, map]=rgb2md( RGB, n, dither_option ), где n - число, большее 1, создает палитровое изображение Х из полноцветного RGB, используя для подбора палитры mар из n цветов один из способов оптимального подбора палитры. Цвета исходного изображения заменяются ближайшими из подобранной палитры mар. Действительное число цветов в палитре может оказаться меньше n, так как из палитры удаляются все цвета, которые отсутствуют в изображении.

    Х=rgb2ind(RGB, map, dither_option) создает палитровое изображение Х из полноцветного RGB. Цвета исходного изображения заменяются ближайшими из заданной палитры mар.

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

    'dither' - использовать диффузионное псевдосмешение цветов;

    'nodither' - не использовать диффузионное псевдосмешение цветов.

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

    Для всех способов преобразования, если размер палитры mар меньше либо равен 256, результирующее изображение Х имеет формат uint8, в противном случае оно имеет формат double.

    Пример.

    Рассмотрим пример преобразования полноцветного изображения (рис. 1) в палитровое, содержащее только 16 цветов.

    %.examp.m

    % Пример демонстрирует преобразование

    % полноцветного изображения в палитровое из 16 цветов.

    % Чтение исходного полноцветного изображения

    % и вывод его на экран (рис. 1а).

    RGB=imread( 'f2.bmp');

    imshow(RGB);

    %Преобразование в палитровое изображение

    %с равномерной палитрой и без псевдосмешения цветов (рис. 1б).

    [Х1 map1]=rgb2ind( RGB, 0.65, 'nodither');

    %Вывод получившегося палитрового изображения на экран.

    figure, imshow( Х1, map1 );

    %Преобразование в палитровое изображение

    %с оптимальной палитрой и с псевдосмешением цветов.

    [Х2 map2]=rgb2ind( RGB, 16 );

    % Вывод получившегося палитрового изображения на экран (рис. 1в).

    1a.gif (10727 bytes) 1b.gif (10618 bytes) 1c.gif (10906 bytes)

    Рис. 1.

     

     

    Наверх

    imapprox - уменьшение количества цветов палитрового изображения

    Синтаксис:

    [Xd, newmap]=imapprox(Xs, map, tol, dither_option)

    [Xd, newmap]=imapprox(Xs, map, n, dither_option)

    Xd=imapprox(Xs, map, newmap, dither_option)

    Описание:

    Функция imapprox создает новое палитровое изображение Xd из исходного палитрового Xs, уменьшая количество используемых цветов.

    Функция [Xd, newmap] = imapprox(Xs, map, to], dither_option ), где tol - число в диапазоне (0, 1), создает палитровое изображение Xd с палитрой newmap из палитрового Хs с палитрой map, устанавливая равномерную палитру newmap из цветов, которые в диапазоне [0, 1] берутся с шагом tol по каждой из цветовых составляющих R, G, В. Цвета исходного изображения заменяются ближайшими из установленной палитры newmap. Максимально возможное число цветов в палитре newmap составляет (floor(l/tol) + 1)^3. Действительное число цветов в палитре может оказаться меньше максимального, так как из палитры удаляются все цвета, которые отсутствуют в изображении.

    Функция [Xd, newmap] = imapprox(Xs, map, n, dither_option), где n - число, большее 1, создает палитровое изображение Xd с палитрой newmap из палитрового Xs с палитрой map, используя для подбора палитры newmap из n цветов один из способов оптимального подбора палитры. Цвета исходного изображения заменяются ближайшими из подобранной палитры newmap. Действительное число цветов в палитре может оказаться меньше n, так как из палитры удаляются все цвета, которые отсутствуют в изображении.

    Функция Xd = imapprox(Xs, map, newmap, dither_option) создает палитровое изображение Xd с палитрой newmap из палитрового Xs с палитрой map. Цвета исходного изображения заменяются ближайшими из заданной палитры newmap.

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

    '’dither’ -использовать диффузионное псевдосмешение цветов;

    ‘nodither’ - не использовать диффузионное псевдосмешение цветов.

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

    Для всех способов преобразования, если размер палитры map меньше либо равен 256, результирующее изображение Xd имеет формат uint8, в противном случае оно имеет формат double.

     

     

    Наверх

    cmunique - поиск палитры минимального размера

    Синтаксис:

    [Xd, newmap]=cmunique(Xs, map)

    [Xd, newmap]=cmunique(RGB)

    [Xd, newmap]=cmunique(l)

    Описание:

    Функция [Xd, newmap]=cmunique(Xs, map) создает новое палитровое изображение Xd с палитрой newmap минимально возможного размера. При этом изображение Xd выглядит точно так же, как исходное палитровое изображение Xs с палитрой map. Уменьшение размера палитры достигается за счет исключения дублирования в палитре одинаковых цветов.

    Функция [Xd, newmap]=cmunique(RGB) создает палитровое изображение Xd с палитрой newmap из полноцветного изображения RGB. Палитра newmap имеет минимально возможный размер, так как каждый из уникальных цветов изображения RGB включен в палитру newmap только 1 раз.

    Функция [Xd, newmap]=cmunique(I) создает палитровое изображение Xd с палитрой newmap из полутонового изображения I. Палитра newmap имеет минимально возможный размер, так как каждый из уникальных уровней яркости из изображения I включен в палитру newmap только 1 раз.

    Для всех функций cmunique, если размер палитры newmap меньше либо равен 256, результирующее изображение Xd имеет формат uint8, в противном случае оно имеет формат double.

     

     

    Наверх

    cmpermute - изменение порядка цветов в палитре

    Синтаксис:

    [Xd, newmap]=cmpermute(Xs, map)

    [Xd, newmap]=cmpemute(Xs, map, index)

    Описание:

    Функция [Xd, newmap]=cmpermute(Xs, map) создает новое палитровое изображение Xd с палитрой newmap, цвета которой совпадают с цветами палитры map, но их порядок случайным образом изменен. Результирующее Xd и исходное Xs изображения выглядят одинаково.

    Функция [Xd, newmap]=cmpemute(Xs, map, index) для определения порядка цветов в новой палитре newmap использует матрицу индексов такую же, как второй параметр функции MATLAB sort.

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

    Пример.

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

    %Пример демонстрирует изменение расположения цветов палитры

    %в порядке возрастания яркости.

    %Чтение исходного полноцветного изображения и вывод его на экран.

    RGB=imread(‘lena.bmp’);

    %Преобразование в палитровое изображение

    %с оптимальной палитрой и псевдосмешением цветов.

    [XS map]=rgb2ind(RGB, 16);

    %Изменение расположения цветов палитры

    %в порядке возрастания яркости.

    ntsc=rgb2ntsc(map);

    [dum, index]=sort(ntsc(:,1));

    [XD, newmap]=cmpermute(XS, map, index);

     

     

    Наверх

    label2rgb - преобразование матрицы меток в RGB-изображение

    Синтаксис:

    RGB=label2rgb(L)RGB=label2rgb(L, map)RGB=label2rgb(L, map, zerocolor)RGB=label2rgb(L, map, zerocolor, order)

    Описание:

    Функция RGB=label2rgb(L) реализует преобразование матрицы меток L, которая, в свою очередь, была получена при использовании функций bwlabel или watershed, в цветное RGB-изображение с целью дальнейшей визуализации отмеченных областей. Функция label2rgb определяет цвет для каждого объекта на основе чисел, которые присвоены соответствующему объекту в матрице меток и в соответствии с диапазоном цветов в цветовой палитре. Функция label2rgb использует цвета из всего цветового диапазона.

     

    Функция RGB=label2rgb(L, map) определяет цветовую палитру map для RGB-изображения. Параметр map должен содержать следующие составляющие:

     

    - палитра с размерностью nx3 ;

    - строка, содержащая название палитры в среде MATLAB (для более детальной информации см. функцию colormap).

    - интерактивное управление функцией палитры.

     

    Когда описание палитры не задано, то по умолчанию это значение равно 'jet'.

     

    Функция RGB=label2rgb(L, map, zerocolor) определяет RGB-цвета элементов изображения, отмеченных 0 (нулями) в исходной матрице меток L. Когда этот элемент отмечен нулем в матрице меток, то он описывается с помощью трех цветов RGB или строки, значения которой перечислены в таблице.

    Значение Цвет r
    'b' Синий
    'c' Голубой
    'g' Зеленый
    'k' Черный
    'm' Яркокрасный
    'r' Красный
    'w' Белый
    'y' Желтый

    В случае, когда элемент изображения не отмечен в матрице меток, то он отображается белым цветом [1 1 1].

     

    Функция RGB=label2rgb(L, map, zerocolor, order) контролирует каким образом определяются цвета из палитры для данной области в матрице меток. Когда установлена опция 'noshuffle' (по умолчанию), тогда функция label2rgb устанавливает цвета палитры для матрицы меток в числовом порядке. Когда установлена опция 'shuffle', то функция label2rgb устанавливает цвета палитры псевдослучайным образом.

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

    Исходная матрица меток L должна быть представлена в неразреженном числовом формате. Она должна представлять собой массив положительных целых чисел в ограниченном диапазоне. Результат работы функции label2rgb представляется в формате uint8.

    Пример.

    I=imread('rice.png');figure, imshow(I), title('исходное изображение') BW=im2bw(I, graythresh(I)); L=bwlabel(BW); RGB=label2rgb(L); RGB2=label2rgb(L, 'spring', 'c', 'shuffle'); imview(RGB), imview(RGB2);

     

     

    Наверх

    rgb2hsv - конвертирование из RGB в HSV

    Синтаксис:

    HSV=rgb2hsv(RGB)

    hsvmap=rgb2hsv(rgbmap)

    Описание:

    Функция HSV=rgb2hsv(RGB) создает полноцветное изображение, значения пикселов которого представлены в цветовой системе HSV, из исходного полноцветного изображения в цветовой системе RGB. Результирующее изображение имеет формат представления данных double.

    Функция hsvmap=rgb2hsv(rgbmap) создает палитру hsvmap, значения цвета в которой задаются в цветовой системе HSV, из исходной палитры rgbmap, хранящей цвета в цветовой системе RGB.

    Алгоритм:

    Широкое распространение в компьютерной графике и цифровой обработке изображений получила цветовая система HSV (hue - цветовой фон, saturation - насыщенность, volume - светлота) [1]. Часто для названия этой же системы используется аббревиатура HSB (hue, saturation, brightness - яркость).

    Геометрическая модель системы HSV получается из следующих соображений. Если цветовой куб RGB спроецировать на плоскость, перпендикулярную диагонали, на которой в RGB-кубе расположены значения яркости (оттенки серого от черного до белого), то получается правильный шестиугольник с красным, желтым, зеленым, голубым, синим и пурпурным цветами в вершинах. При снижении насыщенности RGB цветов уменьшается размер и цветовой охват RGB-куба. При этом соответствующая шестиугольная проекция также будет меньше. Если проекции собрать вокруг оси яркости V, то получится перевернутый объемный шестигранный конус HSV, показанный на рис. 1 [1].

    Яркость V изменяется от 0 в вершине конуса (черный цвет) до 1 в середине основания конуса (белый цвет). На оси V расположены ахроматические цвета - оттенки серого. Насыщенность S определяется расстоянием до оси V. На ней насыщенность равна нулю, а на сторонах конуса - единице. Цветовой тон H определяется углом поворота оси S против часовой стрелки относительно оси, проходящей через красный цвет.

    1.gif (16385 bytes)

    Рис. 1.

    Цветовая система HSV соответствует тому, как составляют цвета художники. Чистым цветам соответствуют значения V=1 и S=1, разбелам - цвета с увеличенным содержанием белого, т.е. с меньшими значениями S. Система HSV удобна для выбора цветов, поэтому ее относят к цветовым системам, приближенным к человеческому восприятию (perception).

    Пример.

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

    Известно, что зрение человека более чувствительно к изменениям яркости, чем к изменениям цвета. Этот факт делает целесообразным производить обработку отдельно для яркостной составляющей. Для этого полноцветное изображение из цветовой системы RGB следует преобразовать в систему, в которой одна из составляющих является сигналом яркости, а другие описывают цвет; например, таким требованиям отвечают системы HSV или YIQ.

    Исходное полноцветное изображение (рис. 2 а) слишком темное и имеет низкий контраст. Данное изображение преобразуется в цветовую систему HSV, где V является яркостной составляющей. Для этой составляющей повышается контраст. Затем изображение преобразуется обратно в систему RGB. Полученное в результате изображение показано на рис. 2 б.

    %Пример демонстрирует подход к фильтрации и контрастированию

    %цветных изображений.

    %Чтение исходного изображения и вывод его на экран.

    RGB=imread(‘flowers.tif’);

    imshow(RGB);

    %Преобразование в цветовую систему HSV.

    HSV=rgb2hsv(RGB);

    %Контрастирование составляющей Н - яркости изображения.

    HSV(:,:,3)=imadjust(HSV(:,:,3), [0.02 0.68], [], 0.7);

    %Преобразование в цветовую систему RGB.

    RGB=hsv2rgb(HSV);

    %Вывод результатов на экран.

    figure, imshow(RGB);

    а)

    б)

    Рис. 2.

     

     

    Наверх

    hsv2rgb - конвертирование из HSV в RGB

    Синтаксис:

    RGB=hsv2rgb(HSV)

    rgbmap=hsv2rgb(hsvmap)

    Описание:

    Функция RGB=hsv2rgb(HSV) создает полноцветное изображение, значения пикселов которого представлены в цветовой системе RGB, из исходного полноцветного изображения в цветовой системе HSV. Исходное изображение должно иметь формат представления данных double. Результирующее изображение также имеет формат представления данных double.

    Функция rgbmap=hsv2rgb(hsvmap) создает палитру rgbmap, значения цвета в которой задаются в цветовой системе RGB, из исходной палитры hsvmap, хранящей цвета в цветовой системе HSV.

     

     

    Наверх

    rgb2ntsc - конвертирование из RGB в YIQ

    Синтаксис:

    YIQ=rgb2ntsc(RGB)

    yiqmap=rgb2ntsc(rgbmap)

    Описание:

    Функция YIQ=rgb2ntsc(RGB) создает полноцветное изображение, значения пикселов которого представлены в цветовой системе YIQ, из исходного полноцветного изображения в цветовой системе RGB. Результирующее изображение имеет формат представления данных double.

    Функция yiqmap=rgb2ntsc(rgbmap) создает палитру yiqmap, цвета в которой задаются в цветовой системе YIQ, из исходной rgbmap, хранящей цвета в цветовой системе RGB.

    Алгоритм:

    Цветовая система YIQ используется в телевизионной системе NTSC представления цветного телевизионного сигнала. Составляющая Y содержит информацию о яркости изображения, а составляющие I и Q - о его цветности. Преобразование из цветовой системы RGB в YIQ имеет вид [1]:

    Обратное преобразование осуществляется с помощью следующего соотношения:

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

     

     

    Наверх

    ntscc2rgb - конвертирование из YIQ в RGB

    Синтаксис:

    RGB=ntsc2rgb(YIQ)

    rgbmap=ntsc2rgb(yiqmap)

    Описание:

    Функция RGB=ntsc2rgb(HSV) создает полноцветное изображение, значения пикселов которого представлены в цветовой системе RGB, из исходного полноцветного изображения в цветовой системе YIQ. Исходное изображение должно иметь формат представления данных double. Результирующее изображение также имеет формат представления данных double.

    Функция rgbmap = ntsc2rgb(yiqmap) создает палитру rgbmap, значение цвета в которой задаются в цветовой системе RGB, из исходной viqmap, хранящей цвета в цветовой системе Y1Q.

     

     

    Наверх

    rgb2ycbcr - конвертирование из RGB в YCbCr

    Синтаксис:

    YCbCr=rgb2ycbcr(RGB)

    ycbcrmap=rgb2ycbcr(rgbmap)

    Описание:

    Функция YCbCr=rgb2ycbcr(RGB) создает полноцветное изображение, значения пикселов которого представлены в цветовой системе YCbCr, из исходного полноцветного изображения в цветовой системе RGB. Формат представления данных исходного и результирующего изображений совпадают.

    Функция ycbcrmap=rgb2ycbcr(rgbmap) создает палитру ycbcrmap, значения цвета в которой задаются в цветовой системе YCbCr, из исходной палитры rgbmap, хранящей цвета в цветовой системе RGB.

    Алгоритм:

    Цветовая система YCbCr широко используется в цифровом видео. Составляющая Y содержит информацию о яркости изображения, а составляющие Cb и Cr (так называемые цветоразностные составляющие) - о его цветности.

    Преобразование из цветовой системы RGB, где составляющие принадлежат диапазону [0, 1], в систему YCbCr имеет вид:

    В результате данного преобразования составляющая Y принадлежит диапазону [16, 235], а составляющие Cb и Cr принадлежат диапазону [16, 240]. Оставшиеся допустимые значения вне указанных диапазонов ([0, 15] и [236, 255] для Y, [0, 15] и [241, 255] для Cb, Cr) используются для дополнительной информации (например, звука), которая передается вместе с видеопотоком.

     

     

    Наверх

    ycbcr2rgb - конвертирование из YCbCr в RGB

    Синтаксис:

    RGB=ycbcr2rgb(YCbCr)

    rgbrmap=ycbcr2rgb(ycbcrmap)

    Описание:

    Функция RGB=ycbcr2rgb(YCbCr) создает полноцветное изображение, значения пикселов которого представлены в цветовой системе RGB, из исходного полноцветного изображения в цветовой системе YCbCr. Формат представления данных исходного и результирующего изображений совпадают.

    Функция rgbrmap=ycbcr2rgb(ycbcrmap) создает палитру rgbmap, значения цвета в которой задаются в цветовой системе RGB, из исходной палитры ycbcrmap, хранящей цвета в цветовой системе YCbCr.

     

     

    Наверх

    graythresh - вычисление глобального порога изображения с использованием метода Отса

    Синтаксис:

    level=graythresh(I)

    Описание:

    Функция level=graythresh(I) вычисляет значение глобального порога, который используется для преобразования яркостей (интенсивностей) изображения в бинарное изображение в функции im2bw.

    Значения нормализованных интенсивностей находятся в диапазоне [0, 1].

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

    Многомерные массив автоматически преобразуется в двумерный с использованием функции reshape. Функция graythresh игнорирует все ненулевые мнимые части массива I.

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

    Исходное изображение I может быть представлено неразреженным массивом с форматом представления данных uint8, uint16 или double. Возвращаемое значение имеет формат представления данных double.

     

     

    Наверх

    iccread - считывание описания ICC

    Синтаксис:

    P=iccread(filename)

    Описание:

     

    Функция P=iccread(filename) считывает описание данных цветов, предоставленное Международным цветовым консорциумом (International Color Consortium (ICC)). Функция iccread возвращает описание данных в структуре P.

    ICC также предоставляет описание управления цветовыми системами с необходимой информацией относительно преобразования между цветовыми данными, заложенными в устройстве, а также описание управления устройствами с независимыми цветовыми пространствами (Profile Connection Space (PCS)).

     

    Возвращаемое описание P имеет структуру массива, поля которого содержат данные, найденные в описании ICC.1:2001-04. Число полей P зависит от класса описания и выбора способа создания описания.

    В таблице приведено перечень полей, которые находятся в структуре описания, генерируемой функцией iccread. Более детальная информация относительно описания ICC размещена на web-странице www.color.org.

    Поле Тип данных Описание
    Filename Текстовая строка Название описания
    Header Массив с размерностью 1x1 Заголовок описания
    TagTable Массив с размерностью nx3 Описание tag-таблиц
    Copywright Текстовая строка Описание авторских прав
    Description Текстовая строка Описание
    MediaWhitepoint Массив в формате double XYZ трехцветные значения белых точек для медиаустройств
    PrivateTags Массив с размерностью mx2 Содержание всех персональных или не определенных полей в ICC.1:2001-04. Поле подписей содержится в первом столбце, содержание полей содержится в других полях.

    Кроме того, P может содержать одно или более правил редактирования данных.

    Пример.Считаем описание цветового пространства sRGB.prof=iccread('sRGB.icm');prof=             Filename: 'sRGB.icm'  Header: [1x1 struct]  TagTable: {17x3 cell}  Copyright: 'Copyright (c) 1999 Hewlett-Packard Company'  Description: 'sRGB IEC61966-2.1 991203'  MediaWhitePoint: [0.9505 1 1.0891]  MediaBlackPoint: [0 0 0]  DeviceMfgDesc: 'IEC '  DeviceModelDesc: 'sRGB IEC 61966-2.1 sRGB 991203'  ViewingCondDesc: 'Reference Viewing Condition in IEC61966-2.1'  ViewingConditions: [1x1 struct]  Luminance: [76.0365 80 87.1246]  Measurement: [28x1 uint8]  Technology: [4x1 uint8]  MatTRC: [1x1 struct]  PrivateTags: {}  Для определения цветового пространства см. поле ColorSpace в структуре Header.prof.Header.ColorSpaceans=RGBДля определения описания PCS см. поле ConnectionSpace в структуре Header.prof.Header.ConnectionSpaceans=XYZ

     

     

    Наверх

    imcrop - кадрирование изображений

    Синтаксис:

    D=imcrop(S)

    Xd=imcrop(Xs, map)

    D=imcrop(S, rect)

    Xd=imcrop(Xs, map, rect)

    […]=imcrop(XData, YData,…)

    [A, rect]=imcrop(…)

    [XData, YData, A, rect]=imcrop(…)

    Описание:

    Функции D=imcrop(S) и Xd=imcrop(Xs, map) выводят на экран бинарное, полутоновое, полноцветное изображение S и палитровое изображение Xs и ожидают задания с помощью мыши прямоугольника, ограничивающего вырезаемый фрагмент. Для указания положения одного из углов ограничивающего прямоугольника следует нажать на левую кнопку мыши. Положение противоположного угла ограничивающего прямоугольника будет задано, если, не отпуская кнопку мыши, переместить курсор, а затем отпустить кнопку. Когда требуется задать квадратный фрагмент, следует при перемещении курсора мыши держать нажатой клавишу Shift.

    Функция imcrop возвращает изображение, ограниченное заданным прямоугольником. Если выходные параметры не заданы, например imcrop(I), то результат отображается в новом графическом окне.

    Если не определены входные параметры, например D=imcrop, то функция imcrop оперирует с изображением в текущем графическом окне.

    Используя функции D=imcrop(S, rect) и Xd=imcrop(Xs, map, rect), можно явно определить ограничивающий прямоугольник, где rect - вектор из четырех элементов: [ xmin ymin w h], которые задают положение левого верхнего угла (xmin ymin) прямоугольника, а также его ширину (w) и высоту (h) в пространственных координатах.

    Для задания произвольного масштаба по осям пространственной системы координат обрабатываемого изображения необходимо дополнительно передать два двухэлементных вектора XData и Ydata, определяющих диапазон изменения значений по осям координат: imcrop(XData, Ydata, …). Например, D=imcrop(XData, YData, S).

    Если определить дополнительные выходные параметры, то функция [D, rect]=imcrop(…) возвратит координаты ограничивающего прямоугольника rect, а функция [XData, YData, D, rect]=imcrop(…) дополнительно возвратит диапазоны изменения значений по осям координат XData и YData.

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

    Пример.

    Изображение I читается из файла. Затем из него вырезается прямоугольный фрагмент и помещается в изображение I2. В используемой пространственной системе координат левый верхний угол ограничивающего прямоугольника является центром пиксела (20, 20), а правый нижний угол является центром пиксела (60,50). Оба эти пиксела помещаются в изображение I2. Таким образом, результирующее изображение имеет размеры 31 строка х 41 столбец.

    %Пример демонстрирует кадрирование изображения.

    %Чтение исходного изображения и вывод его на экран.

    I=imread(‘valley.tif’);

    imshow(I);

    %Кадрирование и вывод получившегося фрагмента на экран.

    I2=imcrop(I, [20 20 40 30]);

    figure, imshow(I2);

     

     

    Наверх

    imresize - изменение размеров изображения

    Синтаксис:

    D=imresize(S, m, method)

    D=imresize(S, [mrows ncols], method)

    D=imresize(…, method, n)

    D=imresize(…, method, H)

    Описание:

    Функция imresize создает новое изображение, изменяя размеры исходного изображения любого типа. Для изменения размеров используется один из предопределенных методов интерполяции [1], который задается во входном параметре method в виде одной из следующих строк:

    ‘nearest’ - использовать значение ближайшего пиксела (установлен по умолчанию, и данный параметр может быть опущен при вызове функции);

    ‘bilinear’ - использовать интерполяцию по билинейной поверхности;

    ‘bicubic’ - использовать интерполяцию по бикубической поверхности;

    Функция D=imresize(S, m, method) создает изображение D, размеры которого в m раз отличаются от размеров исходного изображения S. Если m принадлежит диапазону от 0 до 1, то D меньше S. Если m больше 1, то D больше S.

    Функция D=imresize(S, [mrows ncols], method) создает изображение D с размерами mrows х ncols.

    Когда размеры выходного изображения меньше, чем размеры входного, и при этом используется интерполяция по билинейной или бикубической поверхности, исходное изображение предварительно фильтруется ФНЧ с целью устранения эффекта ступенчатости. По умолчанию используется усредняющий фильтр с размером маски 11х11. Можно задать произвольный размер маски фильтра nxn, передав дополнительный параметр n в функцию: D=imresize(…, method, n). Если n равно 0, то предварительной фильтрации не производится.

    Функция D=imresize(…, method, H) позволяет задать маску Н для предварительной фильтрации вместо усредняющего фильтра. Соответствующую матрицу возвращают функции ftrans2, fwind1, fwind2, fsamp2.

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

     

     

    Наверх

    imrotate - поворот изображения

    Синтаксис:

    D=imrotate(S, angle, method)

    D=imrotate(S, angle, method, crop)

    Описание:

    Функция D=imrotate(S, angle, method) создает изображение D, соответствующее повернутому исходному изображению S, используя один из предопределенных методов интерполяции [1], который задается во входном параметре method в виде одной из следующих строк:

    ''nearest' - использовать значение ближайшего пиксела (установлено по умолчанию, и данный параметр может быть опущен при вызове функции);

    ''bilinear' - использовать интерполяцию по билинейной поверхности;

    ''bicubic' - использовать интерполяцию по бикубической поверхности;

    Угол поворота angle задается в градусах. Положительные значения данного параметра соответствуют повороту против часовой стрелки, а отрицательные - по часовой стрелке.

    В общем случае количество пикселов результирующего изображения D больше либо равно количеству пикселов исходного изображения S. Значения пикселов изображения D, для которых отсутствуют соответствующие им пикселы в изображении S, устанавливаются в 0, что, например, для полутоновых изображений соответствует черному цвету. Функция D=imrotate(S, angle, method, crop) имеет дополнительный параметр 'crop', который указывает, что следует возвратить изображение с размерами, равными размерам S. В этом случае берется центральная часть повернутого изображения.

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

    Пример:

    Полутоновое изображение читается из файла, поворачивается на 87° против часовой стрелки. При повороте используется интерполяция по билинейной поверхности. На экран выводятся исходное (рис. 1 а) и преобразованное изображение (рис. 1 б).

    %Пример демонстрирует поворот изображения

    %Чтение изображения из файла и вывод его на экран.

    I1=imread('ic.tif');

    Imshow(I1);

    %Поворот изображения на 87° и вывод результата на экран.

    I2=imrotate(I1, 87, 'bilinear');

    figure, imshow(I2);

    Сопутствующие функции: IMCROP, IMRESIZE.

    Ссылки на литературу:

    1. Адамс Дж. Математические основы машинной графики. М.: Машиностроение, 1980.

    2. Яншин В., Калинин Г. Обработка изображений на языке С для IBM PC. М.: Мир, 1994.

    а)                                                  б)

    Рис. 1.

     

     

    Наверх

    checkerboard - создание шахматно-образных изображений

    Синтаксис:

    I=checkerboard

    I=checkerboard(N)

    I=checkerboard(N, P, Q)

    Описание:

    Функция I=checkerboard создает изображение типа шахматной доски, которое включает четыре различных локальных окрестности площадью 8x8 элементов. Светлая “клетка” на левой половине шахматной доски является белой. Светлая “клетка” на правой половине шахматной доски – серая.

    Функция I=checkerboard(N) создает изображение типа шахматной доски, где размер стороны каждой локальной площади равен N пикселам.

    Функция I=checkerboard(N, P, Q) создает прямоугольное изображение шахматной доски, где параметры P и Q определяют соответственно число строчек и столбцов. Элементами строчек и столбцов являются “клетки” шахматной доски, размер стороны которых равен N пикселов, и определяются как:

    TILE=[DARK LIGHT; LIGHT DARK]

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

    Пример:

    Создать изображение шахматной доски, где размер стороны каждой площадки ("клетки") равен 20 пикселам.

    I=checkerboard(20);

    imshow(I)

    Создать прямоугольное изображение шахматной доски с соотношением 2x3. 

    J=checkerboard(20, 2, 3);

    figure, imshow(J)

    Создать черно-белое изображение шахматной доски.

    K=(checkerboard > 0.5); 

    figure, imshow(K)

     

     

    Наверх

    findbounds - определение границ при пространственных преобразованиях

    Синтаксис:

    outbounds=findbounds(TFORM, inbounds)

    Описание:

    Функция outbounds=findbounds(TFORM, inbounds) оценивает результирующие границы, которые обусловлены соответственными пространственными преобразованиями и набором исходных изображений. Параметр TFORM, который формируется maketform, представляет собой структуру пространственных преобразований. Массив inbounds является матрицей с размерностью 2NUM_DIMS. Первая строка массива inbounds определяет нижнюю границу для каждой размерности, вторая строка определяет верхнюю границу. Параметр NUM_DIMS совмещается с полем ndims_in field в TFORM.

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

    Когда TFORM содержит предварительные преобразования (непустое поле forward_fcn), тогда findbounds преобразует вертикальные исходные границы прямоугольника и представляет результат в виде минимального или максимального значения.

    Когда TFORM не содержит предварительных преобразований, тогда findbounds оценивает результирующие границы используя критерий Nelder-Mead для оптимизации функции fminsearch. Когда вероятность оптимизации небольшая, тогда findbounds выдает предупреждение и возвращает outbounds=inbounds.

    Пример:

    inbounds=[0 0; 1 1]

    tform=maketform('affine', [2 0 0; .5 3 0; 0 0 1])

    outbounds=findbounds(tform, inbounds)

     

     

    Наверх

    makeresampler - создание повторяющейся структуры

    Синтаксис:

    R=makeresampler(interpolant, padmethod)

    Описание:

     

    Функция R=makeresampler(interpolant, padmethod) создает отдельную повторяющуюся структуру для совместного использования с функциями tformarray и imtransform. Используется эта функция, в основном, для реализации геометрических преобразований изображений.

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

    Параметр Interpolant Описание
    'cubic' Кубическая интерполяция
    'linear' Линейная интерполяция
    'nearest' Интерполяция по ближайшей окрестности

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

    {half_width, positive_half} Параметр half_width представляет собой положительный скаляр, который служит для создания симметрических узлов интерполяции. Параметр positive_half является вектором, значения которого равномерно размещены в диапазоне [0 positive_half].
    {half_width, interp_fcn} Параметр interp_fcn представляет собой функцию, определяющую значения узлов интерполяции, взятые из массива исходных значений на интервале [0 positive_half].

    Метод интерполяции не зависит от направления и может быть создан комбинацией разных типов интерполяции. Число элементов в ячейках массива должно быть равно числу направлений преобразований. Например, когда параметр interpolant описан как

     

    {'nearest', 'linear', {2 KERNEL_TABLE}},

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

    Аргумент PadMethod Описание
    'bound' Определяет значения для наполнения массива, которые, в свою очередь, зависят от типа интерполяции.
    'circular' Наполнение массива круговым повторением элементов. Аналогично функции padarray.
    'fill' Генерация результирующего массива с размытыми границами (кроме использования интерполяции по ближайшей окрестности).
    'replicate' Наполнение массива повторением элементов границы. Аналогично функции padarray.
    'symmetric' Наполнение массива зеркальным отражением самого себя. Аналогично функции padarray.

    В том случае, если установлены опции 'fill', 'replicate', 'circular' или 'symmetric', повторение осуществляется в два этапа с использованием функций tformarray или imtransform:


    1. Наполнение массива A непрерывно до полного преобразования исходных данных.

    2. Оценка свертки наполненного массива A с повторяющимися узлами результирующих точек, описанных в геометрической карте.

  • Традиционная выборка.

    В синтаксисе описания алгоритма выборки используются отдельные функции пакета Image Processing Toolbox. Существует возможность создания структур более высокой сложности

     

    R=makeresampler(PropertyName, PropertyValue, ...)

    Функция makeresampler поддерживает следующие свойства.

    Свойства Описание
    'Type' Может принимать значения 'separable' или 'custom'. Когда опция 'Type' принимает значение 'separable', тогда это эквивалентно использованию синтаксиса makeresampler(interpolant, padmethod). Когда опция 'Type' принимает значение 'custom', тогда нужно определять также такие свойства как 'NDims', 'ResampleFcn' и 'CustomData'.
    'PadMethod' Для более детальной информации см. аргумент padmethod.
    'Interpolant' Для более детальной информации см. аргумент interpolant.
    'NDims' Параметр 'NDims' представляется положительным целым числом и указывает в каком направлении будет производиться обработка. Значение Inf указывает на то, что направление не выбрано. Когда опция 'Type' принимает значение 'custom', тогда параметр NDims нужно указывать обязательно.
    'ResampleFcn' Интерфейс пользователя и результат обработки во многом зависят от установленных параметров. Например,B=resample_fcn(A, M, TDIMS_A, TDIMS_B, FSIZE_A, FSIZE_B, F, R)Для более детальной информации об исходных параметрах A, TDIMS_A, TDIMS_B и F см. функцию tformarray. Аргумент M представляет собой массив, в котором отображены преобразования индексов данных B в данные A. Когда A имеет N направлений преобразований (N=length(TDIMS_A)) и B имеет P направлений преобразований (P=length(TDIMS_B)), тогда ndims(M)=P+1, когда N>1 или N==1, тогда size(M,P+1)=N.
    'CustomData' Определяется пользователем.

    Пример.

     

    Выполним преобразование (растяжение) размеров изображения. Для этого в различных направлениях будем использовать различные методы.

    A=imread('moon.tif');

    resamp=makeresampler({'nearest', 'cubic'}, 'fill');

    stretch=maketform('affine', [1 0; 0 1.3; 0 0]);

    B=imtransform(A, stretch, resamp);

     

     

     

    Наверх

    maketform - создание структуры пространственных преобразований (TFORM) 

    Синтаксис:

    T = maketform(transformtype,...)

    Описание:

    Функция T = maketform(transformtype,...) создает структуру многомерных пространственных преобразований (так называемую TFORM-структуру), которая используется при реализации функций tformfwd, tforminv, fliptform, imtransform или tformarray.

    Функция transformtype может работать с одним из следующих типов пространственных преобразований. Синтаксис этих типов описан в таблице.

    Тип преобразований Описание
    'affine'  Аффинные преобразования (двумерные или N-мерные)
    'projective' Проекционные преобразования (двумерные или N-мерные)
    'custom'  Преобразования, которые определяются пользователем (двумерные или N-мерные)
    'box' Независимые аффинные преобразования по каждой размерности (масштабирование и сдвиг)
    'composite' Построение нескольких произвольных преобразований

    Типы преобразований

    Аффинные преобразования

    Функция T = maketform('affine',A) создает TFORM-структуру T, которая используется при N-мерных аффинных преобразованиях. A представляет собой невырожденную матрицу с размерностью (N+1)(N+1) или (N+1)N. Когда размерность матрицы A равна (N+1)(N+1), тогда последний столбец равен [zeros(N,1);1]. В другом случае, матрица A автоматически дополняется так, чтобы последний столбец был равен [zeros(N,1);1]. В матрице A определены прямые преобразования, например tformfwd(U,T), где U представлено вектором с размерностью 1N, а X возвращает вектор с размерностью 1N - X=U*A(1:N,1:N)+A(N+1,1:N). Параметр T представляет прямые и инверсные преобразования.

    Функция T = maketform('affine',U,X) создает TFORM-структуру T для двумерных аффинных преобразований, которые трансформируют каждую строку U в соответствующую строку X. Каждый из аргументов U и X имеет размерность 32 и определяет углы исходных и результирующих треугольников. Углы не должны быть коллинеарными.

    Проекционные преобразования

    Функция T = maketform('projective',A) создает TFORM-структуру для N-мерных проекционных преобразований. A представляет собой невырожденную матрицу с размерностью (N+1)(N+1). Значения A(N+1,N+1) равны нулю. В матрице A определены прямые преобразования, например, tformfwd(U,T), где параметр U представлен в виде вектора с размерностью 1N. X определяется как X = W(1:N)/W(N+1), где W=[U 1]*A. Структура преобразований T используется как при прямых, так и при инверсных преобразованиях.

    Функция T = maketform('projective',U,X) создает TFORM-структуру T для реализации двумерных проекционных преобразований, которые отображают каждую строку U соответствующей строкой X. Аргументы U и X имеют размерность 42 и определяют исходный и результирующий прямоугольник. Углы не должны быть коллинеарными.

    Преобразования, которые определяются пользователем

    Функция T = maketform('custom',NDIMS_IN,NDIMS_OUT,...FORWARD_FCN,INVERSE_FCN,TDATA) создает TFORM-структуру T на основе параметров, которые задаются пользователем. Параметры NDIMS_IN и NDIMS_OUT определяют число исходных и результирующих размерностей. С помощью FORWARD_FCN и INVERSE_FCN задается функция прямых и инверсных преобразований. Эти функции должны поддерживать следующий синтаксис:

    Прямая функция: X = FORWARD_FCN(U,T)
    Инверсная функция: U = INVERSE_FCN(X,T),

    где параметр U представляет собой матрицу с размерностью PNDIMS_IN. Строки представляют точки в исходном пространстве преобразований и X представляет собой матрицу с размерностью PNDIMS_OUT, где строки представляют точки в результирующем пространстве преобразований. Аргумент TDATA представляет собой некоторый массив системы MATLAB и используется для хранения параметров преобразований. Для доступа к этому массиву используются функции FORWARD_FCN и INVERSE_FCN в поле "tdata" в T.

    Независимые аффинные преобразования по каждой размерности

    Функция T = maketform('box',tsize,LOW,HIGH) или T = maketform('box',INBOUNDS, OUTBOUNDS) создает TFORM-структуру T для N-мерных аффинных преобразований. Аргумент tsize представляет собой N-элементный вектор положительных целых чисел. Параметры LOW и HIGH представляют собой также N-элементные векторы. Отображение преобразований производится с использованием параметров INBOUNDS и INBOUND.

    Построение нескольких произвольных преобразований

    Функция T = maketform('composite',T1,T2,...,TL) или T = maketform('composite', [T1 T2 ... TL]) создает TFORM-структуру T, где прямые и инверсные функции состоят из нескольких функций прямых и инверсных преобразований T1, T2, ..., TL.

    Например, когда L = 3, тогда выражение tformfwd(U,T) аналогично tformfwd(tformfwd(tformfwd(U,T3),T2),T1).

    Пример 1.

    Сконструируем и применим аффинные преобразования.

                       T = maketform('affine',[.5 0 0; .5 2 0; 0 0 1]);

                       tformfwd([10 20],T)

                       I = imread('cameraman.tif');

                       figure, imshow(I);

    This image is distributed by The MathWorks, Inc. withpermission from the Massachusetts Institute of Technology.

     

                       I2 = imtransform(I,T);

                       imshow(I2)

     

    T = maketform('projective',[.5 0 0; .5 1 0; 0 0 1]);

    tformfwd([20 10],T)

    I2 = imtransform(I,T);

    imshow(I2)

    Пример 2.

    Приведем также другой пример использования функции maketform.

    I = checkerboard(20,1,1);

    imview(I)

    T = maketform('projective',[1 1; 41 1; 41 41; 1 41],...

    [5 5; 40 5; 35 30; -10 30]);

    R = makeresampler('cubic','circular');

    J = tformarray(I,T,R,[1 2],[2 1],[100 100],[],[]);

    imview(J)

     

     

    Наверх

    tformarray - применение пространственных преобразований для многомерных массивов

    Синтаксис:

    B=tformarray(A, T, R, TDIMS_A, TDIMS_B, TSIZE_B, TMAP_B, F)

    Описание:

    Функция B=tformarray(A, T, R, TDIMS_A, TDIMS_B, TSIZE_B, TMAP_B, F) применяется для пространственных преобразований массива A в массив B. По своим характеристикам функция tformarray похожа на функцию imtransform и реализует обработку многомерных массивов. В большинстве случаев эта функция используется вместе с такими функциями как maketform, makeresampler, findbounds и tformarray.

     

    В таблице представлено краткое описание всех исходных аргументов.

    Аргумент Описание
    A Исходный массив или изображение
    T Типичная структура пространственных преобразований, обозначаемая TFORM, создается с помощью функции maketform
    R Типичная повторяющаяся структура, которая создается с помощью функции makeresampler
    TDIMS_A Строчный вектор, в котором перечислены исходные данные преобразований
    TDIMS_B Строчный вектор, в котором перечислены результирующие данные преобразований
    TMAP_B Размерность результирующего массива с преобразованными данными
    TSIZE_B Массив точек результирующего пространства, который используется как альтернативный путь описания пространственных преобразований
    F Массив заполненных значений

    Данные в A должны быть представлены числовым неразреженным массивом вещественных или комплексных чисел.

    Параметр T представляет структуру TFORM, которая определяет особенности пространственных преобразований. Для каждого элемента, который будет подвержен преобразованиям, описаны соответствующие данные для исходного и результирующего пространств. Эти данные будут используются функциями tformarray и tforminv для отображения особенностей пространственных преобразований.

    Когда параметр T пустой, тогда функция tformarray работает аналогично функции повторения структуры для вычисления параметра R. Параметр R представляет собой структуру, которая определяет значения интерполяции исходного массива в описанных точках. В большинстве случаев параметр R создается с помощью функции makeresampler, которая позволяет проводить контроль интерполяции вдоль каждой размерности.

    Параметры TDIMS_A и TDIMS_B указывают какие размерность исходного и результирующего массива задействованы в пространственных преобразованиях. Каждый элемент должен однозначно определяться и представляться положительным целым числом. Индексы элементов перечислены не в порядке возрастания, а в порядке поступления. Описание, которое точно отображает зависимости при преобразованиях между исходным A и результирующим B массивами, помещено в T. Значение length(TDIMS_A) должно быть равно T.ndims_in, а значение length(TDIMS_B) must - соответственно T.ndims_out.

    Например, когда параметр T представляет двумерные преобразования (TDIMS_A=[2 1] и TDIMS_B=[1 2]), тогда размерность вдоль столбца и размерность вдоль строки массива A соответствует первому и второму направлению преобразований в исходном пространстве. Размерность вдоль строки и размерность вдоль столбца соответствует первому и второму направлению преобразований в результирующем пространстве.

    Параметр TSIZE_B описывает размеры массива B после проведения преобразований. Отметим, что размеры B вдоль не преобразованных размерностей пропорциональны размерностям A вдоль тех же размерностей. Когда, например, параметр T представляет двумерные преобразования, тогда size(A)=[480 640 3 10], TDIMS_B=[2 1], TSIZE_B=[300 200] и size(B) равно [200 300 3].

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

    [D1 D2 D3 ... DN L]

    где N равно length(TDIMS_B). Вектор [D1 D2 ... DN] используется в пространстве TSIZE_B.

    Значение L зависит от того, пустой ли массив T. Когда массив T не пустой, тогда L равно T.ndims_out и каждая точка L-измерения в TMAP_B преобразует исходное пространство с использованием T. Когда массив T пустой, тогда L имеет размерность length(TDIMS_A) и каждая точка L-измерения в TMAP_B используется для локализации в исходном пространстве.

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


    • когда повторяющая структура создается с помощью функции makeresampler и опция padmethod установлена как 'fill' или 'bound'. 

    • когда используется повторяющаяся структура и она поддерживает метод наполнения, который определяется опциями 'fill' или 'bound'.

    • когда отображаются преобразования данных B и A для некоторых точек.

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

    Параметр A может быть представлен любым неразреженным числовым массивом действительных или комплексных чисел. Также массив может быть представлен в формате logical.

    Пример.

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

    I=checkerboard(20, 1, 1);

    figure; imshow(I)

    T=maketform('projective', [1 1; 41 1; 41 41;   1 41],[5 5; 40 5; 35 30; -10 30]);R=makeresampler('cubic', 'circular');J=tformarray(I, T, R, [1 2], [2 1], [100 100], [], []);figure; imshow(J)

     

     

    Наверх

    para2fan - вычисление веерно-лучевых проекций на основании параллельно-лучевых томографических данных

    Синтаксис:

    F=para2fan(P, D)I=para2fan(..., param1, val1, param2, val2, ...)[F, fan_positions, fan_rotation_angles]=fan2para(...)

    Описание:

     

    Функция F=para2fan(P, D) вычисляет веерно-лучевые данные (синограммы) F на основе параллельно-лучевых данных (синограмм) P. Каждый столбец P содержит выборку данных одного параллельно-лучевого сенсора, соответствующую некоторому повороту угла. Параметр D представляет собой расстояние в пикселях от центра поворота до центра датчика.

    Предполагается, что датчики отображаются с помощью одного пикселя. Параллельно-лучевое угловое вращение возможно в пределах, эквивалентных [0,180] градусов. Веерно-лучевые угловые вращения вычисляются в диапазоне [0,360) аналогично как и параллельно-лучевые угловые вращения. Трансформации между веерно-лучевыми и параллельно-лучевыми проекциями проводятся с учетом пространственного размещения датчиков.

     

    В функции I=para2fan(..., param1, val1, param2, val2, ...) используются параметры, которые контролируют различные аспекты para2fan-преобразований. Название параметров приведено в виде аббревиатуры, но от этого не меняется их суть. Значения параметров, которые используются по умолчанию, приведены в фигурных скобках: {по умолчанию}.

    Параметр Описание
    'FanCoverage' Строка, описывающая диапазон лучей при их повороте.Возможные значения: {'cycle'} или 'minimal'.Для более детальной информации см. описание функции ifanbeam.
    'FanRotationIncrement' Положительный вещественный скаляр, описывающий приращение угла поворота в градусах при веерно-лучевых проекциях.
    Когда параметр 'FanCoverage' принимает значение 'cycle', тогда 'FanRotationIncrement' должен быть равен 360.
    Когда параметр 'FanRotationIncrement' не описан, то он устанавливается таким же, как и при параллельно-лучевых угловых поворотах.
    'FanSensorGeometry' Текстовая строка, описывающая расположение датчиков.
    Возможные значения: {'arc'} или 'line' 
    Для более детальной информации см. описание функции fanbeam.
    'FanSensorSpacing' Положительный вещественный скаляр, описывающий распределение веерных лучей. Интерпретация значений зависит от установки опции 'FanSensorGeometry':
    Когда опция 'FanSensorGeometry' установлена как 'arc', тогда это значение рассматривается как угловое пространство в градусах. По умолчанию это значение равно 1.
    Когда опция 'FanSensorGeometry' установлена как 'line', тогда это значение интерпретируется как линейное пространство в пикселях.
    В случае, если опция 'FanSensorSpacing' не определена, тогда по умолчанию устанавливается наименьшее значение 'ParallelSensorSpacing'.
    Когда опция 'FanSensorGeometry' установлена как 'arc', тогда 'FanSensorSpacing' определяется как180/PI*ASIN(PSPACE/D)
    где PSPACE равно значению параметра 'ParallelSensorSpacing'.
    Когда опция 'FanSensorGeometry' установлена как'line', тогда 'FanSensorSpacing' принимает значениеD*ASIN(PSPACE/D)
    'Interpolation' Текстовая строка, описывающая тип интерполяции, который используется при преобразованиях между параллельно-лучевыми и веерно-лучевыми данными.
    'nearest' - по ближайшей окрестности
    {'linear'} - линейная
    'spline' - кусочные кубические сплайны
    'pchip' - кусочные кубические эрмитовские сплайны
    'cubic' - аналогично 'pchip'
    'ParallelCoverage' Текстовая строка, описывающая диапазон поворота.
    'cycle' - параллельные данные покрывают 360 градусов
    {'halfcycle'} - параллельные данные покрывают 180 градусов
    'ParallelRotationIncrement' Положительный вещественный скаляр, описывающий приращения при параллельно-лучевых угловых поворотах, измеренные в градусах. Угол поворота параллельных лучей вычисляется в диапазоне [0,180) градусов с приращением PAR_ROT_INC, где PAR_ROT_INC принимает значение 'ParallelRotationIncrement'. 180/PAR_ROT_INC должно быть целым числом. 
    Когда опция 'ParallelRotationIncrement' не определена, приращения устанавливаются аналогичными как и при веерно-лучевых угловых вращениях.
    'ParallelSensorSpacing' Положительный вещественный скаляр, описывающий пространственное расположение датчиков в пикселях. Диапазон размещения датчиков зависит от диапазона угла веера и вычисляется за выражением [D*sin(min(FAN_ANGLES)),D*sin(max(FAN_ANGLES))]
    Когда опция 'ParallelSensorSpacing' не описана, расположение принимается равномерным и зависит от угла веера и его дискретизации.

    Если при использовании функции [F, fan_positions, fan_rotation_angles]=fan2para(...) опция 'FanSensorGeometry' принимает значение 'arc', тогда параметр fan_positions содержит веерно-лучевые датчики угла. Когда 'FanSensorGeometry' принимает значение 'line', когда параметр fan_positions содержит информацию о месторасположении веерно-лучевых датчиков вдоль линии. Параметр fan_rotation_angles содержит информацию о угловом вращении.

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

    Все исходные числовые аргументы должны иметь формат представления данных double. Результат также представляется в формате double.

    Пример.Сгенерируем параллельно-лучевые проекции  ph=phantom(128);  theta=0:180;  [P, xp]=radon(ph, theta);  imshow(theta, xp, P, [], 'n'), axis normal  title('Parallel-Beam Projections')  xlabel('\theta (degrees)')  ylabel('x''')  colormap(hot), colorbar  Преобразуем в веерно-лучевые проекции  [F, Fpos, Fangles]=para2fan(P, 100);  figure, imshow(Fangles, Fpos, F, [], 'n'), axis normal  title('Fan-Beam Projections')  xlabel('\theta (degrees)')  ylabel('Sensor Locations (degrees)')  colormap(hot), colorbar

     

     

    Наверх

    fan2para - вычисление параллельно-лучевых проекций данных томографии с расходящимся пучком 

    Синтаксис:

    P=fan2para(F, D)P=fan2para(..., param1, val1, param2, val2, ...)[P, parallel_locations, parallel_rotation_angles]=fan2para(...)

    Описание:

     

    Функция P=fan2para(F, D) вычисляет параллельно-лучевые проекции (синограммы) на основании данных томографии с расходящимся пучком F. Каждая строка F содержит данные о веерной протяженности углов и их перемещении. Параметр D является расстоянием от вершины веера до центра вращения.

    Функция fan2para работает с проекциями протяженности углов и некоторыми приращениями исходных углов поворота. Исходные углы поворота являются ступенчатыми приращениями в диапазоне [0,360). Результирующие углы вычисляются в диапазоне [0,180) с аналогичными приращениями.

     

    Функция P=fan2para(..., param1, val1, param2, val2, ...) описывает параметры, которые контролируют различные аспекты преобразования с помощью функции fan2para; их перечень приведен в таблице. Названия параметров могут быть сокращенными, однако это не влияет на суть. По умолчанию значение задается в фигурных скобках ({}).

    Параметр Описание
    'FanCoverage' Строка, описывающая ранг через поворот лучей.Возможные значения: {'cycle'} или 'minimal' 
    См. ifanbeam для более детальной информации.
    'FanRotationIncrement' Положительный вещественный скаляр, описывающий приращения угла поворота в лучевых проекциях, выраженный в количестве ступенек приращения.
    По умолчанию это значение равно 1.
    'FanSensorGeometry' Строка, описывающая как размещены сенсоры.Возможные значения: {'arc'} или 'line' 
    См. fanbeam для более детальной информации.
    'FanSensorSpacing' Положительный вещественный скаляр, описывающий распределение пучка. Интерпретация значений зависит от установки 'FanSensorGeometry':
    Когда 'FanSensorGeometry' равно 'arc', тогда значение определяет угловое ступенчатое пространство. По умолчанию равно 1.
    Когда 'FanSensorGeometry' равно 'line', тогда значение определяет линейное пространство в пикселях.
    'Interpolation' Текстовая строка, описывающая тип используемой интерполяции между параллельно-лучевыми и точечно-лучевыми данными.
    'nearest' - по ближайшей окрестности
    {'linear'} - линейная
    'spline' - кусочно-линейные кубические сплайны
    'pchip' - кусочно-линейные эрмитовские кубические сплайны
    'cubic' - идентично 'pchip'
    'ParallelCoverage' Текстовая строка, описывающая ранг поворота.Возможные значения: 'cycle' или {'halfcycle'}.
    См. para2fan для более детальной информации.
    'ParallelRotationIncrement' Положительный вещественный скаляр, описывающий приращения угла при параллельно-лучевом повороте, измеряемом в количестве приращений. Углы вычисляются в диапазоне [0,180) с приращениями PAR_ROT_INC, где PAR_ROT_INC является значением 'ParallelRotationIncrement'. Значение 180/PAR_ROT_INC должно быть целым.
    Когда 'ParallelRotationIncrement' не определено, тогда приращения равны приращениям при точечно-лучевых углах поворота.
    'ParallelSensorSpacing' Положительный вещественный скаляр, описывающий размещение параллельно-лучевых сенсоров в пикселях. Порядок размещения сенсоров (датчиков) вытекает из порядка лучевых углов и устанавливается равным[D*sin(min(FAN_ANGLES)),D*sin(max(FAN_ANGLES))].
    Когда 'ParallelSensorSpacing' не определено, тогда размещение будет равномерным и минимальное размещение вытекает из веера углов и указывает на ранг, который определяется на основании этих углов.

    Выражение [P, parallel_locations,parallel_rotation_angles]=fan2para(...) возвращает параллельно-лучевое размещение сенсоров в parallel_locations и поворот угла в parallel_rotation_angles.

    Пример.Создадим искусственные данные параллельно-лучевых проекций и используем их для преобразования в точечно-параллельные данные.ph=phantom(128);theta=0:179;[Psynthetic, xp]=radon(ph, theta);imshow(theta, xp, Psynthetic, [], 'n'),title('Synthetic Parallel-Beam Data')xlabel('\theta (degrees)')ylabel('x''')colormap(hot), colorbarFsynthetic=para2fan(Psynthetic, 100, 'FanSensorSpacing', 1);Возвращение к параллельно-лучевым данным.[Precovered, Ploc, Pangles] = fan2para(Fsynthetic, 100, ...                                     'FanSensorSpacing', 1, ...                                     'ParallelSensorSpacing', 1);figure, imshow(Pangles, Ploc, Precovered, [], 'n'), axis normaltitle('Recovered Parallel-Beam Data')xlabel('Rotation Angles (degrees)')ylabel('Parallel Sensor Locations (pixels)')colormap(hot), colorbar

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

    Массив I должен иметь формат представления данных double, uint8, uint16 или logical. Все другие исходные и результирующие числовые значения должны быть представлены в формате double.

     

     

    Наверх

    fanbeam - вычисление веерно-лучевых преобразований

    Синтаксис:

    F=fanbeam(I, D)F=fanbeam(..., param1, val1, param1, val2, ...)[F, sensor_positions, fan_rotation_angles]=fanbeam(...)

    Описание:

     

    Функция F=fanbeam(I, D) на основании изображения I вычисляет данные F веерно-лучевых преобразований (синограмм). D представляет собой расстояние в пикселях от вершины до центра вращения. Каждый столбец F содержит данные о веерно-лучевом воспринимающем элементе (сенсоре); эти данные соответствуют выборке элементарных вращений. Сенсор характеризует один шаг в угловом пространстве. Угловое вращение в пространстве эквивалентно следующему диапазону отсчетов [0:359].

    Функция F=fanbeam(..., param1, val1, param1, val2, ...) описывает параметры, которые контролируют различные аспекты веерно-лучевых проекций; перечень этих параметров приведен в таблице. Название параметров может быть подано в виде аббревиатуры, но это не влияет на суть. Значения, которые используются по умолчанию, заключены в фигурные скобки ({}).

    Параметр Описание
    'FanRotationIncrement' Положительный вещественный скаляр, описывающий приращение угла поворота в веерно-лучевых проекциях.
    По умолчанию это значение равно 1.
    'FanSensorGeometry' Текстовая строка, описывающая размещение сенсоров.
    {'arc'} - сенсоры размещены по кругу на расстоянии D от центра поворота.
    'line' - сенсоры размещены равномерно вдоль линии, замыкающая точка размещена на расстоянии D от центра поворота.
    'FanSensorSpacing' Положительный вещественный скаляр, описывающий размещение веера лучей. Интерпретация значений зависит от установок 'FanSensorGeometry'.
    Когда параметр 'FanSensorGeometry' равен 'arc', значение определяется как отсчеты углового пространства. По умолчанию это 1.
    Когда параметр 'FanSensorGeometry' установлен в 'line', значение определяется как линейное пространство в пикселях.

    Функция [F, sensor_positions, fan_rotation_angles]=fanbeam(...) возвращает информацию о размещении сенсоров и углов поворота. Когда опция 'FanSensorGeometry' равна 'arc', то sensor_positions содержит веерно-лучевой сенсор измерения углов, которые измеряются в количестве отсчетов. Когда опция 'FanSensorGeometry' равна 'line', тогда параметр sensor_positions содержит информацию о размещении веерно-лучевого сенсора, измеряемую в пикселях. Параметр fan_rotation_angles содержит углы поворота.

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

    Элементы массива I должны быть представлены в формате double, logical или другом формате целых чисел. Все другие исходные и результирующие числовые данные должны быть представлены в формате double. Исходные данные не должны быть разреженными.

    Пример.ph=phantom(128);imview(ph)[F, Floc, Fangles]=fanbeam(ph, 250);imshow(Fangles, Floc, F, [], 'n'), axis normalxlabel('Rotation Angles (degrees)')ylabel('Sensor Positions (degrees)')colormap(hot), colorbar

     

     

    Наверх

    fliptform - перестановка исходных и результирующих данных в структуре TFORM

    Синтаксис:

    TFLIP=fliptform(T)

    Описание:

     

    Функция TFLIP=fliptform(T) создает новую структуру пространственных преобразований TFORM путем перестановки исходных и результирующих данных в существующей структуре TFORM.

    Пример.T=maketform('affine', [.5 0 0; .5 2 0; 0 0 1]);T2=fliptform(T)Это эквивалентно следующему выражению:x=tformfwd([-3 7], T)x=tforminv([-3 7], T2)

     

     

    Наверх

    ifanbeam - вычисление инверсного веерно-лучевого преобразования

    Синтаксис:

    I=ifanbeam(F, D)I=ifanbeam(..., param1, val1, param2, val2, ...)[I, H]=ifanbeam(...)

    Описание:

     

    Функция I=ifanbeam(F, D) восстанавливает изображение I из проекций, которые заданы в двумерном массиве F. Каждый столбец массива F содержит данные веерно-лучевых проекций при повороте на один градус. В функции ifanbeam центр поворота является точкой центра проекций и определяется как ceil(size(F,1)/2).

    Исходные углы вращения имеют одинаковые приращения и покрывают все [0:359] градусов. D является расстоянием от вершины до центра вращения.

     

    Функция I=ifanbeam(..., param1, val1, param2, val2, ...) содержит описания параметров, которые контролируют различные аспекты ifanbeam-реконструкции; описания приведены в следующей таблице. Названия параметров могут быть поданы в виде аббревиатуры, однако это не влияет на суть. Значения, которые применяются по умолчанию заключаются в фигурные скобки ({}).

    Параметр Описание
    'FanCoverage' Строка, описывающая ранг (диапазон), который применяется при вращении лучей.
    {'cycle'} - Вращение через полный диапазон [0,360).
    'minimal' - Минимальный диапазон вращения, который необходим для представления объекта.
    'FanRotationIncrement' Положительный вещественный скаляр, описывающий приращения углов поворота веерно-лучевых проекций, измеряемые в градусах. Для более детальной информации см. функцию fanbeam. 
    'FanSensorGeometry' Строка, описывающая положение сенсоров. Для более детальной информации см. функцию fanbeam.
    'FanSensorSpacing' Положительный вещественный скаляр, описывающий размещение веерно-лучевых сенсоров. Интерпретация этого значения зависит от установки опции 'FanSensorGeometry'. Для более детальной информации см. функцию fanbeam.
    'Filter' Строка, описывающая название фильтра. Для более детальной информации см. функцию iradon.
    'FrequencyScaling' Скаляр в диапазоне (0,1], который изменяет фильтр путем масштабирования частотной оси. Для более детальной информации см. функцию iradon.
    'Interpolation' Строка, описывающая метод интерполяции. Для более детальной информации см. функцию iradon.
    'OutputSize' Положительный скаляр, описывающий число сток и столбцов в реконструированном изображении.
    Когда параметр 'OutputSize' не описывается, функция ifanbeam определяет размер автоматически.
    Когда параметр 'OutputSize' описан, тогда функция ifanbeam реконструирует области изображения, не изменяя масштаб данных.
    Примечание: Когда проекции вычислены с помощью функции fanbeam, реконструированное изображение не может иметь те же размеры, что и исходное изображение.

    [I, H]=ifanbeam(...) возвращает частоту отзыва фильтра в вектор H.

    Примечание.

     

    Функция ifanbeam преобразует веерно-лучевые данные в параллельно-лучевые проекции и использует их в алгоритме фильтрации обратных проекций для выполнения обратного преобразования Радона. Фильтр работает полностью в частотной области.

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

    Все исходные числовые аргументы должны быть представлены в формате double. Результирующие аргументы также будут представлены в формате double.

    Пример.ph=phantom(128);d=100;F=fanbeam(ph, d);I=ifanbeam(F, d, 'FanSensorSpacing', 0.5);imview(ph); imview(I);

     

     

    Наверх

    applycform - применение преобразования цветовых пространств

    Синтаксис:

    out=applycform(I, C)

    Описание:

     

    Функция out=applycform(I, C) преобразует значения интенсивностей цветов изображения I в то цветовое пространство, которое описано в структуре преобразования цветов C. Эта структура содержит описание различных параметров преобразования. Для более детальной информации см. функцию makecform.

    Если I представляет собой двумерный массив, каждый элемент интерпретируется как цвет. Элементы типичного массива I зависят от исходного пространства цветов. Значения элементов выходного массива зависят от результирующего цветового пространства.

     

    Если массив I трехмерный, каждое положение столбец-строка интерпретируется как цветовой вектор, который зависит от исходного цветового пространства. На выходе получаем число строк и столбцов соответствующее I и размер size(out, 3), который зависит от результирующего цветового пространства.

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

    Изображение I должно быть представлено конечным не разреженным вещественным массивом в формате представления данных uint8, uint16 или double. Формат представления данных и размеры результирующего массива аналогичны исходному изображению, за исключением случая, когда цветовым пространством является XYZ. Когда исходные данные представлены в цветовом пространстве XYZ и формате uint8, тогда результирующий массив будет представлен в формате uint16.

    Пример.Считаем цветное изображение с использованием цветового пространства RGB.I=imread('peppers.png');Создадим структуру преобразования цветового пространства, которая определяет переход из RGB в XYZ.C=makecform('srgb2xyz');Теперь выполним преобразования с помощью функции applycform.I_xyz=applycform(I, C);

     

     

    Наверх

    makecform - создание структуры преобразования цветовых значений

    Синтаксис:

    C=makecform(type)C=makecform(type, 'whitepoint', WP)C=makecform('icc', src_profile, dest_profile)C=makecform('icc', src_profile, dest_profile, 'SourceRenderingIntent', src_intent, 'DestRenderingIntent', dest_intent)C=makecform('clut', profile, LUTtype)C=makecform('mattrc', MatTrc, 'Direction', direction)

    Описание:

     

    Функция C=makecform(type) создает структуру C преобразования цветов, которая описывает типы преобразования цветовых пространств. Структура цветовых преобразований может использоваться в качестве аргумента в функции applycform.

    Перечень возможных типов преобразований приведен в таблице. Функция makecform поддерживает преобразования между цветовыми пространствами, которые не зависят от устройства и отвечают требованиям Международной комиссии по освещению (CIE, Commission Internationale de l'Eclairage (International Commission on Illumination)). Дополнительно функция makecform поддерживает преобразования в стандарте sRGB. При перечне каждого цветового пространства используется аббревиатура пакета Image Processing Toolbox.

    Тип Описание
    'lab2lch' Преобразование из L*a*b* в цветовое пространство L*ch.
    'lab2srgb'1 Преобразование из L*a*b* в цветовое пространство srgb.
    'lab2xyz'1 Преобразование из L*a*b* в цветовое пространство XYZ.
    'lch2lab' Преобразование из L*ch в цветовое пространство L*a*b*.
    'srgb2lab'1 Преобразование из srgb в цветовое пространство L*a*b*.
    'srgb2xyz' Преобразование из srgb в цветовое пространство XYZ.
    'upvpl2xyz' Преобразование из u'v'L в цветовое пространство XYZ.
    'uvl2xyz' Преобразование из uvL в цветовое пространство XYZ.
    'xyl2xyz' Преобразование из xyY в цветовое пространство XYZ.
    'xyz2lab'1 Преобразование из XYZ в цветовое пространство L*a*b*.
    'xyz2srgb' Преобразование из XYZ в цветовое пространство srgb.
    'xyz2upvpl' Преобразование из XYZ в цветовое пространство u'v'L.
    'xyz2uvl' Преобразование из XYZ в цветовое пространство uvL.
    'xyz2xyl' Преобразование из XYZ в цветовое пространство xyY.

    Для преобразований типа 'xyz2lab', 'lab2xyz', 'srgb2lab' и 'lab2srgb' существует возможность оптимального описания значений интенсивностей с использованием так называемых белых точек. Для этого используется синтаксис

     

    C=makecform(type, 'WhitePoint', WP),

    где WP представляет собой вектор XYZ-значений с размерностью 1x3 при единичном диапазоне Y. По умолчанию, в соответствии с требованиями Международной комиссии по освещению, иллюминент D50 описан в ICC.1:2001-04. Также существует возможность использования функции whitepoint для создания вектора WP.

     

    Функция C=makecform('icc', src_profile, dest_profile) создает структуру преобразования цветов, которая базируется на двух ICC-описаниях. Параметры src_profile и dest_profile являются элементами ICC-описания, которые возвращаются функцией iccread.

    Функция C=makecform('icc', src_profile, dest_profile, 'SourceRenderingIntent', src_intent, 'DestRenderingIntent', DEST_INTENT) создает структуру цветовых преобразований, которые также базируются на двух ICC-описаниях src_profile и dest_profile. Параметры src_profile и dest_profile раскрывают смысл аргументов src_intent и назначение описания dest_intent.

     

    Предоставленные описания способов преобразования данных сгруппированы в зависимости от их содержания. Для многих устройств диапазон воспроизводимых цветов является больше или меньше чем диапазон цветов PCS. Гамма палитра зависит от интерпретации описания dest_intent. Перечень возможных значений приведен в таблице.

    Значение Описание
    'AbsoluteColorimetric' Палитра всей гаммы цветов ближайшей палитры, содержащей похожие оттенки исходной гаммы. Полное изложение всех цветовых данных является относительным, поскольку много цветов образуется путем диффузии существующих.
    'Perceptual' (default) Результат работы технологии описания гаммы палитры для оптимизации диапазона воспроизводимых цветов во многом зависит от самого устройства. В действительности, если количество оттенков очень большое, то они могут не воспроизводиться устройством.
    'RelativeColorimetric' Палитра всей гаммы оттенков цветов относительно исходной гаммы. Цветовые данные определяются относительно так называемой "белой точки" устройства.
    'Saturation' Применение технологии создания палитры для максимизации насыщения цветов, которые воспроизводятся устройством. Здесь также используется так называемая "белая точка" устройства.

    Функция C=makecform('clut', profile, LUTtype) создает структуру преобразования цветов C, в основу которой положен метод табличных преобразований цветов (color lookup table (CLUT)), описание которого содержится в ICC. Описание ICC генерируется функцией iccread. Параметр LUTtype описывает какой метод CLUT используется. Описание этого параметра подано в таблице.

    Тип LUT Описание
    'AToB0'  Содержит 16–битные и 8–битные компоненты LUTtag , которые преобразуют цвета устройств в PCS –цвета с использованием поэлементного представления.
    'AToB1' Содержит 16–битные и 8–битные компоненты LUTtag , которые преобразуют цвета устройств в PCS –цвета с использованием свойств относительного представления.
    'AToB2' Содержит 16–битные и 8–битные компоненты LUTtag , которые преобразуют цвета устройств в PCS –цвета с использованием свойств насыщенного представления.
    'BToA0' Содержит 16–битные и 8–битные компоненты LUTtag , которые преобразуют PCS –цвета в цвета устройства с использованием свойств визуального восприятия.
    ' BToA1' Содержит 16–битные и 8–битные компоненты LUTtag , которые преобразуют PCS –цвета в цвета устройства с использованием свойств колориметрического восприятия.
    'BToA2' Содержит 16–битные и 8–битные компоненты LUTtag , которые преобразуют PCS –цвета в цвета устройства с использованием свойств насыщенного представления.
    'Gamut' Содержит 16–битные и 8–битные компоненты LUTtag , которые определяют какие PCS –цвета из данной гаммы являются приемлемыми для данного устройства.
    'Preview0' Содержит 16–битные и 8–битные компоненты LUTtag , которые определяют такие PCS –цвета, которые доступны программе для поэлементного представления.
    'Preview1' Содержит 16–битные и 8–битные компоненты LUTtag , которые определяют такие PCS –цвета, которые доступны программе для относительного колориметрического представления.
    'Preview2' Содержит 16–битные и 8–битные компоненты LUTtag , которые определяют такие PCS –цвета, которые доступны программе для представления насыщенности.

    Функция C=makecform('mattrc', MatTrc, 'Direction', direction) создает структуру цветовых преобразований C, в основу которой положена матрично-градационная модель представление кривых, содержащаяся в ICC-описании цветов. Параметр direction может принимать одно из двух значений 'forward' или 'inverse' и описывает какая матрично-градационная модель применяется в прямом и инверсном направлении. Для более детальной информации см. раздел 6.3.1.2 в спецификации Международного консорциума цветов ICC.1:2001-04 (www.color.org).

    Ремарка.

     

    В пакете Image Processing Toolbox используется следующая аббревиатура для представления цветовых пространств.

    Аббревиатура Описание
    Xyz 1931 CIE XYZ трехцветные значения
    Xyl 1931 CIE xyY хроматические значения
    Uvl 1960 CIE uvL значения
    Upvpl 1976 CIE u'v'L значения
    Lab 1976 CIE L*a*b* значения
    Lch Полярные преобразования CIE L*a*b* значений, где c=chroma и h=hue
    srgb Стандартные RGB-значения для компьютерных мониторов, (IEC 61966-2-1)

    Пример.

    Преобразование RGB-изображения в L*a*b* , формат представления исходного изображения uint8.

     

    rgb=imread('peppers.png');

    cform=makecform('srgb2lab');

    lab=applycform(rgb,cform);

     

     

    Наверх

    whitepoint - описание полноцветной белой точки в цветовом пространстве

    Синтаксис:

    xyz=whitepointxyz=whitepoint(string)

    Описание:

     

    Функция xyz=whitepoint возвращает элемент xyz, который представляет собой трехэлементный вектор значений в единичном диапазоне.

    Функция xyz=whitepoint(string) возвращает элемент xyz, который представляет собой трехэлементный вектор значений, которые описывают составляющие компоненты цвета. В таблице приведен перечень всех возможных значений этой строки. Значение, которое используется по умолчанию, заключено в фигурные скобки ({}).

    Значение Описание
    'a' CIE стандартный иллюминант A
    'c' CIE стандартный иллюминант C
    'd50'  CIE стандартный иллюминант D50
    'd55' CIE стандартный иллюминант D55
    {'icc'} ICC стандартное описание связных иллюминантов пространства; 16-битная кусочная аппроксимация D50

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

     

    Строка может содержать цифровой массив. Формат представления xyz double.

    Пример.

     

    В этом примере в цветовом пространстве XYZ представлены составляющие иллюминанты 'icc' белой точки.

    wp_icc = whitepointwp_icc =      0.9642    1.0000    0.8249

     

     

    Наверх

    immagbox - локальное увеличение с использованием панели прокрутки

    Синтаксис:

    hbox = immagbox(hparent,himage)

    Описание:

    Функция hbox = immagbox(hparent,himage) реализует локальное увеличение для изображений, отображаемых с использованием панели прокрутки через imscrollpanel. Параметр hparent задается вручную и описывает локальное увеличение. Функция immagbox возвращает результат в виде hbox, который представляет объекты локального увеличения.

    Локальное увеличение представляется редактируемым текстовым блоком uicontrol, содержащим информацию об изображении. После введения нового значения локального увеличения, это приведет к изменениям на изображении в соответствии с этими установками. Когда изменения на изображении не будут иметь смысла, то блок локального увеличения скорректирует введенные значения.

    API функции.

    Блок увеличения содержит структуру в виде функции, названную API. Ее можно использовать для изменений в блоке увеличения. Для восстановления этой структуры используется функция iptgetapi.

    api = iptgetapi(hbox)

     

    Параметр API блока увеличения включает следующие функции.

    Значение Описание
    setMagnification Установка попиксельного увеличения.
       api.setMagnification(new_mag)
    где new_mag представляет значение коэффициента усиления. Умножая значение параметра на 100, получим уровень увеличения в процентах. Например, выражение api.setMagnification(2) обозначает увеличение, которое можно представить в виде текстовой строки как '200%'.

    Пример

    Рассмотрим пример добавления блока к прокручиваемому изображению. Инструмент прокрутки является стандартным инструментом системы MATLAB и реализован в окне просмотра.

    hFig = figure(`Toolbar','none',...

                  'Menubar','none');

    hIm = imshow('pears.png'); 

    hSP = imscrollpanel(hFig,hIm);

    set(hSP,'Units','normalized',...

                'Position',[0 .1 1 .9])

    hMagBox = immagbox(hFig,hIm);

    pos = get(hMagBox,'Position');

    set(hMagBox,'Position',[0 0 pos(3) pos(4)])

     

    Для изменения увеличения изображения с использованием панели прокрутки применяется функция API с параметром setMagnification.

    apiSP = iptgetapi(hSP);

    apiSP.setMagnification(2)

     

     

    Наверх

    imhist - построение гистограммы

    Синтаксис:

    imhist(I, n)

    imhist(BW, n)

    [h, cx]=imhist(I, n)

    [h, cx]=imhist(BW, n)

    [h, cx]=imhist(BW, map)

    Описание:

    Функции imhist(I, n) и imhist(BW, n) в текущем окне строят гистограммы яркостей пикселов соответственно полутонового и бинарного изображений. Гистограмма состоит из n столбцов. Значение n при вызове функции можно не указывать, в этом случае будут использованы значения по умолчанию: n=256 для полутонового изображения и n=2 для бинарного изображения. Под рисунком гистограммы выводится шкала яркостей.

    Функция [h, cx]=imhist(BW, map) в текущем окне строит гистограмму индексов пикселов палитрового изображения Х. Под рисунком гистограммы выводится палитра map.

    Функция [h, cx]=imhist(BW, map) возвращает вектор гистограммы h и вектор положения центров столбцов гистограммы сх на оси яркостей (для полутоновых и бинарных изображений) или на оси индексов (для палитровых изображений), что позволяет производить дальнейшую обработку гистограммы h или, например, построить огибающую гистограммы с помощью функции plot(cx, h).

    Пример.

    Для полутонового изображения I (рис. 1 а) строится гистограмма яркостей пикселов (рис. 1 б) и огибающая гистограммы в логарифмическом масштабе (рис. 1 в).

    %Пример демонстрирует построение гистограммы изображения.

    %Чтение изображения из файла.

    I=imread(‘lena.tif’);

    %Построение гистограммы яркостей пикселов и вывод ее на экран.

    imhist(I);

    %Получение гистограммы в логарифмическом масштабе

    %и вывод ее на экран.

    [h, cx]=imhist(I);

    h=log10(h);

    figure, plot(cx, h);

       

    а)                                             б)                                              в)

    Рис. 1.

     

     

    Наверх

    improfile - построение профиля

    Синтаксис:

    c=improfile

    c=improfile(n)

    c=improfile(S, xi, yi)

    c=improfile(S, xi, yi, n)

    [cx, cy, c]=improfile(…)

    [cx, cy, c, xi, yi]=improfile(…)

    […]=improfile(XData, YData, S, xi, yi)

    […]=improfile(XData, YData, S, xi, yi, n)

    […]=improfile(…, method)

    Описание:

    Функция improfile вычисляет вдоль пути, состоящего из одного или нескольких отрезков прямой, значения яркости (так называемый профиль яркости) для полутоновых изображений или значения R-, G-, B-составляющих (профили цветовых составляющих) для полноцветных изображений.

    Функции c=improfile и c=improfile(n) позволяют интерактивно задать путь, вдоль которого вычисляется профиль, для изображения в текущем окне. Параметр n задает количество точек, в которых вычисляются значения яркости или цвета пикселов. Эти n точек расположены вдоль пути на одинаковом расстоянии. Если параметр n не задан, то он устанавливается приблизительно равным числу пикселов, которые пересекает путь. Для полутоновых изображений выходной параметр с является одномерным массивом, в который помещаются n значений яркости, а для полноцветных изображений параметр с есть двумерный массив nx3.

    Координаты отрезков, формирующих путь, задаются щелчком левой клавиши мыши. Нажатие на клавишу Backspace или Delete удаляет предыдущую заданную точку. Нажатие на правую клавишу мыши или двойной щелчок левой клавишей задает конечную точку последнего отрезка пути и завершает процесс выбора пикселов. Также завершить процесс выбора пикселов без указания последнего пиксела можно нажатием на клавишу Enter. Когда путь задан, в массив возвращается профиль.

    Если параметр с при вызове функций improfile не указан, то профиль в виде графика выводится на экран в новое окно. При этом, если путь состоит из одного отрезка, то график - двумерный, координата Х которого совпадает с заданным отрезком. Если в пути более одного отрезка, то график - трехмерный, в осях X и Y которого указываются пространственные координаты изображения. Для полноцветных изображений в одних координатах одновременно выводятся 3 графика: красным, зеленым и синим цветом для R-, G-, B-составляющих соответственно.

    В функциях c=improfile(S, xi, yi) и c=improfile(S, xi, yi, n) для полутонового или полноцветного изображения S путь задается явно с помощью векторов xi, yi одинаковой длины, содержащих значения координат конечных точек отрезков пути в пространственной системе координат.

    Если для функций, рассмотренных выше, дополнительно определить два выходных параметра сх и су, то функции [cx, cy, c]=improfile(…) возвратят в них координаты в пространственной системе координат, в которых взяты значения яркости или цветовых составляющих. Можно также дополнительно определить еще два выходных параметра xi и yi: [cx, cy, c, xi, yi]=improfile(…), в которых будут возвращены координаты конечных точек отрезков пути.

    Если требуется определить для изображения пространственную систему координат, отличную от системы координат по умолчанию, то следует воспользоваться функциями […]=improfile(XData, YData, S, xi, yi), […]=improfile(XData, YData, S, xi, yi, n), где двухэлементные векторы XData и YData определяют диапазон изменений значений по осям пространственной системы координат.

    Для получения значений яркости или цвета в произвольной точке изображения используется интерполяция по значениям в соседних точках. Метод интерполяции задается во входном параметре method в виде одной из следующих строк:

    ‘nearest’ - использовать значение ближайшего пиксела (установлено по умолчанию, и данный параметр может быть опущен при вызове функции);

    ‘bilinear’ - использовать интерполяцию по билинейной поверхности;

    ‘bicubic’ - использовать интерполяцию по бикубической поверхности.

    Пример.

    Профиль яркости изображения (рис. 1 а) вдоль отрезка прямой от левого верхнего до правого нижнего угла изображения. Профиль показан на рис. 1 б.

    %Пример демонстрирует построение профиля яркости изображения.

    %Чтение изображения и вывод его на экран.

    I=imread(‘cameraman.tif’);

    imshow(I);

    %Построение профиля яркости изображения вдоль прямой

    %от левого верхнего до правого нижнего угла изображения.

    [r c]=size(I);

    figure, improfile(I, [1 c], [1 r], ‘bilinear’);

      

    а)

    б)

    Рис. 1.

     

     

    Наверх

    impixel - определение значения пиксела

    Синтаксис:

    P=impixel()

    P=impixel(I)

    P=impixel(X, map)

    P=impixel(RGB)

    P=impixel(I, c, r)

    P=impixel(X, map, c, r)

    P=impixel(RGB, c, r)

    [c, r, P]=impixel(…)

    P=impixel(XData, YData, I, xi, yi)

    P=impixel(XData, YData, X, map, xi, yi)

    P=impixel(XData, YData, RGB, xi, yi)

    [xi yi P]=impixel(XData, YData, …)

    Описание:

    Функция P=impixel() возвращает значения красной (R), зеленой (G) и синей (B) составляющих цвета для определенных пикселов изображения, находящегося в текущем окне. У полутоновых изображений значения составляющих совпадают. Пикселы необходимо определять интерактивно. Для выбора пиксела следует установить на него курсор и нажать на левую клавишу мыши. Таким образом можно выбрать несколько пикселов. На изображении они помечаются крестиками. Предыдущий выбранный пиксел можно удалить, если нажать на клавиши Backspace или Delete. Нажатие на правую клавишу мыши или двойной щелчок левой клавишей выбирает последний пиксел и завершает процесс выбора пикселов. Также завершить процесс выбора пикселов без указания последнего пиксела можно нажатием на клавишу Enter. Когда процесс выбора пикселов завершен, функция impixel возвращает в Р матрицу Nx3, в столбцах которой содержатся значения R-, G-, B-составляющих N выбранных пикселов.

    Функции P=impixel(I), P=impixel(X, map), P=impixel(RGB) выводят на экран соответственно полутоновое изображение I, палитровое Х с палитрой map и полноцветное RGB и переходят в режим выбора пикселов. Далее работа осуществляется полностью аналогично функции  impixel без параметров.

    При вызове функции impixel можно явно (не интерактивно) задать координаты пикселов, значения составляющих которых требуется получить. Причем координаты могут быть заданы как в пиксельной, так и в пространственной системе координат.

    Для задания координат в пиксельной системе координат для различных типов изображений следует воспользоваться одной из функций P=impixel(I, c, r), P=impixel(X, map, c, r), P=impixel(RGB, c, r), где c и r - векторы значений строк и столбцов требуемых пикселов. При этом в і-той строке матрицы Р будут находиться R-, G-, B-составляющие пиксела из c(i) столбца и r(i) строки.

    Если для функций, рассмотренных выше, дополнительно определить два выходных параметра c и r, то функции [c, r, P]=impixel(…) возвратят в них пиксельные координаты выбранных пикселов.

    Для задания координат в пространственной системе координат для различных типов изображений следует воспользоваться одной из функций P=impixel(XData, YData, I, xi, yi), P=impixel(XData, YData, X, map, xi, yi), P=impixel(XData, YData, RGB, xi, yi), где xi и yi - координаты, а двухэлементные векторы XData и YData определяют диапазон изменений значений по осям пространственной системы координат. Параметры XData и YData при вызове функций можно опустить. В этом случае будет использоваться пространственная система координат со значениями по осям по умолчанию.

    Если для трех функций, работающих с пространственной системой координат, дополнительно определить два выходных параметра xi и yi, то функции [xi yi P]=impixel(XData, YData, …) возвратят в них значения координат выбранных пикселов.

     

     

    Наверх

    pixval - управление режимом отображения значений пикселов

    Синтаксис:

    pixval on

    pixval off

    pixval

    pixval(fig, option)

    Описание:

    Функция pixval on включает режим отображения значений пиксела для текущего окна. В этом режиме в нижней части окна выводятся строка, столбец и цветовые значения пиксела, над которым находится курсор мыши. Также в режиме отображения значений пиксела можно измерять евклидово расстояние между пикселами. Для этого нужно нажать на левую клавишу мыши и перемещать курсор. За курсором потянется прямая линия, а внизу окна будет отображаться расстояние между пикселом, на котором находился курсор, когда была нажата клавиша, и пикселом, на который указывает курсор. Когда клавиша мыши отпускается, то линия и значение расстояния пропадают.

    Местоположение прямоугольника со значениями пиксела можно перемещать в пределах окна. Для этого нужно поместить курсор в прямоугольник, нажать левую клавишу мыши и переместить курсор в нужное место.

    Функция pixval off выключает режим отображения значений пиксела для текущего окна. Также этот режим можно выключить, если нажать на кнопку в правой части прямоугольника со значениями пиксела.

    Функция pixval переключает режим отображения значений пиксела, т.е. если режим был включен, то он выключается, а если был выключен, то включается.

    Функция pixval(fig, option) управляет режимом отображения значений пиксела для окна с описателем fig. Параметр option может принимать значения ‘on’ (включить режим) и ’off’ (выключить режим).

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

     

     

    Наверх

    mean2 - вычисление среднего значения элементов матрицы

    Синтаксис:

    m=mean2(S)

    Описание:

    Функция m=mean2(S) вычисляет среднее значение элементов матрицы S. Данная функция эквивалентна  mean(S(:)).

     

     

    Наверх

    std2 - вычисление среднеквадратического отклонения элементов матрицы

    Синтаксис:

    D=std2(S)

    Описание:

    Функция D=std2(S) вычисляет среднеквадратическое отклонение элементов матрицы S. Данная функция эквивалента std(S(:)).

     

     

    Наверх

    corr2 - вычисление коэффициентов корреляции между двумя матрицами

    Синтаксис:

    k=corr2(A,B)

    Описание:

    Функция k=corr2(A,B) вычисляет коэффициент корреляции между матрицами А и В одинакового размера.

    Алгоритм.

    Коэффициент корреляции вычисляется с помощью следующего соотношения:

    ,

    где , .

     

     

    Наверх

    xcorr2 - вычисление двумерной взаимной корреляционной функции

    Синтаксис:

    c=xcorr2(a, b)

    c=xcorr2(a)

    Описание:

    Функция c=xcorr2(a, b) вычисляет двумерную взаимную корреляционную функцию с двух двумерных сигналов по выборкам, заданным в матрицах a и b.

    Функция c=xcorr2(a) вычисляет автокорреляционную функцию и эквивалентна функции c=xcorr2(a, a).

     

     

    Наверх

    imabsdiff - определение отличительных признаков двух изображений

    Синтаксис:

    Z=imabsdiff(X,Y)

    Описание:

    Функция Z=imabsdiff(X,Y) вычитает каждый элемент изображения Y из соответствующего элемента изображения X и помещает абсолютную разницу этих элементов в результирующий массив Z. Изображения X и Y должны представлять собой неразреженный числовой массив одного формата и размерности. Массив Z имеет тот же формат и размерность, что и X и Y. Когда изображения X и Y представляются массивом вещественных чисел, результирующие элементы усекаются, поскольку они превышают границы.

    Когда массивы X и Y имеют формат представления данных double, то взамен этой функции можно использовать выражение abs(X-Y).

    Пример:

    В примере приводятся вычисления абсолютной разности между массивами формата uint8.

    X=uint8([ 255 10 75; 44 225 100]);

    Y=uint8([ 50 50 50; 50 50 50 ]);

    Z=imabsdiff(X,Y)

    Z=

    205   40     25

    6      175   50

    Отображение абсолютных разностей между исходным и отфильтрованным изображениями.

    I=imread('cameraman.tif');

    J=uint8(filter2(fspecial('gaussian'), I));

    K=imabsdiff(I, J);

    imshow(K, []) % []=scale data automatically

     

     

    Наверх

    imadd - суммирование двух изображений или суммирование изображения и константы

    Синтаксис:

    Z=imadd(X, Y)

    Описание:

    Функция Z=imadd(X, Y) суммирует каждый элемент массива X с соответствующим элементом массива Y и возвращает сумму соответственных элементов в результирующем массиве Z. X и Y представляют собой не разреженные числовые вещественные массивы одинакового размера и одинакового формата представления данных. Результирующий массив Z имеет тот же размер и формат представления данных, что и Y, когда Y скаляр формата double. В противном случае размерность и формат представления данных результирующего массива Z совпадает с массивом X.

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

    Когда X и Y представляют собой массивы данных в формате double, тогда взамен данной функции используется выражение X+Y.

    Пример:

    Просуммировать два массива с форматом представления данных uint8. Применить усечение, когда значения элементов превышают 255.

    X=uint8([ 255 0 75; 44 225 100]);

    Y=uint8([ 50 50 50; 50 50 50 ]);

    Z=imadd(X, Y)

    Z=

    255    50    125

    94     255   150

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

    I=imread('rice.tif');

    J=imread('cameraman.tif');

    K=imadd(I, J, 'uint16');

    imshow(K,[])

    Просуммировать константу и изображение.

    I=imread('rice.tif');

    J=imadd(I, 50);

    subplot(1, 2, 1), imshow(I) 

    subplot(1, 2, 2), imshow(J)

     

     

    Наверх

    imcomplement - дополнение изображений

    Синтаксис:

    IM2=imcomplement(IM)

    Описание:

    Функция IM2=imcomplement(IM) вычисляет дополнение к изображению IM. IMдолжно быть бинарным, яркостным (полутоновым) или RGB изображением. Форматпредставления данных и размерность результирующего изображение IM2 те же, что иIM.

    При дополнении бинарного изображения, нули дополняются единицами, аединицы нулями. Дополнение к полутоновому или цветному RGB изображениюнаходится так - каждое значение пиксела вычитается из максимально возможногозначения и разница представляется как значение пиксела результирующегоизображения. Таким образом темные области результирующего изображениядополняются соответственными светлыми областями исходного изображения, асветлые области результирующего изображения дополняются соответственнымитемными областями исходного изображения.

    Примечание.

    Когда IM является яркостным (полутоновым) или цветным (RGB) изображениемв формате double, можно взамен этой функции использовать выражение 1-IM. КогдаIM является бинарным изображением, взамен этой функции можно использоватьвыражение ~IM.

    Пример.

    Создать дополнение к массиву в формате uint8.

     

    X=uint8([ 255 10 75; 44 225 100]);X2=imcomplement(X)X2=0   245   180211    30   155

    На бинарном изображении 0 (черное) и 1 (белое) являются противоположнымии дополняемыми значениями.

    bw=imread('text.tif');bw2=imcomplement(bw);subplot(1, 2, 1), imshow(bw)subplot(1, 2, 2), imshow(bw2)

    Создать дополнение к яркостному (полутоновому) изображению.

    I=imread('bonemarr.tif');J=imcomp(I);imshow(I), figure, imshow(J)

     

     

    Наверх

    imdivide - разделение двух изображений или разделения изображения на константу

    Синтаксис:

    Z=imdivide(X,Y)

    Описание:

    Функция Z=imdivide(X, Y) делит каждый элемент массива X на соответствующий элемент в массиве Y и возвращаетрезультат в соответствующий элемент результирующего массива Z. X и Y являютсявещественными, неразреженными числовыми массивами с одинаковыми размерностями иформатами представления данных, или Y может быть представлен скаляром в форматеdouble. Размерность и формат представления данных массива Z совпадает сразмерностью и форматом представления данных массивов X и Y.

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

    Когда X и Y представляются массивами в формате double, взамен этой функции можно использовать выражение X./Y.

    Пример.

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

    X=uint8([ 255 10 75; 44 225 100]);Y=uint8([ 50 20 50; 50 50 50 ]);Z=imdivide(X,Y)Z=5     1     21     5     2

    Оценка иразделение производятся на примере изображения риса (тонкоструктурноеизображение).

    I=imread('rice.tif');blocks=blkproc(I, [32 32], 'min(x(:))');background=imresize(blocks, [256 256], 'bilinear');Ip=imdivide(I, background);imshow(Ip, []) % []=let imshow scale data automatically

    Разделение изображения на постоянный коэффициент.

    I=imread('rice.tif'); J=imdivide(I, 2);subplot(1, 2, 1), imshow(I)subplot(1, 2, 2), imshow(J)

     

     

    Наверх

    imlincomb - вычисление линейной комбинации двух изображений

    Синтаксис:

    Z=imlincomb(K1, A1, K2, A2, ..., Kn, An)

    Z=imlincomb(K1, A1, K2, A2, ..., Kn, An, K)

    Z=imlincomb(..., output_class)

    Описание:

    Функция Z=imlincomb(K1, A1, K2, A2, ... , Kn, An) проводит следующие вычисления:

    K1*A1+K2*A2+...+Kn*An ,

    где K1, K2, …, Kn – вещественные скаляры в формате представления данных double и A1, A2, …, An – неразреженные числовые вещественные массивы той же размерности и формата. Размерность и формат представления данных результата вычислений Z совпадает с A1.

    Функция Z=imlincomb(K1, A1, K2, A2, ... , Kn, An, K) проводит вычисления согласно выражению:

    K1*A1+K2*A2+...+Kn*An+K ,

    где функция imlincomb добавляет K (вещественный скаляр в формате представления данных double) к сумме K1, …, Kn и A1, …, An.

    Функция Z=imlincomb(..., output_class) определяет формат представления данных Z. Параметр output_class имеет числовой формат.

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

    Пример:

    Преобразование исходного изображения с коэффициентом два.

    I=imread('cameraman.tif');

    J=imlincomb(2, I);

    imshow(J)

    Сдвиг разницы изображений на 128.

    I=imread('cameraman.tif');

    J=uint8(filter2(fspecial('gaussian'), I));

    K=imlincomb(1, I, –1, J, 128); % K(r, c)=I(r, c)–J(r, c)+128

    imshow(K)

    Для иллюстрации выполнения функцией imlincomb всех арифметических операций с быстрым получением результата, сравним результат вычисления среднего двух массивов X и Y с использованием вложенных арифметических операций и с использованием функции imlincomb.

    Рассмотрим значения строк и столбцов: 255 в X и 50 в Y. Функция imadd суммирует 255 и 50, и усекает результат до 255. Возвращаемое средние значение в Z(1,1) равно 128.

    X=uint8([ 255 10 75; 44 225 100]);

    Y=uint8([ 50 20 50; 50 50 50 ]);

    Z=imdivide(imadd(X, Y), 2)

    Z=

    128    15    63

    47    128    75

    Функция imlincomb выполняет суммирование и деление в формате double с усечением к нужному диапазону результирующих данных. Средние значение в этом случае равно Z2(1, 1) is 153.

    Z2=imlincomb(.5, X, .5, Y)

    Z2=

    153    15    63

    47    138    75

    Сдвиг разницы изображений на 128.

    I=imread('cameraman.tif');

    J=uint8(filter2(fspecial('gaussian'), I));

    K=imlincomb(1, I, –1, J, 128); 

    % K(r, c)=I(r, c)–J(r, c)+128

    imshow(K)

     

     

    Наверх

    immultiply - умножение двух изображений или умножение изображения на константу

    Синтаксис:

    Z=immultiply(X, Y)

    Описание:

    Функция Z=immultiply(X, Y) выполняет умножение каждого элемента массива X на соответствующий ему элемент в массиве Y и помещает результат в массив Z.

    Когда X и Y являются числовыми массивами вещественных чисел одинаковой размерности и формата представления данных, тогда размерность и формат результирующего массива совпадают с X. Когда изображение X представлено числовым массивом, а Y скаляром в формате double, тогда массив Z имеет ту же размерность и формат, что и X.

    Когда изображение X представлено логическим, а изображение Y числовым массивом, тогда размерность и формат представления данных массива Z те же, что и в Y. Когда X числовой массив, а Y – логический, тогда размерность и формат представления данных массива Z совпадает с X.

    Функция immultiply вычисляет каждый элемент Z в формате double с плавающей точкой. Когда X массив целых чисел, тогда элементы Z, превышающие допустимый диапазон, должны усекаться и округляться. Когда изображения X и Y являются массивами в формате double, тогда вместо этой функции можно использовать выражение X.*Y.

    Пример:

    Пример умножения изображения. Приведем также пример преобразования форматов представления данных из uint8 в uint16 перед выполнением операции умножения во избежание усечения результата.

    I=imread('moon.tif');

    I16=uint16(I);

    J=immultiply(I16, I16);

    imshow(I), figure, imshow(J)

    Умножение изображения на константу:

    I=imread('moon.tif');

    J=immultiply(I, 0.5);

    subplot(1, 2, 1), imshow(I)

    subplot(1, 2, 2), imshow(J)

     

     

    Наверх

    imsubtract - вычитание двух изображений или вычитание константы из изображения

    Синтаксис:

    Z=imsubtract(X,Y)

    Описание:

    Функция Z=imsubtract(X, Y) вычитает каждый элемент массива Y изсоответственного элемента в массиве X и возвращает результат вычитания врезультирующий массив Z. Изображения X и Y должны быть представлены неразреженнымимассивами вещественных чисел одинаковой размерности и формата представленияданных или Y должно быть представлено скаляром в формате double. Размерность иформат представления данных результирующего массива Z совпадает с массивом X.

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

    Когда изображения X и Y представлены массивами в формате double, тогдавзамен этой функции можно использовать выражение X-Y.

    Пример.

    Провести операцию вычитания для двух изображений в формате uint8.Отрицательные значения элементов округляются до 0.

    X=uint8([ 255 10 75; 44 225 100]);Y=uint8([ 50 50 50; 50 50 50 ]);Z=imadd(X, Y)Z=205    0   250   175   50I=imread('rice.tif');blocks=blkproc(I, [32 32], 'min(x(:))');background=imresize(blocks, [256 256], 'bilinear');Ip=imsubtract(I, background);imshow(Ip, [])

    Вычесть значение константы из изображения:

    I=imread('rice.tif');Iq=imsubtract(I, 50);subplot(1, 2, 1), imshow(I)subplot(1, 2, 2), imshow(Iq)

     

     

    Наверх

    regionprops - определение свойств области изображения

    Синтаксис:

    STATS=regionprops(L, properties)

    Описание:

    Функция STATS=regionprops(L, properties) измеряет набор характеристик для каждойобласти, отмеченной в матрице меток L. Положительные вещественные элементы Lсоответствуют разным областям. Например, набор элементов L равных 1соответствует 1-й области, набор элементов L равных 2 соответствует 2-й областии т.д. Результирующая переменная STATS имеет структуру в виде массива длинойmax(L(:)). Поля структурного массива обозначают различные измерения для каждогорегиона и определяют их характеристики.

    Характеристикимогут перечисляться в виде строки, ячейка массива содержит строку единиц,строку 'all' или 'basic'. В таблице приведен список всех строковыххарактеристик. Характеристики могут существенно укорачиваться.

    'Area' 'EquivDiameter' 'MajorAxisLength'
    'BoundingBox' 'EulerNumber' 'MinorAxisLength'
    'Centroid' 'Extent' 'Orientation'
    'ConvexArea' 'Extrema' 'PixelIdxList'
    'ConvexHull' 'FilledArea' 'PixelList'
    'ConvexImage' 'FilledImage' 'Solidity'
    'Eccentricity' 'Image' 'SubarrayIdx'

    Когдахарактеристики представлены строкой 'all', тогда вычисляются все перечисленныевыше измерения.

    Когдахарактеристики не определены или определены опцией 'basic', тогда проводятсятакие измерения: 'Area', 'Centroid' и 'BoundingBox'.

    Определения.

    'Area' - скаляр;действительное число пикселей в обозначенной области. (Это значение можетнемного отличаться от значения, выдаваемого функцией bwarea.)

    'Centroid' - векторс размерностью 1ndims(L);центр масс области. Отметим, что первым элементом характеристики Centroidявляется горизонтальная координата (или x-координата) центра масс, а вторымэлементом является вертикальная координата (или y-координата).

    'BoundingBox' -вектор 1ndims(L)*2;минимальный прямоугольник, вмещающий рассматриваемую локальную область.BoundingBox является вектором [ul_corner width], где ul_corner представляется вформе [x y z ...] и описывает верхний-левый угол ограничивающегопрямоугольника; width представляется в форме [x_width y_width ...] и определяетширину вдоль каждой размерности.

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

    'MajorAxisLength'- скаляр; длина (в пикселях) большой оси эллипса, который имеет тот же второй моментчто и рассматриваемая область. Эти свойства поддерживаются только для двумерныхисходных матриц меток.

    'MinorAxisLength'- скаляр; длина (в пикселях) меньшей оси эллипса, который имеет тот же второй моментчто и рассматриваемая область. Эти свойства поддерживаются только для двумерныхисходных матриц меток.

    'Eccentricity' -скаляр; эксцентриситет эллипса с главными моментами инерции, равными главныммоментам инерции объекта. Эксцентриситет - это отношение расстояний междуфокусом и большой осью эллипса. Это значение в диапазоне от 0 до 1. (0 и 1 длявырожденных случаев; когда эксцентриситет эллипса 0, тогда это круг, когда жеэксцентриситет эллипса 1, тогда это часть линии.) Эти свойства поддерживаютсятолько для двумерных исходных матриц меток.

    'Orientation' -скаляр; угол (положение) между максимальной осью эллипса и x-осью. Эти свойстваподдерживаются только для двумерных исходных матриц меток.

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

    'Image' -бинарное (логическое) изображение, размеры которого совпадают с размерамипрямоугольника, ограничивающего область; все пиксели вне региона удаляются.

    'FilledImage' -бинарное (логическое) изображение, размеры которого совпадают с размерами прямоугольника, ограничивающего область (изображение объекта с "залитыми"дырами). Все отверстия в рассматриваемой области заполняются.

    'FilledArea' -скаляр; полное число пикселей в FilledImage.

    Этот рисунокдемонстрирует параметры 'Image' и `FilledImage'.

    'ConvexHull' -матрица с размерностью p2;минимальный выпуклый многоугольник, который вмещает рассматриваемую область.Каждая строка матрицы содержит x- и y-координаты одной вершины многоугольника.Эти свойства поддерживаются только для двумерных исходных матриц меток.

    'ConvexImage' -бинарное (логическое) изображение; выпуклый многоугольник со всеми наполняющимиего пикселями. (Для пикселей, лежащих на границе выпуклости, функция regionprops использует ту же логику для определения внутренних и внешнихпикселей, что и в функции roipoly. Изображение представляет собой область,ограниченную прямоугольником. Эти свойства поддерживаются только для двумернойматрицы меток.

    'ConvexArea' -скаляр; число пикселей 'ConvexImage'. Эти свойства поддерживаются только длядвумерной матрицы меток.

    'EulerNumber' -скаляр; равно числу объектов в области минус число отверстий. Эти свойстваподдерживаются только для двумерной матрицы меток.

    'Extrema' -матрица размерностью 82;экстремальные точки в области. Каждая строка матрицы описывает x- иy-координаты одной точки. Формат вектора следующий [верхний-левыйверхний-правый правый-верхний правый-нижний нижний-правый нижний-левыйлевый-нижний левый-верхний]. Эти свойства поддерживаются только для двумернойматрицы меток.

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

    'EquivDiameter'- скаляр; диаметр окружности, площадь которой эквивалентна площадирассматриваемой области. Вычисляется как sqrt(4*Area/pi). Эти свойстваподдерживаются только для двумерной матрицы меток.

    'Solidity' -скаляр; коэффициент выпуклости, равен отношению площади объекта к площадиограничивающего многоугольника. Вычисляется как Area/ConvexArea. Эти свойстваподдерживаются только для двумерной матрицы меток.

    'Extent' -скаляр; коэффициент заполнения - равен отношению площади объекта к площадиограничивающего прямоугольника. Вычисляется как Area/(width*height). Этисвойства поддерживаются только для двумерной матрицы меток.

    'PixelList' -матрица с размерностью pndims(L);фактическое число пикселей в области. Каждая строка матрицы имеет форму [x y z...] и определяет координаты пикселей области.

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

    Исходная матрицаметок L может иметь любой числовой формат представления данных.

    Примечание.

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

    Например, когдаполя массива заполняют некоторые статистические данные, тогда это эквивалентноследующему выражению.

    stats(1).Area, stats(2).Area, ..., stats(end).Area

    и

    stats.Area

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

    stats=regionprops(L, 'Area');allArea=[stats.Area];allArea является вектором, длина которого аналогична длине массива статистических данных.

    Функция ismember пригодна для конъюнкции с функцией regionprops при выборе областей на основенекоторых критериев. Например, эта команда создает бинарное изображение,содержащее только те области в text.tif, чья площадь больше чем 80.

    idx=find([stats.Area] > 80);BW2=ismember(L, idx);Такие преобразования не требуют больших затрат на вычисление и зависят от числа областей в L:'ConvexHull' 'ConvexImage' 'ConvexArea' 'FilledImage'

    Пример.

    BW=imread('text.tif');L=bwlabel(BW);stats=regionprops(L, 'all');stats(23)ans=Area: 89Centroid: [95.6742 192.9775]BoundingBox: [87.5000 184.5000 16 15]MajorAxisLength: 19.9127MinorAxisLength: 14.2953Eccentricity: 0.6961Orientation: 9.0845ConvexHull: [28x2  double]ConvexImage: [15x16 uint8 ]ConvexArea: 205Image: [15x16 uint8 ]FilledImage: [15x16 uint8 ]FilledArea: 122EulerNumber: 0Extrema: [ 8x2  double]EquivDiameter: 10.6451Solidity: 0.4341Extent: 0.3708PixelList: [89x2  double]

     

     

    Наверх

    cpstruct2pairs - конвертирование cpstruct в наиболее важные контрольные точки

    Синтаксис:

    [input_points, base_points]=cpstruct2pairs(CPSTRUCT)

    Описание:

    Функция [input_points, base_points]=cpstruct2pairs(CPSTRUCT) на основе обработки CPSTRUCT возвращает массив координат пар контрольных точек в input_points и base_points. Функция cpstruct2pairs устраняет прогнозированные точки.

    Пример:

    Запустить Control Point Selection Tool, cpselect.

    cpselect('lily.tif','flowers.tif')

    Использование функции cpselect обозначает пики контрольных точек на изображении. Выбор Save To Workspace с File menu запоминает точки рабочего пространства. С помощью команды Save, можно создать файловую структуру со всеми контрольными исходными и основными точками.

    С помощью команды cpstruct2pairs извлекаются исходные и основные точки с CPSTRUCT.

    [input_points,base_points]=cpstruct2pairs(cpstruct).

     

     

    Наверх

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

    Синтаксис:

    TFORM=cp2tform(input_points, base_points, transformtype)

    TFORM=cp2tform(CPSTRUCT, transformtype)

    TFORM=cp2tform(input_points, base_points, transformtype, parameter)

    TFORM=cp2tform(CPSTRUCT, transformtype, parameter)

    [TFORM, input_points, base_points]=cp2tform(CPSTRUCT, ...)

    [TFORM, input_points, base_points, input_points_bad, base_points_bad]=cp2tform(..., 'piecewise linear')

    Описание:

    Функция TFORM=cp2tform(input_points, base_points, transformtype) выбирает пары контрольных точек и использует их для вывода пространственных преобразований изображения. Функция возвращает TFORM структуру, которая содержит в себе пространственные преобразования. input_points представляет собой матрицу формата double и размерности m2, содержащую координаты x и y контрольных точек изображения, которое будет подвержено преобразованию. base_points также является массивом формата double с размерностью m2, который содержит координаты x и y контрольных точек на основном изображении. Параметр transformtype определяет тип проводимых преобразований. Для более детальной информации о типах, смотрите “Типы преобразований” (Transform Type).

    Функция TFORM=cp2tform(CPSTRUCT, transformtype) обрабатывает CPSTRUCT структуру, которая содержит массивы контрольных точек исходного и основного изображений. CPSTRUCT создается в Control Point Selection Tool, cpselect.

    Функция [TFORM, input_points, base_points]=cp2tform(CPSTRUCT, ...) возвращает контрольные точки, которые используются в input_points и base_points. Некоторые из этих точек могут не использоваться. Для более детальной информации см. cpstruct2pairs.

    Типы преобразований:

    Параметр transformtype определяет тип пространственных преобразований. В таблице приведено все типы преобразований, которые поддерживаются функцией cp2tform. В таблице указывается минимальное число пар контрольных точек, которые необходимы при выборе конкретного типа преобразований. Для преобразований, указанных как 'lwm' и 'polynomial' возможно применение дополнительных оптимизирующих параметров. Для более подробной информации см. описание синтаксиса.

    Типы преобразований Описание Минимум контрольных точек Примеры
    'linear conformal' Это преобразование используется, когда форму исходного изображения нужно оставить без изменений, за исключением частей изображения искаженных некоторой комбинацией преобразований или вращением. Прямые линии остаются прямыми, а параллельные – параллельными. 2 пары
    'affine' Это преобразование используется, когда форму исходного изображения нужно представить срезанной. Прямые линии остаются прямыми, а параллельные – параллельными, прямоугольник превращается в параллелограмм. 3 пары
    'projective' Это преобразование используется, когда изображение необходимо наклонить. Прямые линии остаются прямыми, а параллельные сходятся в перспективе. 4 пары
    'polynomial' Это преобразование используется, когда объект изображения необходимо искривить. Чем выше полиномиальная степень, тем более искривленным получается результирующее изображение. 6 пар (степень 2)
    10 пар (степень 3)
    16 пар (степень 4)
    'piecewise linear' Это преобразование используется, когда к различным частям исходного изображения применяются различные преобразования. 4 пары
    'lwm' Это преобразование (взвешенное локальное средние) используется, когда необходимо искривить различные локальные участки. 6 пар (12 пар рекомендуется)

    Когда параметр transformtype является 'linear conformal', 'affine', 'projective' или 'polynomial', а input_points и base_points (или CPSTRUCT) имеют минимальное число контрольных точек необходимых для специальных преобразований, то функция cp2tform однозначно определяет коэффициенты. Для более детальной информации см. mldivide.

    TFORM=cp2tform(input_points, base_points, 'polynomial', ORDER);

    TFORM=cp2tform(CPSTRUCT, 'polynomial', order) .

    Когда в типе преобразований указан параметр 'polynomial', можно использовать оптимальное определение полинома. Степень может быть скалярной величиной – 2, 3 или 4. Если не указывать степень, то по умолчанию она равна 3.

    TFORM=cp2tform(input_points, base_points, 'lwm', N);

    TFORM=cp2tform(CPSTRUCT, 'lwm',N) .

    Когда в типе преобразований указан параметр 'lwm', можно оптимально определить число точек N, используемых для каждого полинома. Радиус действия значительно увеличивается, если контрольные точки используют этот полином. N соседних точек используется полиномом степени 2 для каждой пары контрольных точек. Если не указать число N, то по умолчанию оно равно 12. N может быть меньше 6, что уменьшает возможность генерации неверного полинома.

    [TFORM,input_points,base_points,input_points_bad,base_points_bad]=

    cp2tform(input_points,base_points,'piecewise linear');

    [TFORM,input_points,base_points,input_points_bad,base_points_bad]=

    cp2tform(CPSTRUCT,'piecewise linear') .

    Когда в типе преобразований указан параметр 'lwm', то функция cp2tform возвращает оптимальные контрольные точки, которые используются в input_points и base_points, а также возвращает два массива input_points_bad и base_points_bad, которые содержат устраненные контрольные точки.

    Алгоритм:

    Функция cp2tform использует следующие основные процедуры:

    1. Использование пар контрольных точек для вывода пространственных преобразований.

    2. Возвращение TFORM структуры, содержащей пространственные преобразования.

    Процедуры изменяются в зависимости от типа преобразований “transformtype”.

    Линейные конформные преобразования.

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

    sc=scale*cos(angle);

    ss=scale*sin(angle);

    [u v]=[x y 1]*[ sc –ss ss sc tx ty] .

    Для sc, ss, tx, ty найдем:

    t_lc=cp2tform(input_points, base_points, 'linear conformal') .

    Коэффициенты инверсного представления хранятся в t_lc.tdata.Tinv. Линейные конформные преобразования являются частным случаем аффинных преобразований t_lc.forward_fcn в @affine_fwd и t_lc.inverse_fcn в @affine_inv. При минимальных двух парах контрольных точек необходимо найти четыре неизвестных коэффициента.

    Аффинные преобразования.

    В аффинных преобразованиях, размерности x и y независимо масштабируются и далее с ними проводятся последующие преобразования. Параллельные линии остаются параллельными. Прямые линии остаются прямыми. Линейные конформные преобразования являются частным случаем аффинных преобразований.

    Для аффинных преобразований:

    [u v]=[x y 1]*Tinv .

    Tinv является матрицей размерности 32 . Найти для 6 элементов массив Tinv.

    t_affine=cp2tform(input_points, base_points, 'affine') .

    Коэффициенты инверсных преобразований хранятся в t_affine.tdata.Tinv. Для минимальных 3 пар контрольных точек необходимо найти 6 неизвестных коэффициентов.

    Преобразование проекций (Projective).

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

    Для проекционных преобразований:

    [up vp wp]=[x y w]*Tinv ,

    где

    u=up/wp;

    v=vp/wp .

    Tinv является матрицей с размерностью 33.

    Исходные данные

    Tinv=[ A D G;B E H;C F I ];

    u=(Ax+By+C)/(Gx+Hy+I);

    v=(Dx+Ey+F)/(Gx+Hy+I) .

    Найти для 9 элементов Tinv.

    t_proj=cp2tform(input_points, base_points, 'projective') .

    Коэффициенты инверсных преобразований содержатся в t_proj.tdata.Tinv. При минимальных 4 парах контрольных точек находятся 9 неизвестных коэффициентов.

    Полиномиальные преобразования (Polynomial).

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

    Второй порядок полинома

    Для полиномиальных преобразований второго порядка:

    [u v]=[1 x y x*y x^2 y^2]*Tinv .

    u и v являются полиномами второго порядка от x и y. Каждый полином второго порядка имеет шесть термов. При определении всех коэффициентов размерность Tinv равна 62.

    t_poly_ord2=cp2tform(input_points, base_points, 'polynomial') .

    Коэффициенты инверсных преобразований хранятся в t_poly_ord2.tdata. Для минимальных 6 пар контрольных точек необходимо определить 12 неизвестных коэффициентов.

    Третий порядок полинома

    Для полиномиальных преобразований третьего порядка:

    [u v]=[1 x y x*y x^2 y^2 y*x^2 x*y^2 x^3 y^3]*Tinv .

    u и v являются полиномами третьего порядка от x и y. Каждый полином третьего порядка имеет десять термов. При определении всех коэффициентов размерность Tinv равна 102.

    t_poly_ord3=cp2tform(input_points, base_points, 'polynomial',3) .

    Коэффициенты инверсных преобразований хранятся в t_poly_ord3.tdata. Для минимальных 10 пар контрольных точек необходимо определить 20 неизвестных коэффициентов.

    Четвертый порядок полинома

    Для полиномиальных преобразований четвертого порядка:

    [u v]=[1 x y x*y x^2 y^2 y*x^2 x*y^2 x^3 y^3]*Tinv .

    u и v являются полиномами четвертого порядка от x и y. Каждый полином четвертого порядка имеет пятнадцать термов. При определении всех коэффициентов размерность Tinv равна 152.

    t_poly_ord4=cp2tform(input_points, base_points, 'polynomial',4) .

    Коэффициенты инверсных преобразований хранятся в t_poly_ord4.tdata. Для минимальных 15 пар контрольных точек необходимо определить 30 неизвестных коэффициентов.

    Кусочно–линейные преобразования.

    При кусочно–линейных преобразованиях линейные аффинные преобразования применяются отдельно к каждому участку изображения [1]. Для этого необходимо:

    1. Найти триангуляционную свертку для основных контрольных точек. 

    2. Использовать три вертикали для каждой триангуляции и вывода аффинных преобразований основных исходных координат.

    Локальное взвешенное средние.

    Для каждой контрольной точки в in base_points необходимо:

    1.Найти N близких контрольных точек.

    2.Использовать эти N точек и соответствующие им точки в input_points для вывода полинома второго порядка.

    3.Вычислить радиус воздействия этого полинома как расстояние от центра контрольной точки к самой дальней точке, использовав выведенный полином (используя base_points) [2].

    Пример:

    I=checkerboard;

    J=imrotate(I, 30);

    base_points=[11 11; 41 71];

    input_points=[14 44; 70 81];

    cpselect(J, I, input_points, base_points);

    t=cp2tform(input_points, base_points, 'linear conformal') .

    Для обратного получения углов и масштабов:

    ss=t.tdata.Tinv(2,1); %ss=scale*sin(angle);

    sc=t.tdata.Tinv(1,1); % sc=scale*cos(angle);

    angle=atan2(ss,sc)*180/pi;

    scale=sqrt(ss*ss+sc*sc) .

     

     

    Наверх

    cpcorr - определение согласованных контрольных точек с использованием кросс-корреляции

    Синтаксис:

    input_points=cpcorr(input_points_in, base_points_in, input, base)

    Описание:

    Функция input_points=cpcorr(input_points_in, base_points_in, input, base) использует нормированную кросс-корреляцию для установки каждой пары контрольных точек, обозначив их как input_points_in и base_points_in. Матрица input_points_in с размерностью M2 и форматом представления данных double содержит координаты контрольных точек на исходном изображении. Матрица input_points_in с размерностью M2 и форматом представления данных double содержит координаты контрольных точек на основном (базисном) изображении.

    Функция cpcorr возвращает установленные контрольные точки в матрице input_points, которая по размерности совпадает с матрицей input_points_in и имеет формат представления данных double.

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

    Для повышения эффективности функции cpcorr исходное и основное изображения должны иметь одинаковую размерность.

    Функция cpcorr не может устанавливать точки, когда выполняется одно из следующих условий:

    1) точки находятся очень близко к краю обоих изображений;

    2) локальная окрестность содержит в себе элементы со значением Inf или NaN;

    3) среднеквадратическое отклонение значений элементов локальной окрестности равно нулю; 

    4) значения элементов локальной окрестности плохо коррелированны.

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

    Исходное и основное изображения должны иметь формат представления данных logical, uint8, uint16 или double. Пары контрольных точек должны быть класса double.

    Алгоритм:

    Функция cpcorr использует следующие основные процедуры.

    Для каждой пары контрольных точек необходимо:

    1.Определить окрестность 1111 для исходных контрольных точек и окрестность 2121 для основных контрольных точек.

    2.Вычислить нормированную кросс-корреляцию для этих окрестностей.

    3.Найти абсолютный максимум матрицы кросс-корреляции.

    4.Использовать расположение максимумов для установки координат исходных контрольных точек.

    Пример:

    В примере рассмотрено использование функции cpcorr для поиска согласованных контрольных точек на изображении. Записываются эти параметры в матрицы input_points matrix и the input_points_adj соответственно.

    input=imread('lily.tif');

    base=imread('flowers.tif');

    input_points=[127 93; 74 59];

    base_points=[323 195; 269 161];

    input_points_adj = cpcorr(input_points,base_points,...

    input(:,:,1),base(:,:,1))

    input_points_adj=

    126.0000   94.0000

    72.1000     60.0000

     

     

    Наверх

    cpselect - инструмент выбора контрольных точек

    Синтаксис:

    cpselect(input, base)

    cpselect(input, base, CPSTRUCT_IN )

    cpselect(input, base, XYINPUT_IN, XYBASE_IN)

    H=cpselect(input, base, ...)

    Описание:

    Функция cpselect(input, base) запускает пакет Control Point Selection Tool, графический интерфейс которого дает возможность выбора контрольных точек на двух похожих изображениях. Исходным является изображение, которое необходимо трансформировать и преобразовать в координатную систему основного изображения. Исходные или основные данные могут быть представлены в виде изображения или последовательности цифр, взятых из файла, содержащего полутоновое изображение. Пакет Control Point Selection Tool возвращает контрольные точки в виде структуры CPSTRUCT.

    Функция cpselect(input, base, CPSTRUCT_IN) запускает cpselect и помещает набор контрольных точек в CPSTRUCT_IN. Этот синтаксис позволяет перезапускать функцию cpselect с состояния предварительного запоминания контрольных точек в CPSTRUCT_IN.

    Функция cpselect(input, base, xyinput_in, xybase_in) запускает cpselect с наборами пар контрольных точек. Данные xyinput_in и xybase_in являются матрицами размерности m2, которые содержат исходные и основные координаты соответственно.

    Функция H=cpselect(input, base, ...) предоставляет ручное управление пакетом с помощью параметра H. Для того, чтобы закрыть пакет с командной строки нужно использовать dispose(H) или H.dispose синтаксис.

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

    Исходные изображения должны иметь формат представления данных uint8, uint16, double или logical.

    Алгоритм:

    Функция cpselect использует следующие основные процедуры для прогноза контрольных точек:

    1. Определение всех действительных контрольных точек.

    2. Определение пространственных преобразований между исходными и основными контрольными точками с использованием метода который зависит от числа пар контрольных точек следующим образом:

    2 пары Линейные конформные преобразования
    3 пары Аффинные преобразования
    4 пары Преобразование проекций

    3. Использование пространственных преобразований для новых точек, сгенерированных на основе предсказанных. 

    4. Отображение предсказанных точек. 

    Пример:

    Запускаем пакет с запоминанием изображений.

    aerial=imread('westconcordaerial.png');

    cpselect(aerial(:, :, 1), 'westconcordorthophoto.png')

    Запускаем пакет с рабочим пространством изображений и точек.

    I=checkerboard;

    J=imrotate(I, 30);

    base_points=[11 11; 41 71];

    input_points=[14 44; 70 81];

    cpselect(J, I, input_points, base_points);

     

     

    Наверх

    normxcorr2 - нормализация двумерной кросс-корреляции

    Синтаксис:

    C=normxcorr2(TEMPLATE, A)

    Описание:

    Функция C=normxcorr2(TEMPLATE, A) вычисляет нормированную взаимную корреляцию матриц TEMPLATE и A. Матрица A должна быть больше матрицы TEMPLATE. Значения TEMPLATE не должны быть все одинаковыми. Результирующая матрица C содержит корреляционные коэффициенты, которые представляют собой числа в диапазоне от -1.0 до 1.0.

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

    Исходные матрицы должны быть представлены в формате uint8, uint16 или double.

    Алгоритм.

    Функция normxcorr2 использует следующие основные процедуры:


    1. Вычисление взаимной корреляции в пространственной или частотной областях, что зависит от размеров изображения.

    2. Вычисление локальных сумм на стадии предобработки. [1]

    3. Использование локальных сумм для нормализации взаимной корреляции и получения корреляционных коэффициентов. [2]

  • Пример.

    T=.2*ones(11); % Формирование светло-серой области на фоне темно-серого фона.T(6, 3:9)=.6;T(3:9, 6)=.6;BW=T>0.5;      % Формирование белого и темного фона.imshow(BW)figure, imshow(T)% Формирование нового изображения.T_offset=.2*ones(21);offset=[3 5];T_offset((1:size(T, 1))+offset(1), (1:size(T, 2))+offset(2))=T;figure, imshow(T_offset)% Взаимная корреляция массивов BW и T_offsetcc=normxcorr2(BW, T_offset);[max_cc, imax]=max(abs(cc(:)));[ypeak, xpeak]=ind2sub(size(cc), imax(1));corr_offset=[(ypeak-size(T, 1)) (xpeak-size(T, 2)) ];isequal(corr_offset, offset)

     

     

    Наверх

    deconvblind - улучшение изображений с использованием обратной свертки

    Синтаксис:

    [J, PSF]=deconvblind(I, INITPSF)

    [J, PSF]=deconvblind(I, INITPSF, NUMIT)

    [J, PSF]=deconvblind(I, INITPSF, NUMIT, DAMPAR)

    [J, PSF]=deconvblind(I, INITPSF, NUMIT, DAMPAR, WEIGHT)

    [J, PSF]=deconvblind(I, INITPSF, NUMIT, DAMPAR, WEIGHT, READOUT)

    [J, PSF]=deconvblind(... , FUN, P1, P2, ... , PN)

    Описание:

    Функция [J, PSF]=deconvblind(I, INITPSF) вычисляет обратное преобразование свертки для изображения I, используя алгоритм максимума вероятности, и возвращает восстановленное изображение J и восстановленную функцию протяженности PSF. Исходные массивы I, PSF и INITPSF могут быть числовыми массивами или массивами в виде ячеек. Восстановленная функция протяженности PSF является положительным массивом, который имеет такую же размерность как INITPSF.

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

    Функция [J, PSF]=deconvblind(I, INITPSF, NUMIT) определяет число итераций (по умолчанию 10).

    Функция [J, PSF]=deconvblind(I, INITPSF, NUMIT, DAMPAR) определяет порог отклонения результирующего изображения от исходного I (в терминах среднеквадратического отклонения пуассоновского шума). Итерации прекращаются для пикселов, которые отклоняются на величину, не более чем DAMPAR, от их начального значения. Это приводит к уменьшению генерации шума на таких изображениях, и сохранению мелких деталей.

    Функция [J, PSF]=deconvblind(I, INITPSF, NUMIT, DAMPAR, WEIGHT) определяет пикселы исходного изображения I, которые будут подвержены восстановлению. По умолчанию, параметр WEIGHT является единичным массивом, размеры которого совпадают с размерами исходного изображения. Также есть возможность определять элементы массива WEIGHT, значение которых должно быть в пределах между 0 и 1. Значение элементов массива WEIGHT определяется пикселами, которые находятся на позициях соответствующих описанию. Например, исключить из рассмотрения элементы, соответственные пикселы которых в массиве WEIGHT, равны 0. Существует возможность улучшить весовые значения, задавая каждому пикселу соответственно корректирующие значения.

    В команде [J, PSF]=deconvblind(I, INITPSF, NUMIT, DAMPAR, WEIGHT, READOUT) параметр READOUT является массивом (или значением), которое соответствует добавленному шуму (фон, передний план) и может быть одним из вариантов шума, вносимого телевизионной камерой. READOUT может иметь размерность исходного изображения. 

    В функции [J, PSF]=deconvblind(..., FUN, P1, P2, ..., PN) FUN является функцией, описывающей дополнительные ограничения для PSF.

    Функция FUN вызывается в конце каждой итерации и должна принимать значение PSF в качестве первого аргумента, также может принимать дополнительные параметры P1, P2,..., PN. Функция может возвратить один аргумент PSF, размеры которого совпадают с размерами исходного параметра PSF и который удовлетворяет дополнительным условиям.

    Обратное преобразование свертки.

    Сначала выполняется свертка с произвольными параметрами. Далее особенности выходного изображения I будут использоваться при выборе параметров PSF, INITPSF. Функция свертки возвращает результирующее изображение J и восстановленные точки функции протяженности PSF могут использоваться в следующих операциях свертки. Выходной массив J содержит четыре элемента:

    J{1} – содержит массив I, исходное изображение;

    J{2} – содержит результат предпоследний итерации;

    J{3} – содержит результат последний итерации;

    J{4} – массив, который генерирует итерационный алгоритм.

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

    Массив I должен иметь формат представления данных uint8, uint16 или double. Аргументы DAMPAR и READOUT имеют тот же формат представления данных что и исходное изображение. Другие параметры должны иметь формат представления данных double. Результирующее изображение J или первый массив результирующего массива имеют тот же формат представления данных, что и исходное изображение.

    Пример:

    I=checkerboard(8);

    PSF=fspecial('gaussian', 7, 10);

    V=.0001;

    BlurredNoisy=imnoise(imfilter(I, PSF), 'gaussian', 0, V);

    WT=zeros(size(I));

    WT(5:end-4, 5:end-4)=1;

    INITPSF=ones(size(PSF));

    FUN=inline('PSF+P1', 'PSF', 'P1');

    [J P]=deconvblind(BlurredNoisy, INITPSF, 20, 10*sqrt(V), WT, FUN, 0);

    subplot(221); imshow(BlurredNoisy);

    title('A=Blurred and Noisy');

    subplot(222); imshow(PSF, []);

    title('True PSF');

    subplot(223); imshow(J);

    title('Deblured Image');

    subplot(224);imshow(P,[]);

    title('Recovered PSF');

     

     

    Наверх

    deconvlucy - улучшение изображений с использованием метода Лаки-Ричардсона

    Синтаксис:

    J=deconvlucy(I, PSF)

    J=deconvlucy(I, PSF, NUMIT)

    J=deconvlucy(I, PSF, NUMIT, DAMPAR)

    J=deconvlucy(I, PSF, NUMIT, DAMPAR, READOUT)

    J=deconvlucy(I, PSF, NUMIT, DAMPAR, READOUT, WEIGHT)

    deconvlucy(I, PSF, NUMIT, DAMPAR, READOUT, WEIGHT, SUBSMPL)

    Описание:

    Функция J=deconvlucy(I, PSF) восстанавливает изображение I, размытое сверткой с функцией протяженности точки PSF и возможным добавлением шума. Алгоритм основывается на максимизации вероятностных характеристик результирующего изображения J, полученного на основании исходного изображения I. Исходный массив I должен быть числовым массивом.

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

    Функция J=deconvlucy(I, PSF, NUMIT) определяет число итераций выполнения функции свертки. Если это значение не определено, то по умолчанию оно равно 10.

    Функция J=deconvlucy(I, PSF, NUMIT, DAMPAR) определяет порог отклонения результирующего изображения от изображения I (в терминах стандартного отклонения пуассоновского шума). Итерации прекращаются для пикселов, значения которых отклоняются от исходных значений на величину больше DAMPAR. Такое подавление генерации шума в этих пикселах позволяет сохранить детальность изображений. По умолчанию это значение равно 0.

    Функция J=deconvlucy(I, PSF, NUMIT, DAMPAR, WEIGHT) определяет весовое значение каждого пиксела, на основании чего можно говорить о качестве камеры. Испорченные пикселы удаляются из растра путем присвоения им нулевого веса. Вместо этого пиксела берется соседний пиксел с скорректированным весом. По умолчанию размерность массива J совпадает с размерностью исходного изображения I.

    Функция J=deconvlucy(I, PSF, NUMIT, DAMPAR, WEIGHT, READOUT) определяет значение соответственного добавленного шума (например, фон или шум переднего плана), который может являться шумом считывания камеры. Параметр READOUT может быть представлен в виде изображения. По умолчанию его значение равно 0.

    Восстанавливающая свертка.

    Если исходное изображение I представляет собой массив пикселов, то результат представляет собой массив J с размерами 1х4, где

    J{1} содержит массив I, исходное изображение;

    J{2} содержит результат предпоследний итерации;

    J{3} содержит результат последний итерации;

    J{4} массив, который генерируется итерационным алгоритмом.

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

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

    Исходный массив I должен иметь формат представления данных uint8, uint16 или double. Параметры DAMPAR и READOUT имеют формат представления данных тот же, что и исходное изображение. Другие исходные данные имеют формат представления данных double. Формат представления данных результирующего изображения совпадает с форматом исходного изображения. 

    Пример:

    I=checkerboard(8);

    PSF=fspecial('gaussian', 7, 10);

    V=.0001;

    BlurredNoisy=imnoise(imfilter(I, PSF), 'gaussian', 0, V);

    WT=zeros(size(I));

    WT(5:end–4,5:end–4)=1;

    J1=deconvlucy(BlurredNoisy, PSF);

    J2=deconvlucy(BlurredNoisy, PSF, 20, sqrt(V));

    J3=deconvlucy(BlurredNoisy, PSF, 20, sqrt(V), [], WT);

    subplot(221); imshow(BlurredNoisy);

    title('A=Blurred and Noisy');

    subplot(222); imshow(J1);

    title('deconvlucy(A, PSF)');

    subplot(223); imshow(J2);

    title('deconvlucy(A,PSF,NI,DP)');

    subplot(224); imshow(J3);

    title('deconvlucy(A, PSF, NI, DP, [], WT)');

     

     

    Наверх

    deconvreg - улучшение изображений с использованием регуляризационной фильтрации

    Синтаксис:

    J=deconvreg(I, PSF)

    J=deconvreg(I, PSF, NOISEPOWER)

    J=deconvreg(I, PSF, NOISEPOWER, LRANGE)

    J=deconvreg(I, PSF, NOISEPOWER, LRANGE, REGOP)

    [J, LAGRA]=deconvreg(I, PSF, ...)

    Описание:

    Функция J=deconvreg(I, PSF) восстанавливает изображение I с помощью свертки и функции протяженности PSF с возможным прибавлением шума. Алгоритм является оптимальным в сенсе минимальной квадратической ошибки между расчетным и действительным изображением при его сглаживании.

    В функции J=deconvreg(I, PSF, NOISEPOWER) NOISEPOWER является параметром добавленного шума. По умолчанию это значение равно 0.

    В функции J=deconvreg(I, PSF, NOISEPOWER, LRANGE) параметр LRANGE является вектором, задающий ранг для поиска оптимального разрешения. Алгоритм ищет оптимальный коэффициент Лагранжа LAGRA в пределах ранга LRANGE. Когда параметр LRANGE скаляр, алгоритм присваивает параметру LAGRA значение равное LRANGE. По умолчанию ранг находится в пределах [1e-9 и 1e9].

    В функции J=deconvreg(I, PSF, NOISEPOWER, LRANGE, REGOP) параметр REGOP является регуляризационным оператором, который описывает свертку. По умолчанию регуляризационный оператор является лапласианом, который подвергает изображение операции усреднения. Размерность массива REGOP не должна превышать размерность изображения.

    Результирующие значение функции [J, LAGRA]=deconvreg(I, PSF, ...) в виде коэффициента Лагранжа, прибавляется к восстановленному изображению J.

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

    Изображение I должно иметь формат представления данных uint8, uint16 или double. Другие параметры должны иметь формат представления данных double. Массив J имеет тот же формат представления данных что и I.

    Пример:

    I=checkerboard(8);

    PSF=fspecial('gaussian', 7, 10);

    V=.01;

    BlurredNoisy=imnoise(imfilter(I, PSF), 'gaussian', 0, V);

    NOISEPOWER=V*prod(size(I));

    [J LAGRA]=deconvreg(BlurredNoisy, PSF, NOISEPOWER);

    subplot(221); imshow(BlurredNoisy);

    title('A=Blurred and Noisy');

    subplot(222); imshow(J);

    title('[J LAGRA]=deconvreg(A, PSF, NP)');

    subplot(223); imshow(deconvreg(BlurredNoisy, PSF, [], LAGRA/10));

    title('deconvreg(A, PSF, [], 0.1*LAGRA)');

    subplot(224); imshow(deconvreg(BlurredNoisy, PSF, [], LAGRA*10));

    title('deconvreg(A, PSF, [], 10*LAGRA)');

     

     

    Наверх

    deconvwnr - улучшение изображений с использованием фильтра Винера

    Синтаксис:

    J=deconvwnr(I, PSF)

    J=deconvwnr(I, PSF, NSR)

    J=deconvwnr(I, PSF, NCORR, ICORR)

    Описание:

    Функция J=deconvwnr(I, PSF) восстанавливает изображение I, которое было испорчено сверткой с функцией протяженности точки PSF и возможным дополнением шума. Алгоритм оптимизируется с точки зрения наименьшей среднеквадратической ошибки между вычисляемым и исходным изображениями и использует матрицу корреляции изображения и шума. При отсутствии шумовой составляющей, фильтр Винера превращается в идеальный инверсный фильтр.

    В функции J=deconvwnr(I, PSF, NSR) параметр NSR указывает на соотношение сигнал/шум. Величина NSR является скаляром или массивом, размерность которого такая же как I. По умолчанию это значение равно 0.

    В функции J=deconvwnr(I, PSF, NCORR, ICORR) параметры NCORR и ICORR являются автокорреляционными функциями шума и исходного изображения соответственно. Размерность NCORR и ICORR не должна превышать размерность исходного изображения. Векторы NCORR или ICORR представляют автокорреляционную функцию с такой же размерностью как и PSF. Если PSF является массивом, одномерная автокорреляционная функция экстраполируется суммированием всех неединичных размерностей PSF. 

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

    Исходный массив I должен иметь формат представления данных uint8, uint16 или double. Другие исходные данные должны иметь формат представления данных double. Формат представления данных массива J такой же как и массива I.

    Пример:

    I=checkerboard(8);

    noise=0.1*randn(size(I));

    PSF=fspecial('motion', 21, 11);

    Blurred=imfilter(I, PSF, 'circular');

    BlurredNoisy=im2uint8(Blurred+noise);

    NSR=sum(noise(:).^2)/sum(I(:).^2);% шумовая составляющая

    NP=abs(fftn(noise)).^2;

    NPOW=sum(NP(:))/prod(size(noise));

    NCORR=fftshift(real(ifftn(NP)));% центрированная автокорреляционная функция шума 

    IP=abs(fftn(I)).^2;

    IPOW=sum(IP(:))/prod(size(I));

    ICORR=fftshift(real(ifftn(IP)));% центрированная автокорреляционная функция изображения

    ICORR1=ICORR(:, ceil(size(I, 1)/2));

    NSR=NPOW/IPOW;

    subplot(221); imshow(BlurredNoisy, []);

    title('A=Blurred and Noisy');

    subplot(222); imshow(deconvwnr(BlurredNoisy, PSF, NSR), []);

    title('deconvwnr(A, PSF, NSR)');

    subplot(223); imshow(deconvwnr(BlurredNoisy, PSF, NCORR, ICORR), []);

    title('deconvwnr(A, PSF, NCORR, ICORR)');

    subplot(224); imshow(deconvwnr(BlurredNoisy, PSF, NPOW, ICORR1), []);

    title('deconvwnr(A, PSF, NPOW, ICORR_1_D)');

     

     

    Наверх

    ippl - проверка наличия библиотеки функций (Intel Performance Primitives Library (IPPL))

    Синтаксис:

    TF=ippl

    [TF B]=ippl

    Описание:

    Библиотека функций (IPPL) содержит коллекцию основных функций (методов), которые используются при обработке сигналов и изображений. В основу большинства этих методов положены принципы параллельной обработки, а также другие современные технологии. Эта концепция является основой архитектуры процессоров Intel. Библиотека методов IPPL используется также некоторыми функциями Image Processing Toolbox для ускорения вычислений.

     

    Выражение TF=ippl возвращает единицу 1 (true), когда библиотека методов IPPL является доступной и 0 (false) в других случаях.

    Функция [TF B]=ippl возвращает массив B. Каждая строка B содержит описание специальных модулей библиотеки IPPL.

     

    Когда библиотека методов IPPL является доступной, то функции арифметической обработки изображений пакета Image Processing Toolbox (imabsdiff, imadd, imsubtract, imdivide, immultiply и imlincomb) и функция imfilter работают с повышенным быстродействием. Это придает им большое преимущество.

    Примечание.

     

    Библиотека функций IPPL в зависимости от условий работает только с некоторыми типами данных. Более детальная информация размещена в описании функций в главе Помощь (help sections), которая станет доступной при активации библиотеки методов IPPL.

    Библиотека методов IPPL может изменятся.

     

     

    Наверх

    getrangefromclass - получение динамического диапазона изображений на основе их формата

    Синтаксис:

    range = getrangefromclass(I)

    Описание:

    Функция range = getrangefromclass(I) на основе знаний о типе формата возвращает динамический диапазон изображения I. range представляет собой двухэлементный вектор, описывающий динамический диапазон.

    Если окно figure не было открыто, то функция imgcf создает новое окно figure.

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

    Массив изображения I должен быть представлен в формате uint8, uint16, int16, logical, single или double. Результат range представляется в формате double.

    Примечание:

    Для данных, представленных в формате single и double, функция getrangefromclass возвращает диапазон [0 1]. Для целочисленных данных функция getrangefromclass возвращает диапазон соответственно их формату. Например, если данные представлены в формате uint8, динамический диапазон равен [0 255].

    Пример:

    Рассмотрим пример считывания 16-битного DICOM-изображения и определение его диапазона.

    CT = dicomread('CT-MONO2-16-ankle.dcm'); r = getrangefromclass(CT)

     

     

    Наверх

    graycomatrix - полутоновая матрица смежности для изображений

    Синтаксис:

    glcm = graycomatrix(I)

    glcms = graycomatrix(I,param1,val1,param2,val2,...)

    [glcms,SI] = graycomatrix(...)

    Описание:

    Функция glcms = graycomatrix(I) создает полутоновую матрицу смежности (gray-level co-occurrence matrix (GLCM)) для изображения I. Функция graycomatrix создает GLCM на основе вычислений того, как часто пиксель со значением интенсивности i встречается по горизонтали с пикселем со значением интенсивности j. (Также можно описать их пространственное взаиморасположение с использованием параметра 'Offsets'.) Каждый элемент (i,j) в матрице смежности glcm описывает число случаев, когда пиксель со значением i встречается с пикселем со значением j.

    Для определения динамического диапазона изображения на основе матрицы смежности GLCM требуется дополнительная обработка, поскольку функция graycomatrix масштабирует значения в I. Когда I представляет собой бинарное изображение, функция graycomatrix масштабирует изображение до двух значений. Когда I представляет собой яркостное изображение, то функция graycomatrix масштабирует его до восьми значений. Число полутоновых значений определяет размерность GLCM. Также существует возможность описания уровней серого в матрице смежности GLCM с помощью параметра 'NumLevels' и путем, которым функция graycomatrix масштабирует значения с использованием параметра 'GrayLimits'.

    На рисунке показано как функция graycomatrix вычисляет значение элемента матрицы смежности glcm(1,1). Этот элемент содержит значение 1, потому что есть только один случай совместного появления в горизонтальном расположении двух пикселей со значением 1. Как показано на рисунке элемент glcm(1,2) принимает значение 2, поскольку в данном примере два раза встречается совместное появление пикселей со значениями 1 и 2 в горизонтальном размещении.

    Функция glcms = graycomatrix(I,param1,val1,param2,val2,...) возвращает одну или больше полутоновых матриц смежности, что зависит от значений пар параметр/значение. Название параметра задается в виде аббревиатуры, что не влияет на его сущность.

    Параметры:

    В таблице приведен список параметров в алфавитном порядке.

    Параметр Описание По умолчанию
    GrayLimits Двухэлементный вектор [low high], который описывает значения уровней серого в I и используется при их линейном масштабировании. Уровни серого, которые меньше или равны значению low приравниваются 1. Значения серого, которые больше или равны high приравниваются к NumLevels. Когда graylimits установлен в виде [], то функция graycomatrix использует минимальное и максимальное значение уровня серого в качестве границ [min(I(:)) max(I(:))]. Минимум и максимум зависит от формата, например, для формата double диапазон равен [0 1], а для формата int16 - [-32768 32767]
    NumLevels При описании уровней серого в виде целых чисел могут использоваться масштабированные значения I. Например, когда NumLevels равно 8, то функция graycomatrix вычисляет целые значения в I между 1 и 8. Число уровней серого определяет размерность матрицы смежности (glcm). 8 (числовые)
    2 (бинарные)
    Offset Массив целых чисел с размерностью px2, описывающий расстояние между пикселем интереса и окрестностью. Каждая строка в массиве представляется двухэлементным вектором [row_offset, col_offset], который описывает отношение пары пикселей. Параметр row_offset представляет собой число строк между пикселем интереса и окрестностью. Также это можно представить в так называемом угловом представлении. 
    Приведем пример.
    Угол Направление
    0 [0 D]
    45 [-D D]
    90 [-D 0]
    135 [-D -D]

    На рисунке проиллюстрировано массив offset = [0 1; -1 1; -1 0; -1 -1]
    [0 1]

    Функция [glcm, SI] = graycomatrix(...) возвращает масштабированное изображение SI, используя вычисления уровней серого матрицы смежности. Значения в SI находятся между 1 и NumLevels.

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

    Массив I может быть представлен двумерным числовым или логическим не разреженным массивом действительных чисел. SI представляет собой матрицу в формате double, размерность которой совпадает с I. Матрица смежности glcms представляет собой массив в формате double с размерностью 'NumLevels' 'NumLevels' P, где P определяется из 'Offset'.

    Примечание:

    Полутоновую матрицу смежности называют еще полутоновой матрицей пространственных зависимостей.

    Функция graycomatrix игнорирует пары пикселей, если они содержат значение NaN.

    Функция graycomatrix заменяет положительные значения элементов Infs на значения NumLevels, а также отрицательные Infs на значения 1.

    Функция graycomatrix игнорирует крайние пиксели изображения.

    Пример:

    Вычислим уровни серого матрицы смежности и сформируем масштабированную версию изображения SI, используя функцию graycomatrix для генерации GLCM.

    I = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7];

    [glcm,SI] = graycomatrix(I,'NumLevels',9,'G',[])

    Вычислим уровни серого матрицы смежности для полутонового изображения circuit.tif.

    I = imread('circuit.tif');

    glcm = graycomatrix(I,'Offset',[2 0]);

     

     

    Наверх

    graycoprops - свойства полутоновых матриц смежности

    Синтаксис:

    stats = graycoprops(glcm, properties)

    Описание:

    Функция stats = graycoprops(glcm, properties) вычисляет статистическое описание в виде свойств полутоновой матрицы смежности glcm. Эта матрица представляет собой массив с размерностью mxnxp. Если матрица смежности glcm является частью иного массива GLCM, тогда результат stats является статистическим массивом для каждой матрицы смежности glcm.

    Функция graycoprops нормирует уровни серого матрицы смежности (GLCM). Каждый элемент (r,c) в нормированной матрице GLCM характеризует местонахождение пикселей, определяя пространственное отношение уровней серого r и c на изображении. Функция graycoprops использует нормированную матрицу GLCM для вычисления значений ее свойств.

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

    Параметр Описание Формула
    'Contrast' Возвращает меру контраста интенсивностей между пикселем и окрестностью или целым изображением.
    Range = [0 (size(GLCM,1)-1)^2]
    Если контраст равен нулю, то изображение представляется в виде матрицы с одинаковым уровнем яркости всех элементов.
    'Correlation' Возвращает меру корреляции между пикселем и окрестностью или целым изображением. 
    Range = [-1 1]
    Если корреляция равна 1 или -1, то это говорит о наилучшей положительной или отрицательной корреляции изображений. Если корреляция равна NaN, то изображение представляется в виде матрицы с одинаковым уровнем яркости всех элементов.
    'Energy' Возвращает сумму квадратов элементов в GLCM.
    Range = [0 1]
    Такие действия аналогичны вычислению энергии элементов изображения и если она равна 1, то изображение представляется в виде матрицы с одинаковым уровнем яркости всех элементов.
    'Homogeneity' Возвращает значение, которое характеризует плотность распределения элементов в матрице смежности GLCM относительно ее диагонали.
    Range = [0 1]
    Гомогенность равна 1 для диагонали GLCM.

     

    Результат представляется в виде структуры, поля которой описывают соответствующие свойства. Каждое поле представляется в виде массива с размерностью 1xp, где p является числом уровней серого в матрице смежности в GLCM. Например, когда GLCM представляется массивом с размерностью 8x8x3, то свойство 'Energy', которое в stats представлено в поле Energy, содержит массив с размерностью 1x3.

    Параметры:

    Такое свойство как энергия можно интерпретировать также как монотонность или второй угловой момент. А контраст известен еще также как мера различия или инерция.

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

    Массив glcm должен быть представлен логическим или числовым массивом, содержащим действительные неотрицательные целые числа из ограниченного диапазона.

    Пример:

    GLCM = [0 1 2 3;1 1 2 3;1 0 2 0;0 0 0 3];

    stats = graycoprops(GLCM)

    I = imread('circuit.tif');

    GLCM2 = graycomatrix(I,'Offset',[2 0;0 2]);

    stats = graycoprops(GLCM2,{'contrast','homogeneity'})

    Сопутствующие функции: GRAYCOMATRIX.

     

     

    Наверх

    hough - преобразование Хо

    Синтаксис:

    [H, theta, rho] = hough(bw)

    Описание:

    Функция [H, theta, rho] = hough(BW) реализует стандартное преобразование Хо (Standard Hough Transform (SHT)) бинарного изображения BW. Также функцию hough можно использовать для детектирования линий на изображении. Результат работы функции представляется в виде матрицы преобразования Хо H. Параметры theta (в градусах) и rho представляют массивы значений rho и theta, на основе которых генерируется матрица преобразований Хо.

    Функция [H, theta, rho] = hough(BW,param1,val1,param2,val2) описывает пары параметр/значение, приведенные в таблице. Название параметров поданы в виде аббревиатуры, что не влияет на их суть.

    Параметр Описание
    'ThetaResolution' Скаляр вещественных чисел между 0 и 90, описывающий пространственные (в градусах) преобразования Хо вдоль оси theta. По умолчанию это значение равно 1.
    'RhoResolution' Скаляр вещественных чисел между 0 и norm(size(BW)), который описывает пространственные преобразования Хо вдоль оси rho. По умолчанию это значение равно 1.

     

    Примечание:

    Функция hough является инструментом для реализации стандартного преобразования Хо (SHT). При этом преобразовании используется параметрическое представление линии:

    rho = x*cos(theta) + y*sin(theta)

    Переменная rho является расстоянием от начала координат до линии вдоль вектора, перпендикулярного к ней. theta представляет собой угол между осью x и этим вектором. Функция hough генерирует параметры пространственной матрицы, где строка и столбец представляют соответственно параметры rho и theta. Пиковое значение в этом пространстве представляет потенциальную линию на исходном изображении.

    Размерность матрицы преобразований Хо H равна NRHO NTHETA, где NRHO = 2*ceil(norm(size(BW))/RhoResolution)-1, а NTHETA = 2*ceil(90/ThetaResolution). Значение угла Theta находится в диапазоне [-90, 90) градусов, а значение rho - в диапазоне от -DIAGONAL до DIAGONAL, где DIAGONAL = RhoResolution*ceil(norm(size(BW))/RhoResolution). Отметим, что если 90/DTHETA не целое число, фактический угол в пространстве равен 90/ceil(90/DTHETA).

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

    Изображение BW должно быть представлено в виде двумерного не разреженного логического, числового вещественного массива.

    Пример:

    Проведем вычисления и визуализируем преобразования Хо для изображения.

    RGB = imread('gantrycrane.png');

    I = rgb2gray(RGB); % Преобразование в яркостное изображение

    BW = edge(I,'canny'); % Выделение границ

    [H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);

    % Отображение исходного изображения

    subplot(2,1,1);

    imshow(RGB);

    title('gantrycrane.png');

    % Отображение матрицы преобразований Хо

    subplot(2,1,2);

    imshow(imadjust(mat2gray(H)),'XData',T,'YData',R,...

    'InitialMagnification','fit');

    title('Hough transform of gantrycrane.png');

    xlabel('\theta'), ylabel('\rho');

    axis on, axis normal, hold on;

    colormap(hot);

     

     

    Наверх

    houghpeaks - локализация пиков при преобразованиях Хо

    Синтаксис:

    peaks = houghpeaks(H,numpeaks)

    Описание:

    Функция peaks = houghpeaks(H,numpeaks) локализирует пики матрицы преобразований Хо H, генерируемой функцией hough. Параметр numpeaks описывает максимальное число локализированных пиков.

    Функция возвращает данные о пиках в виде матрицы с размерностью Qx2, где Q принимает значение от 0 до numpeaks. В параметре Q содержатся данные о координатах пиков. Если параметр numpeaks упущен, то по умолчанию он принимает значение 1.

    Функция peaks = houghpeaks(...,param1,val1,param2,val2) описывает пары параметр/значение, перечисленные в следующей таблице. Название параметров поданы в виде аббревиатуры, что не влияет на их суть.

    Параметр Описание
    'Threshold' Неотрицательный скаляр, значения которого описывают значение порога по отношению к их пикам. Значение порога может изменяться в диапазоне от 0 до Inf. По умолчанию этот параметр принимает значение 0.5*max(H(:)).
    'NHoodSize' Двухэлементный вектор положительных непарных целых чисел: [M N]. Параметр 'NHoodSize' учитывает влияние окрестности. По умолчанию: наименьшее нечетное значение больше или равно size(H)/50.

     

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

    H представляет собой результат работы функции hough. Параметр numpeaks представлен положительным скаляром целых чисел.

    Пример:

    Приведем пример локализации и отобразим два пика при преобразованиях Хо для изображения circuit.tif.

    I = imread('circuit.tif');

    BW = edge(imrotate(I,50,'crop'),'canny');

    [H,T,R] = hough(BW);

    P = houghpeaks(H,2);

    imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');

    xlabel('\theta'), ylabel('\rho');

    axis on, axis normal, hold on;

    plot(T(P(:,2)),R(P(:,1)),'s','color','white');

     

     

    Наверх

    imdisplayrange - отображение динамического диапазона яркостей изображения

    Синтаксис:

    imdisplayrange

    imdisplayrange(h)

    imdisplayrange(hparent,himage)

    hpanel=imdisplayrange(...)

    Описание:

    Функция imdisplayrange выдает информацию о динамическом диапазоне яркостей изображения в текущем окне отображения. Эта информация касается изображений в текущем окне отображения.

    Информация отображается при помощи объекта uipanel, размещенного в нижнем правом углу изображения. Она содержит текстовую строку "Display range:", которая показывает значения диапазона яркостей элементов изображения, представленного в данном окне отображения.

    Для индексных, полноцветных или бинарных изображений не всегда применяется понятие отображаемого диапазона. Поэтому результат может быть представлен в виде пустого массива ([]).

    Функция imdisplayrange(h) формирует инструментарий отображения диапазона в окне figure через описание h, где hуказывает на некоторые параметры изображения. Эти параметры должны содержать описание как минимум одного объекта изображения.

    Функция imdisplayrange(hparent, himage) формирует инструментарий отображения диапазона через параметр hparent, который отображает диапазон визуализации через himage.

    Примечание.

    Инструментарий отображения диапазона может работать с многослойными (типа RGB) изображениями. Когда курсор находится не на изображении в окне отображения, тогда диапазон отображения представляется в виде текстовой строки [black white].

    Пример:

    Визуализируем изображение и применим инструментарий отображения диапазона.

    imshow('bag.png');

    imdisplayrange;

     

    Внесем 16-битное DICOM-изображение и визуализируем его. Диапазон отображения будет установлен по умолчанию.

    dcm = dicomread('CT-MONO2-16-ankle.dcm');

    subplot(1,2,1), imshow(dcm);

    subplot(1,2,2), imshow(dcm,[]);

    imdisplayrange;

     

     

    Наверх

    entropy - энтропия интенсивности элементов изображения

    Синтаксис:

    E = entropy(I)

    Описание:

    Функция E = entropy(I) возвращает параметр E, скалярное значение которого представляет энтропию интенсивности элементов изображения I. Энтропия является статистической мерой неопределенности, которая используется для характеристики текстуры исходного изображения. Энтропия определяется как

     -sum(p.*log(p)),

     

    где p содержит отсчеты гистограммы, возвращаемые функцией imhist. По умолчанию, энтропия использует 2 отсчета для бинарных изображений и 256 для изображений, представленных массивом в формате uint8, uint16 или double.

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

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

    Исходное изображение может представляться в виде непустого, неразреженного массива действительных чисел в формате logical, uint8, uint16 или double.

    Пример:

    I = imread('circuit.tif');

    J = entropy(I)

     

     

    Наверх

    entropyfilt - локальная энтропия интенсивностей элементов изображения

    Синтаксис:

    J = entropyfilt(I)

    J = entropyfilt(I,NHOOD)

    Описание:

    Функция J = entropyfilt(I) возвращает массив J, где каждый пиксель содержит значение энтропии локальной окрестности с размерами 9х9 элементов с центром в соответствующем пикселе исходного изображения I. Массив I может быть произвольной размерности. Когда массив I имеет больше, чем две размерности, функция entropyfilt интерпретирует его как многомерное яркостное изображение. Результат, который представлен в виде массива J, имеет ту же размерность, что и массив исходного изображения I.

    Для пикселей, расположенных на краю изображения I, функция entropyfilt использует симметрическое дополнение. При симметрическом дополнении, значения дополненных пикселей зеркально отражаются от крайнего пикселя изображения I.

    Функция J = entropyfilt(I,NHOOD) выполняет фильтрацию исходного изображения I на основе энтропии, где локальная окрестность описывается параметром NHOOD. Параметр NHOOD может представляться многомерным массивом нулей и единиц, где ненулевые элементы характеризуют окрестность. Размер NHOOD's должен быть непарным по каждой размерности.

    Например, функция entropyfilt использует локальную окрестность 9х9. Тогда центр этой локальной окрестности будет определен как floor((size(NHOOD) + 1)/2). Для описания различной формы локальных окрестностей (например, в виде диска) используется функция strel для создания структурного элемента объекта и дальнейшего его использования в функции getnhood при формировании окрестности на основе этого структурного элемента.

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

    Исходное изображение может представляться в виде неразреженного массива действительных чисел в формате logical, uint8, uint16 или double. Параметр NHOOD должен быть логическим или цифровым и содержать нули или единицы. Результирующий массив J имеет формат представления данных double.

    Пример:

    I = imread('circuit.tif'); 

    J = entropyfilt(I); 

    imshow(I), figure, imshow(J,[]); 

     

     

    Наверх

    impixelinfoval - средства получения информации о пикселе без текстовых меток

    Синтаксис:

    hcontrol = impixelinfoval(hparent,himage)

    Описание:

    Функция hcontrol = impixelinfoval(hparent,himage) создает инструментарий получения информации о пикселе посредством параметра hparent, который доставляет информацию о пикселе изображения, описанном в himage. Параметр hparent вводиться вручную в окне отображения или объекте uipanel.

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

    При создании объекта impixelinfo используется объект uipanel, размещенный в левом нижнем угле окна отображения. Он содержит текстовую метку "Pixel Info:", далее размещены значения координат пикселей вдоль соответствующих осей x и y.

    Отображаемая информация зависит также от типа представленного изображения. Для более детальной информации см. функцию impixelinfo.

    Для копирования значения пикселя в буфер используется контекстное меню Copy pixel info.

    Пример:

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

    ankle = dicomread('CT-MONO2-16-ankle.dcm');

    h = imshow(ankle,[]);

    hText = impixelinfoval(gcf,h);

    set(hText,'FontWeight','bold')

    set(hText,'FontSize',10)

     

     

    Наверх

    getimagemodel - восстановление моделей объектов изображения на основе объектов изображения

    Синтаксис:

    imgmodel = getimagemodel(himage)

    Описание:

    Функция imgmodel = getimagemodel(himage) возвращает модель объектов изображения, ассоциированных с himage. Параметр himage может управлять объектом изображения или массивом объектов изображения.

    Возвращаемые функцией imgmodel значения описывают модель объектов изображения. Если параметр himageпредставлен массивом управления объектами изображения, то результат imgmodel представляет массив моделей объектов изображения.

    Если параметр himage не связан с моделью объекта изображения, тогда функция создает его.

    Пример:

    h = imshow('bag.png');

    imgmodel = getimagemodel(h);

     

     

    Наверх

    impixelregion - средства просмотра локального массива пикселей

    Синтаксис:

    impixelregion

    impixelregion(h)

    hfig = impixelregion(...)

    Описание:

    Функция impixelregion создает средства отображения локального массива пикселей изображения, представленного в текущем окне просмотра.

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

    Функция impixelregion(h) создает средства отображения локального массива пикселей изображения, связанных с объектом, описанным параметром h. Параметр h может описывать окно просмотра, оси, а также другие объекты изображения. Если параметр h описывает оси или окно просмотра, то функция impixelregion ассоциируется с первым изображением, размещенным в текущем окне просмотра.

    Функция hfig=impixelregion(...) возвращает значение hfig, которое управляет диалоговым окном средств отображения локального массива пикселей изображения.

    Примечание:

    Для создания инструментария отображения локального массива пикселей изображения, который может быть встроен в существующее окно просмотра или uipanel, используется функция impixelregionpanel.

    Пример:

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

    imshow peppers.png

    impixelregion

     

     

    Наверх

    impixelregionpanel - панель инструментария отображения локального массива пикселей изображения

    Синтаксис:

    hpanel = impixelregionpanel(hparent,himage)

    Описание:

    Функция hpanel = impixelregionpanel(hparent,himage) создает панель инструментария отображения локального массива пикселей, связанного с изображением, описанным параметром himage. Пиксели этого изображения будут отображаться. Параметр hparent управляет окном просмотра или объектом uipanel, который связан со средствами просмотра локального массива пикселей.

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

    Примечание:

    Для создания средств отображения локального массива пикселей в отдельном окне используется функция impixelregion.

    Пример:

    himage = imshow('peppers.png');

    hfigure = figure;

    hpanel = impixelregionpanel(hfigure, himage);

     

    Установка размещения позиции в нижнем левом углу окна просмотра.

    set(hpanel, 'Position', [0 0 .5 .5])

     

     

    Наверх

    impixelinfo - средства получения информации о пикселях

    Синтаксис:

    impixelinfo

    impixelinfo(h)

    impixelinfo(hparent,himage)

    hpanel = impixelinfo(...)

    Описание:

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

    Эти средства представляются объектом uipanel, который размещен в нижнем левом углу изображения. Он содержит текстовую строку "Pixel info:" с соответствующими координатами пикселя и значением, которое он принимает на этой позиции изображения.

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

    Тип изображения Информация о пикселях, которая выдается по умолчанию Пример
    Яркостное (X,Y) Яркость (13,30) 82
    Яркостное (X,Y) <индекс> [R G B] (2.6) <4> [0.29 0.05 0.32]
    Бинарное (X,Y) BW (12,1) 0
    Полноцветное (X,Y) [R G B] (19,10) [15 255 10]

    При необходимости отображения информации вне метки "Pixel Info", используется функция impixelinfoval.

    Функция impixelinfo(h) создает средства отображения информации о пикселях в окне просмотра, описанном через h, где параметр h описывает объекты изображения. Такие объекты как оси, uipanel или окно отображения должны содержать как минимум один объект.

    Функция impixelinfo(hparent,himage) создает средства отображения информации о пикселях в hparent, которое поставляет информацию о пикселях в himage. Параметр himage служит для описания изображений. А параметр hparent описывает окно просмотра или объект uipanel, который содержит средства описания пикселей изображений.

    Функция hpanel=impixelinfo(...) передает управление средствами описания пикселями объекту uipanel.

    Примечание:

    Для копирования информации о пикселях в буфер, следует навести курсор на нужный пиксель и нажать правую кнопку мыши. Отобразиться контекстное окно, в котором следует выбрать пункт Copy pixel info.

    Пример:

    Приведем пример отображения изображения и добавления средств получения информации о пикселях в окно просмотра. В примере показано также возможность изменения размещения этих средств в окне просмотра с использованием свойств объекта uipanel.

    h = imshow('hestain.png');

    hp = impixelinfo;

    set(hp,'Position',[150 290 300 20]);

     

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

    figure

    subplot(1,2,1), imshow('liftingbody.png');

    subplot(1,2,2), imshow('autumn.tif');

    impixelinfo;

     

     

    Наверх

    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 читается из файла и выводится на экран (рис. 1 а). Строится гистограмма яркостей пикселов исходного изображения (рис. 1 б). Функция histeq выравнивает гистограмму изображения I. Результат преобразования и гистограмма яркостей его пикселов выводятся на экран (соответственно рис. 1 в и рис. 1 г).

    %Пример демонстрирует повышение контраста изображения

    %с помощью выравнивания гистограммы.

    %Чтение исходного изображения и вывод его на экран.

    I=imread(‘image1.tif’);

    imshow(I);

    %Построение гистограммы исходного изображения.

    figure, imhist(I);

    %Выравнивание гистограммы.

    I=histeq(I, 80);

    %Вывод преобразованного изображения на экран.

    Figure, imshow(I);

    %Вывод гистограммы преобразованного изображения.

    figure, imhist(I);

    Сопутствующие функции: BRIGHTEN, IMADJUST, IMHIST, RGB2NTSC.

    Ссылки на литературу:

    1. Прэтт У. Цифровая обработка изображений: В 2 т. М.: Мир, 1982.

    2. Павлидис Т. Алгоритмы машинной графики и обработки изображений. М.: Радио и связь, 1986.

    а)                                                                             б)

     

    в)                                                                             г)

    Рис. 1.

     

     

    Наверх

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

    Синтаксис:

    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.

    1a.gif (2228 bytes)

    а)

    1b.gif (2233 bytes)

    б)

    1c.gif (2205 bytes)

    с)

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

    Функция newmap=imadjust(map, [low high], [boton top], gamma) создает новую палитру newmap путем контрастирования исходной палитры map. Преобразование осуществляется аналогично преобразованию полутонового изображения отдельно для каждой R-, G-, B-составляющих. Диапазоны преобразования интенсивностей составляющих [low high] и [boton top], а также показатель gamma задаются одинаковыми для всех составляющих. Различные диапазоны преобразования интенсивностей и показатель gamma для R-, G-, B-составляющих можно задать с помощью функции 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. Преобразование осуществляется аналогично преобразованию полутонового изображения отдельно для каждой из 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]).

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

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

    Пример.

    Полутоновое изображение I читается из файла и отображается на экране (рис. 2 а). Для анализа диапазона яркостей исходного изображения I строится гистограмма яркостей пикселов с помощью функции imhist(I) (рис.2 б). По гистограмме видно, что пикселы изображения I имеют яркости в диапазоне [0, 75], изображение I недостаточно контрастное. Функция imadjust “растягивает” исходный диапазон яркостей на диапазон от минимально возможной яркости до максимально возможной. Результат преобразования выводится на экран в новое окно (рис. 2 в). Гистограмма яркостей пикселов результирующего изображения показана на рис. 2 г. Результирующее изображение контрастнее, чем исходное.

    %Пример демонстрирует контрастирование изображения.

    %Чтение исходного изображения и вывод его на экран.

    I=imread(‘gory.tif’);

    imshow(I);

    %Построение гистограммы исходного изображения.

    figure, imhist(I);

    %Контрастирование исходного изображения.

    I=imadjust(I, [0 75]/255, [ ], 1);

    %Вывод преобразованного изображения на экран.

    figure, imshow(I);

    %Вывод гистограммы преобразованного изображения.

    figure, imhist(I);

    а)                                                                              б)

     

    г)                                                                                    д)

    Рис. 2.

     

     

    Наверх

    brighten - управление яркостью палитры

    Синтаксис:

    brighten(beta)

    newmap=brighten(beta)

    newmap=brighten(map, beta)

    brighten(fig, beta)

    Описание:

    Функция brighten(beta) заменяет текущую палитру, используемую для отображения рисунков в текущем окне figure, на более яркую или более темную в зависимости от значения параметра beta. Для вывода изображения в текущее окно figure будет использоваться новая палитра. Текущая палитра будет ярче, если beta принадлежит диапазону (0, 1], и темнее, если beta принадлежит диапазону [-1, 0). Необходимо отметить, что в результате действия функции brightenизменяется только яркость цветов палитры, значение цветового тона остается неизменным. Последовательное применение функции  brighten с параметром beta и -beta оставляет палитру без изменений.

    Функция newmap=brighten(beta) возвращает палитру, полученную преобразованием текущей палитры, но не меняет текущую палитру. Таким образом, цвета при отображении изображения в текущем окне не изменяются.

    Функция newmap=brighten(map, beta) возвращает палитру, полученную преобразованием палитры map, но не меняет текущую палитру. Цвета при отображении изображения в текущем окне не изменяются.

    Функция brighten(fig, beta) изменяет яркость палитры, используемой для окна с описателем fig.

     

     

    Наверх

    imnoise - добавление шума

    Синтаксис:

    Id=imnoise(Is, type, params)

    Описание:

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

    Функция imnoise может добавлять шум трех типов. Тип шума задается строковой константой type, которая может принимать одно из следующих значений:

    - ‘gaussian’ - для гауссова белого шума;

    - ‘salt&pepper’ - для импульсного шума (шум типа “соль и перец”);

    - ‘speckle’ - для мультипликативного шума.

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

    Id=imnoise(Is, ‘gaussian’, m, v) добавляет к изображению Is гауссов белый шум с математическим ожиданием m и дисперсией v. По умолчанию математическое ожидание равно 0, а дисперсия - 0.01.

    Id=imnoise(Is, ‘salt&pepper’, d) добавляет к изображению Is импульсный шум. Параметр d определяет плотность шума и равен доле искаженных пикселов. По умолчанию d=0.05.

    Id=imnoise(Is, ‘speckle’, v) добавляет к изображению Is мультипликативный шум Id=Is+n*Is, где n - равномерно распределенный случайный шум с математическим ожиданием 0 и дисперсией v. По умолчанию v=0.04.

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

     

     

    Наверх

    roifill - заполнение областей интереса

    Синтаксис:

    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);

    а)                                 б)

    Рис. 1.

     

     

    Наверх

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

    Синтаксис:

    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)

     

     

    Наверх

    edgetaper - виделение краев с использованием функции протяженности точек

    Синтаксис:

    J=edgetaper(I, PSF)

    Описание:

    Функция J=edgetaper(I, PSF) размывает контуры исходного изображения I, используя функцию протяженности точки PSF. Результирующее изображение J представляет собой взвешенную сумму исходного изображения и его размытой версии. Массив весов определяется автокорреляционной функцией от PSF, массив J соответствует массиву I в центре области и равен размытой версии I около контуров.

    Функция edgetaper очень эффективно используется в методах для преобразования размытых изображений, которые используют дискретное преобразование Фурье, например, deconvwnr, deconvreg и deconvlucy.

    Примечание. Размерность функции PSF не может превышать половины любой размерности изображения.

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

    Массив I и PSF должны иметь формат представления данных uint8, uint16 или double. Массив J имеет формат представления данных тот же, что и I.

    Пример:

    I=imread('cameraman.tif'); 

    PSF=fspecial('gaussian', 60, 10);

    J=edgetaper(I, PSF);

    subplot(1, 2, 1); imshow(I, []); title('original image');

    subplot(1, 2, 2); imshow(J, []); title('edges tapered');

     

     

    Наверх

    otf2psf - преобразование оптической функции в функцию протяженности точек 

    Синтаксис:

    PSF=otf2psf(OTF)PSF=otf2psf(OTF, OUTSIZE)

    Описание:

    Функция PSF=otf2psf(OTF) вычисляет обратное быстрое преобразование Фурье (ОБПФ) массива оптической функции и создает функцию протяженности точки с тем же центром. По умолчанию, функция протяженности точки имеет ту же размерность, что и оптическая функция.

     

    Функция PSF=otf2psf(OTF, OUTSIZE) выполняет преобразование оптической функции в массив функции протяженности точки, а параметр OUTSIZE описывает размер результирующей функции протяженности точки. Отметим, что размер результирующего массива не должен превышать размер оптической функции.

    Рассмотренные функции используются при реализации операций конволюции и деконволюции изображений.

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

    Функция оптического преобразования должна быть представлена неразреженным числовым массивом. Функция протяженности точки имеет формат представления данных double.

    Пример.

    PSF=fspecial('gaussian', 13, 1);OTF=psf2otf(PSF, [31 31]); % PSF-->OTFPSF2=otf2psf(OTF,size(PSF)); % OTF-->PSF2subplot(1, 2, 1); surf(abs(OTF)); title('|OTF|');axis square; axis tightsubplot(1, 2, 2); surf(PSF2); title('соответствует PSF');axis square; axis tight

     

     

    Наверх

    adapthisteq - Выполнение контрастно ограниченной адаптивной эквализации гистограммы 

    Синтаксис:

    J=adapthisteq(I)J=adapthisteq(I, param1, val1, param2, val2...)

    Описание:

     

    Функция J=adapthisteq(I) улучшает контраст полутонового изображения I путем преобразования значений его элементов методом контрастно ограниченной адаптивной эквализации гистограммы (CLAHE).

    Метод CLAHE более эффективный при работе с небольшими локальными окрестностями изображений, чем с полными изображениями. При улучшении контраста локальных окрестностей используется описание гистограммы, которое определяется с помощью параметра 'Distribution'. Во избежание появления ложных границ при обработке локальных окрестностей используются также соседние окрестности, которые объединяются с помощью билинейной интерполяции. Контраст, особенно на однородных окрестностях, должен быть ограниченным во избежание усиления шумовой составляющей.

     

    Функция J=adapthisteq(I, param1, val1, param2, val2...) определяет несколько дополнительных пар параметров (значений), описание которых приведено в таблице. Названия некоторых параметров приведены в сокращенном виде.

    Параметр Значение
    'NumTiles' Двухэлементный вектор целых чисел, описывающих число локальных окрестностей [M N]. Оба параметра M и N должны быть кратны 2. Общее число областей эквивалентно M*N. По умолчанию: [8 8]
    'ClipLimit'  Вещественный скаляр в диапазоне [0 1], который определяет границу усиления контраста. Большее число соответствует большему контрасту.По умолчанию: 0.01
    'NBins' Положительный целый скаляр, определяющий число значений гистограммы, которая используется при трансформациях изображений с целью улучшения контраста. Большее число соответствует большему динамическому диапазону, однако приводит к уменьшению быстродействия.По умолчанию: 256
    'Range' Строка, описывающая ранг (диапазон) данных результирующего изображения.
    'original' - ранг, ограниченный диапазоном исходного изображения [min(I(:)) max(I(:))].
    'full' - полный ранг (диапазон) для результирующего изображения. Например, для изображения в формате uint8, диапазон равен [0 255].
    По умолчанию: 'full'
    'Distribution' Строка, определяющая желательную форму гистограммы для окрестностей изображения:
    'uniform' - равномерная гистограмма
    'rayleigh' - колоколообразная гистограмма
    'exponential' - экспоненциальная гистограмма
    По умолчанию: 'uniform'
    'Alpha' Неотрицательный вещественный скаляр, описывающий параметр распределения.По умолчанию: 0.4
    Примечание: Используется, когда параметр 'Distribution' принимает значения 'rayleigh' или 'exponential'.

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

    Полутоновое изображение I может иметь формат представления данных uint8, uint16 или double. Результирующее изображение J имеет формат представления данных тот же, что и I.

    Пример 1.Обработаем изображение методом контрастно ограниченной адаптивной эквализации гистограммы и визуализируем результат.I=imread('tire.tif');A=adapthisteq(I, 'clipLimit', 0.02, 'Distribution', 'rayleigh');imview(I);imview(A);Пример 2.Обработаем цветное фотографическое изображение методом контрастно ограниченной адаптивной эквализации гистограммы.[I MAP]=imread('shadow.tif');RGB=ind2rgb(I, MAP);YIQ=rgb2ntsc(RGB); %преобразование в YIQ-изображениеY=YIQ(:, :, 1);YIQ(:, :, 1)=adapthisteq(Y, 'Divisions', [8 8], 'ClipLimit', 0.005);J=ntsc2rgb(YIQ); %преобразование обратно в RGB-изображениеimview(RGB); %отображение результата

     

     

    Наверх

    decorrstretch - Применение декорреляционного растяжения многоканальных изображений 

    Синтаксис:

    S=decorrstretch(I)S=decorrstretch(I, TOL)

    Функция S=decorrstretch(I) применяется для декорреляционного растяжения многоканального изображения I и возвращает результат в S. Размерность и формат представления данных массива S совпадают с исходным массивом I.

     

    Функция S=decorrstretch(I, TOL) при декорреляционном растяжении использует информацию о контрасте. Преобразование контраста контролируется параметром TOL: TOL=[LOW_FRACT HIGH_FRACT], который определяет диапазон интенсивностей для локальных окрестностей изображения.

    Когда TOL представляет собой скаляр, то LOW_FRACT=TOL и HIGH_FRACT=1-TOL.

     

    Примечание.

    Декорреляционное растяжение обычно применяется для трехмерных изображений (обычных RGB или многоспектральных искусственных RGB изображений).

     

    Главной целью применения метода декорелляционного растяжения является решение задачи улучшения качества визуального восприятия изображений. Небольшая коррекция параметра TOL может привести к весьма заметным изменениям в результирующем изображении.

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

     

    Исходное изображение должно иметь формат представления данных uint8, uint16 или double.

    Пример.

     

    [I col]=imread('forest.tif');

    S=decorrstretch(ind2rgb(I, col));

    subplot(2, 1, 1), imshow(I, col)

    subplot(2,1,2), imshow(S)

     

     

    Наверх

    axes2pix - интерактивный методы регулирования контраста и яркости

    Синтаксис:

    pixelx = axes2pix(DIM, XDATA, AXESX)

    Описание:

    Функция pixelx = axes2pix(DIM, XDATA, AXESX) выполняет преобразование axes-координат в пиксельные координаты. Например, когда pt = get(gca,'CurrentPoint'), тогда AXESX будет равно pt(1,1) или pt(1,2). Параметр AXESX выражается в пиксельных координатах. Параметр XDATA представляет собой двухэлементный вектор, возвращаемый функцией get(image_handle, 'XData') или get(image_handle,'YData'). Параметр DIM представляет число столбцов для x-координаты или число строк для у-координаты.

    Если окно figure не было открыто, то функция imgcf создает новое окно figure.

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

    Параметры DIM, XDATA и AXESX должны быть представлены в формате double. Результат представляется также в формате double.

    Примечание:

    Функция axes2pix выполняет минимальную проверку соответствия данных AXESX, DIM и XDATA. Например, функция axes2pix возвращает отрицательные координаты, когда AXESX меньше, чем XDATA(1). Функция axes2pix отвечает за ошибочный контроль.

    Примеры:

    Пример с параметрами XData и Ydata, заданными по умолчанию.

    h = imshow('pout.tif');

    [nrows,ncols] = size(get(h,'CData'));

    xdata = get(h,'XData')

    ydata = get(h,'YData')

    px = axes2pix(ncols,xdata,30)

    py = axes2pix(nrows,ydata,30)

    Пример с параметрами XData и Ydata, которые не задаются по умолчанию.

    xdata = [10 100]

    ydata = [20 90]

    px = axes2pix(ncols,xdata,30)

    py = axes2pix(nrows,ydata,30)

     

     

    Наверх

    imcontrast - средства усиления контраста изображения

    Синтаксис:

    imcontrast

    imcontrast(h)

    hfigure = imcontrast(h)

    Описание:

    Функция imcontrast создает инструментарий усиления контраста изображения, связанный с полутоновым изображением в текущем окне просмотра и названный объектом изображения. Когда окно просмотра содержит многослойное изображение, объектом является первое полутоновое изображение в окне просмотра (созданное последним). Функция imcontrast создает этот инструментарий в отдельном окне просмотра.

    Инструмент усиления контраста (Adjust Contrast tool) реализует интерактивное регулирование контраста и яркостного диапазона изображения, представленного в текущем окне просмотра. Этот подход можно использовать, в частности, при работе с топографическими картами при представлении их в виде изображений. Описанная обработка приводит к изменению свойств изображений.

    Примечание:

    Инструментарий усиления контраста может работать с полутоновыми изображениями, представленными в формате double и single.

    Функция imcontrast(h) создает средства усиления контраста изображения, связанные с изображениями, описанными через параметр h. Параметр h может управлять окном просмотра, осями, объектами изображения. Когда параметр h содержит описание окна просмотра или осей, тогда функция imcontrast применяет инструмент повышения контраста к первому изображению, размещенному в окне отображения.

    Функция hfigure = imcontrast(...) возвращает управление средствами усиления контраста в окне просмотра.

    Примечание:

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

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

    Совместные параметры окно/значение:

    После создания средств регулировки контраста, автоматически активируется иконка окно/значение в окне просмотра. Значения этого окна можно изменять с помощью курсора. С помощью курсора можно также изменять контраст и яркость изображения. Перемещение мышки горизонтально слева направо приводит к изменению размера окна (т.е. контраста). Перемещение мышки вертикально сверху вниз приводит к изменению центра окна (т.е. яркости). Удерживание клавиши Ctrl приводит к усилению изменений, а удерживание клавиши Shift - к ослаблению изменений.

    Пример:

    imshow('pout.tif')

    imcontrast(gca)

     

     

    Наверх

    conv2 - свертка изображений

    Синтаксис:

    Z=conv2(X, Y)

    Z=conv2(hcol, hrow, X)

    Z=conv2(…, shape)

    Описание:

    Функция Z=conv2(X, Y) вычисляет свертку Z двух изображений [1], представленных в виде двумерных массивов X и Y. Если эти массивы соответственно имеют размеры mx*my, то размер массива Z равен (mx+my-1)*(nx+ny-1).

    Функция Z=conv2(hcol, hrow, X) выполняет свертку двумерного массива X с вектором-столбцом hcol и вектором-строкой hrow.

    Функция Z=conv2(…, shape) с помощью параметра shape управляет размером массива Z. Параметр shape может принимать следующие значения:

    - ‘full’ - полноразмерная свертка;

    - ‘same’ - центральная часть размера mx*my;

    - ‘valid’ - центральная часть размера (mx-my+1)*(nx-ny+1) при условии, что (mx*my)>(my*ny).

    При использовании значений ‘same’ и ‘valid’ изображение необходимо задавать в параметре X, а коэффициенты фильтра (маску) - в параметре Y. Если используется значение ‘full’, то порядок задания параметров может быть произвольным.

    Процедура conv2 выполняется наиболее эффективно при условии, что (mx*my)>(my*ny), т.е. если количество элементов массива X превосходит количество элементов массива Y.

    Результирующий массив Z имеет формат представления данных double.

     

     

    Наверх

    convn - свертка N–мерных сигналов

    Синтаксис:

    Z=convn(X, Y)

    Z=convn(X, Y, shape)

    Описание:

    Функция Z=convn(X, Y) вычисляет свертку Z многомерных массивов X и Y. Если эти массивы соответственно имеют размеры size(X) и size(Y), то размер массива Z равен size(X)+size(Y)-1.

    Функция Z=convn(X, Y, shape) с помощью параметра shape управляет размером массива Z. Параметр shape может принимать следующие значения:

    - 'full' - полноразмерная свертка (по умолчанию);

    -''same' - центральный фрагмент размера size(Z);

    - ''valid' - фрагмент полной свертки, при вычислении которого не использованы части входного массива Х, дополненные нулями.

    Результирующий массив Z имеет формат представления данных double.

     

     

    Наверх

    convmtx2 - вычисление матрицы свертки

    Синтаксис:

    T=convmtx2(H, m, n)

    T=convmtx2(H, [m n])

    Описание:

    Функции T=convmtx2(H, m, n) и T=convmtx2(H, [m n]) возвращают матрицу свертки Т для матрицы Н. Если Х - матрица размера mxn, то conv2(X, H) эквивалентно reshape(T*X(:), size(H)*m*n).

    Исходные массивы должны иметь формат представления данных double. Результирующая матрица Т является разреженным массивом (sparse). Число ненулевых элементов матрицы Т не превышает prod(size(H)*m*n).

     

     

    Наверх

    filter2 - двумерная линейная фильтрация

    Синтаксис:

    D=filter2(h, S)

    D=filter2(h, S, shape)

    Описание:

    Функция D=filter2(h, S) выполняет фильтрацию данных, заданных в двумерном массиве S, двумерным КИХ-фильтром, коэффициенты которого сведены в матрицу h, называемую также маской фильтра. Как правило, S и D являются полутоновыми изображениями. Результат фильтрации, возвращаемый в матрице D, вычисляется как двумерная свертка, выполняемая с помощью функции  conv2. Матрица D имеет тот же размер, что и S. Для этого при проведении вычислений исходная матрица временно дополняется необходимым количеством нулевых строк и столбцов.

    Результат выполнения функции D=filter2(h, S, shape) зависит от значения параметра shape. Если параметру присвоено значение ‘same’, то в D возвращается центральная часть свертки, размер которой равен размеру исходных данных - S. Это параметр используется по умолчанию. Если параметру присвоено значение ’full’, возвращается весь результат свертки. При этом size(D)>size(S). Если параметру присвоено значение valid, возвращается только та часть свертки, при вычислении которой использовались краевые части исходных данных, дополненные нулями. При этом size(D)>size(S).

    Результат D имеет формат представления данных double.

    Алгоритм:

    В функции filter2 для выполнения двумерной свертки исходных данных с маской фильтра используется функция conv2. Для передачи в функцию conv2 маска h поворачивается на 1800: conv2(S, rot90(h, 2), shape).

     

     

    Наверх

    freqz2 - двумерная АЧХ

    Синтаксис:

    [h, f1, f2]=freqz2(h, n1, n2)

    [h, f1, f2]=freqz2(h, [n1 n2])

    [H, f1, f2]=freqz2(h, f1, f2)

    […]=freq2(h, n1, n2, [dx dy])

    […]=freq2(h, n1, n2, dx)

    […]=freq2(h, f1, f2, [dx dy])

    […]=freq2(h, f1, f2, dx)

    freq2(…)

    Описание:

    Функция [h, f1, f2]=freqz2(h, n1, n2) формирует матрицу Н размера n1x.gif (833 bytes)n2, которая является АЧХ на частотах, содержащихся в векторах f1 и f2 линейного двумерного КИХ-фильтра с маской h. В векторы f1 и f2 функция помещает равномерно распределенные нормализованные значения частот в диапазоне [-1, 1], где 1 соответствует половине частоты дискретизации (частоте Найквиста). Вектор f1 содержит n1 значений частоты, а вектор f2 содержит n2 значений частоты. Если при вызове функции параметры n1 и n2 опущены, то они берутся равными n1=n2=64.

    Функция [H, f1, f2]=freqz2(h, [n1 n2]) полностью аналогична функции [H, f1, f2]=freqz2(h, n1, n2).

    Функция [H, f1, f2]=freqz2(h, f1, f2) формирует матрицу Н, которая является АЧХ на частотах f1 и f2 линейного двумерного КИХ-фильтра с маской h. В векторы f1 и f2 должны быть помещены нормализованные значения частот в диапазоне [-1, 1]. Матрица Н имеет размер length(f1)x.gif (833 bytes)length(f2).

    В функциях […]=freq2(h, n1, n2, [dx dy]) и […]=freq2(h, f1, f2, [dx dy]) параметры dx и dy задают диапазоны изменения значений по осям частот как [-1/(2*dx), 1/(2dx)] для оси абсцисс и [-1/(2*dy), 1/(2dy)] для оси ординат. Например, если dx равно 1, то нормализованные частоты по оси абсцисс принадлежат диапазону [-0.5, 0.5], а если dx равно 5, то нормализованные частоты по оси абсцисс принадлежат диапазону [-0.1, 0.1].

    В функциях […]=freq2(h, n1, n2, dx) и […]=freq2(h, f1, f2, dx) параметр dx задает одинаковые диапазоны изменения значений по осям частот: [-1/(2*dx, 1/(2*dx))].

    Функция freq2(…) без выходных параметров выводит в текущее окно на экране двумерную АЧХ.

     

     

    Наверх

    fspecial - задание маски предопределенного фильтра

    Синтаксис:

    h=fspecial(type, P1, P2)

    Описание:

    Функция h=fspecial(type, P1, P2) возвращает маску h предопределенного двумерного линейного фильтра, задаваемого строкой type. Маска h предназначена для передачи в функции filter2 или conv2, выполняющих двумерную линейную фильтрацию. В зависимости от типа фильтра для него могут быть определены один или два дополнительных параметра Р1, Р2. Ниже будут рассмотрены возможные варианты функции fspecial.

    Функция h=fspecial(‘gausian’, n, sigma) возвращает маску h фильтра нижних частот Гаусса. Размер маски определяет параметр n. Если n - двухкомпонентный вектор, то размер маски n(1)x.gif (833 bytes)n(2). Если n скаляр, то размер маски nx.gif (833 bytes)n. Параметр sigma задает среднеквадратическое отклонение распределения Гаусса, которое используется при формировании маски h. Если при вызове функции параметры n и sigma опущены, то размер маски устанавливается равным 3x.gif (833 bytes)3, а среднеквадратическое отклонение 0.5.

    Функция h=fspecial(‘sobel’) возвращает маску фильтра Собеля для выделения горизонтальных границ:

    .

    Для выделения вертикальных границ достаточно транспонировать данную маску h.

    Функция h=fspecial(‘prewitt’) возвращает маску фильтра Превита для выделения горизонтальных границ:

    .

    Для выделения вертикальных границ достаточно транспонировать данную маску h.

    Функция h=fspecial(‘laplasian’, a) возвращает маску h ВЧ фильтра Лапласа. Размер маски 3x.gif (833 bytes)3. Параметр а управляет соотношением между центральным и граничными элементами маски. Данный параметр должен устанавливаться в диапазоне [0, 1]. По умолчанию а=0.2.

    Функция h=fspecial(‘log’, n, sigma) возвращает маску h фильтра, аналогичного последовательному применению фильтров Гаусса и Лапласа, так называемого лапласиана-гауссиана. Размер маски определяет параметр n. Если n - двухкомпонентный вектор, то размер маски n(1)x.gif (833 bytes)n(2). Если n - скаляр, то размер маски nx.gif (833 bytes)n. Параметр sigma задает среднеквадратическое отклонение Гаусса, которое используется при формировании маски h. Если при вызове функции параметры n и sigma опущены, то размер маски устанавливается равным 5x.gif (833 bytes)5, а среднеквадратическое отклонение 0.5.

    Функция h=fspecial(‘average’, n) возвращает маску h усредняющего НЧ фильтра. Размер маски определяет параметр n. Если n - двухкомпонентный вектор, то размер маски n(1)x.gif (833 bytes)n(2). Если n - скаляр, то размер маски nx.gif (833 bytes)n. Если при вызове функции параметр n опущен, то размер маски устанавливается равным 3x.gif (833 bytes)3.

    Функция h=fspecial(‘unsharp’, a) возвращает маску h фильтра, повышающего резкость изображения. Размер маски 3x.gif (833 bytes)3. Параметр а управляет соотношением между центральным и граничными элементами маски. Данный параметр должен устанавливаться в диапазоне [0, 1]. По умолчанию а=0.2.

    Алгоритмы:

    Усредняющий фильтр относится к фильтрам нижних частот. Он предназначен для фильтрации высокочастотного шума, и его работа сопровождается размытием изображения. Каждый элемент маски равен 1/MN, где М и N - размеры маски (количество строк и столбцов).

    Фильтр Гаусса также относится к НЧ фильтрам. В отличие от усредняющего фильтра он в меньшей мере размывает обрабатываемое изображение [1]. Маска фильтра такова, что центральный элемент маски имеет наибольшее значение, он соответствует пику распределения Гаусса. Значения остальных элементов уменьшаются по мере удаления от центрального элемента. Уменьшение происходит в соответствии с распределением Гаусса. Маска формируется с использованием следующих соотношений:

    ;

    ,

    где M и N - размеры маски;

     - среднеквадратическое отклонение распределения Гаусса.

    Фильтр Лапласа относится к ВЧ фильтрам и предназначен для выделения границ (перепадов) во всех направлениях [1]. Маска фильтра конструируется следующим образом:

    ,

    где  - параметр в диапазоне [0,1], передаваемый в функцию fspecial.

    Лапласиан-гауссиан также относится к ВЧ фильтрам, но в отличие от фильтра Лапласа выделяет более резкие перепады. Маска фильтра создается по формуле

    ,

    где M и N - размеры маски;

     - среднеквадратическое отклонение распределения Гаусса.

    Формула для вычисления  выведена выше.

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

    ,

    где  - параметр в диапазоне [0,1], передаваемый в функцию fspecial.

    Пример:

    Рассмотрим, каким образом влияет среднеквадратическое отклонение распределения Гаусса на элементы маски фильтра Гаусса, возвращаемые функцией fspecial. Получим значения маски фильтра Гаусса размера 5x.gif (833 bytes)5 для среднеквадратического отклонения 0.5 и 0.7. На рис. 1  а приведена частотная характеристика фильтра Гаусса с маской h05, а на рис. 1 б - частотная характеристика фильтра Гаусса с маской h07.

    %Пример демонстрирует формирование маски фильтра Гаусса

    %с помощью функции fspecial.

    %Создание маски для фильтра Гаусса размера 5x.gif (833 bytes)5

    %и со среднеквадратическим отклонением 0.5.

    h05=fspecial(‘gaussian’, 5, 0.5)

    %Будет выведено:

    %h05 =

    % 0.0000 0.0000 0.0002 0.0000 0.0000

    % 0.0000 0.0113 0.0837 0.0113 0.0000

    % 0.0002 0.0837 0.6187 0.0837 0.0002

    % 0.0000 0.0113 0.0837 0.0113 0.0000

    % 0.0000 0.0000 0.0002 0.0000 0.0000

    %Создание маски для фильтра Гаусса размера 5x.gif (833 bytes)5

    %и со среднеквадратическим отклонением 0.7.

    h07=fspecial(‘gaussian’, 5, 0.7)

    %Будет выведено:

    %h07 =

    % 0.0001 0.0020 0.0055 0.0020 0.0001

    % 0.0020 0.0422 0.1171 0.0422 0.0020

    % 0.0055 0.1171 0.3248 0.1171 0.0055

    % 0.0020 0.0422 0.1171 0.0422 0.0020

    % 0.0001 0.0020 0.0055 0.0020 0.0001

    %Вывод на экран частотных характеристики линейных фильтров

    %с масками h05 и h07.

    freqz2(h05, [32 32]);

    figure, freqz2(h07, [32 32]);

    а)

    б)

    Рис. 1.

     

     

    Наверх

    fsamp2 - формирование маски линейного фильтра по желаемой АЧХ

    Синтаксис:

    h=fsamp2(H)

    h=fsamp2(f1, f2, H, [m n])

    Описание:

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

    Функция h=fsamp2(H) формирует маску с линейного двумерного КИХ-фильтра, основываясь на желаемой АЧХ двумерного фильтра, передаваемой в матрице Н. Маска h предназначена для передачи в функции filter2 или conv2, которые выполняют двумерную линейную фильтрацию. Размер маски h совпадает с размером матрицы Н. Значения АЧХ в матрице Н соответствуют частотам по осям абсцисс и ординат, равномерно распределенным в диапазоне [-1, 1], где 1 соответствует половине частоты дискретизации (частоте Найквиста).

    При формировании матрицы Н для получения более точного результата рекомендуется использовать отсчеты частоты, возвращаемые функцией freqspace.

    Функция h=fsamp2(f1, f2, H, [m n]) формирует маску h размера mxn линейного двумерного КИХ-фильтра, основываясь на желаемой АЧХ двумерного фильтра Н, для частот, передаваемых в векторах f1 и f2. Векторы f1 и f2 содержат нормализированные значения частот в диапазоне [-1, 1], где 1 соответствует половине частоты дискретизации. Для получения маски фильтра h размера mxn используется аппроксимация по методу наименьших квадратов. Требуется, чтобы длина вектора f1 была не менее, чем n, а длина вектора f2 - не менее, чем m.

    Алгоритм.

    Для вычисления маски фильтра h функция fsamp2 выполняет обратное ДПФ желаемой АЧХ [1, 2]:

    Пример.

    Рассмотрим пример, демонстрирующий формирование маски двумерного линейного фильтра, повышающего резкость изображения. АЧХ такого фильтра должна быть равна 0 в начале координат и увеличиваться по мере удаления от начала координат. Один из возможных вариантов желаемой частотной характеристики приведен на рис. 1, а. По данной АЧХ fsamp2 создает маску h линейного фильтра, АЧХ которого приведена на рис. 1, б.

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

    %Пример демонстрирует повышение резкости изображения

    %с помощью линейного КИХ-фильтра, сформированного по желаемой АЧХ.

    %Получение нормализированных значений частот.

    [f1 f2]=freqspace(15, 'meshgrid');

    %Формирование желаемой АЧХ, как функции расстояния от начала координат.

    %Для вычисления расстояния используется так называемая метрика городских кварталов.

    dist=abs(f1)+abs(f2);

    H=dist/max(dist(:));

    %Вывод на экран желаемой АЧХ.

    mesh(f1,f2,H), colormap(cool(32));

    %Формирование маски КИХ-фильтра.

    h=fsamp2(f1, f2, H, [5 5])

    %Будет выведено:

    %h =

    % 0.0000 0.0000 -0.0012 0.0000 -0.0000

    % -0.0000 0.0000 -0.1090 0.0000 -0.0000

    % -0.0012 -0.1090 0.5333 -0.1090 -0.0012

    % -0.0000 0.0000 -0.1090 -0.0000 -0.0000

    % 0.0000 0.0000 -0.0012 -0.0000 0.0000

    %Вывод на экран получившейся АЧХ.

    figure, colormap(cool(32)), freqz2(h);

    %Чтение исходного изображения и вывод его на экран.

    i=imread('cameraman.tif');

    figure, imshow(i);

    %Фильтрация изображения.

    i=mat2gray(filter2(h, im2double(i)));

    %Контрастирование результата фильтрации.

    i=imadjust(i, [0 0.8], []);

    %Вывод результирующего изображения на экран.

    figure, imshow(i);

    а)   

    б)

    в)                                                                               г)

    Рис. 1.

     

     

    Наверх

    ftrans2 - формирование маски линейного фильтра методом преобразования частот

    Синтаксис:

    h=ftrans2(b)

    h=ftrans2(b, t)

    Описание:

    Функция h=ftrans2(b) формирует маску h линейного двумерного КИХ-фильтра, используя метод преобразования частот для трансформации одномерного КИХ-фильтра с коэффициентом b. Вектор b коэффициентов фильтра возвращают функции fir1, fir2, remez из Signal Processing Toolbox. Метод преобразования частот трансформирует одномерный КИХ-фильтр в двумерный [5]. Для преобразования частот используется специальная матрица трансформации t. По умолчанию применяется матрица Мак-Клеллана:

    .

    В функции h=ftrans2(b, t) можно указать иную матрицу трансформации t.

    Маска h предназначена для передачи в функции filter2 или conv2, которые выполняют двумерную линейную фильтрацию.

    Алгоритм:

    Метод преобразования частот [2-4] заключается в том, что АЧХ двумерного фильтра формируется как

    ,

    где  - ДПФ одномерного фильтра b:

    ;

     - двумерное ДПФ матрицы трансформации t:

    .

    Для вычисления маски фильтра h выполняется обратное ПФ АЧХ  [1]:

    .

    Пример:

    Рассмотрим, как формируется двумерный ФНЧ по одномерному с помощью метода преобразования частот. Создадим одномерный КИХ ФНЧ 14-го порядка с частотой среза 0.2. АЧХ и ФНЧ такого фильтра приведены на рис. 1, а. С помощью функции ftrans2 одномерный ФНЧ трансформируется в двумерный. АЧХ двумерного ФНЧ приведена на рис. 1, б.

    На рис. 1, в показано исходное изображение, полученное в результате сканирования полиграфической иллюстрации. Данное изображение имеет характерный дефект - паразитную регулярную структуру, которая возникает в результате сканирования. Подобные дефекты называют муаром. Для подавления муара исходное изображение необходимо размыть. Это можно сделать с помощью созданного двумерного ФНЧ. Результат фильтрации показан на рис. 1, г.

    %Пример демонстрирует размытие изображения

    %с целью подавления муара.

    %Размытие выполняется с помощью линейного двумерного КИХ ФНЧ,

    %сформированного из одномерного ФНЧ

    %методом преобразования частот.

    %Создание одномерного КИХ ФНЧ 14-го порядка

    %с частотой среза 0.2.

    b=fir1(14, 0.2);

    %Вывод на экран АЧХ и ФНЧ созданного одномерного фильтра.

    freqz(b, 1, 256);

    %Формирование двумерного фильтра из одномерного.

    h=ftrans2(b);

    %Вывод на экран АЧХ двумерного фильтра.

    figure, freqz2(h);

    %Чтение исходного изображения из файла и вывод его на экран.

    I=imread(‘image1.bmp’);

    I=im2double(I);

    figure, imshow(I);

    %Фильтрация изображения и вывод на экран результата фильтрации.

    I=filter2(h,I);

    figure, imshow(I);

    а)
    б)
    в) г)

    Рис.1.

     

     

    Наверх

    fwind1 - формирование маски линейного фильтра по желаемой АЧХ с использованием одномерного окна

    Синтаксис:

    h=fwind1(H, win)

    h=fwind1(H, win1, win2)

    h=fwind1(f1, f2, H, …)

    Описание:

    Функция h=fwind1(H, win) формирует маску h линейного двумерного КИХ-фильтра, основываясь на желаемой АЧХ двумерного фильтра, передаваемой в матрице Н. Значения АЧХ в матрице Н соответствуют частотам по осям абсцисс и ординат, равномерно распределенным в диапазоне [-1, 1], где 1 соответствует половине частоты дискретизации (частоте Найквиста). При формировании матрицы Н для получения более точного результата рекомендуется использовать отсчеты частоты возвращаемой функцией freqspace.

    В параметре win передается одномерное окно. Получить различные виды окон можно с помощью функций SPT: boxcar, hammimg,  hanning, bartlett, blackman, kaiser, chebwin. Для формирования двумерного окна из одномерного используется метод Хуанга (см. ниже). Для вычисления маски фильтра h выполняется обратное ДПФ желаемой АЧХ и умножение на матрицу двумерного окна.

    Маска h предназначена для передачи в функции filter2 или conv2, которые выполняют двумерную линейную фильтрацию. Размер маски h равен length(win)x.gif (833 bytes)length(win).

    Функция h=fwind1(H, win1, win2) формирует маску h линейного двумерного КИХ-фильтра, основываясь на Н - желаемой АЧХ двумерного фильтра и двумерном окне, созданном по двум одномерным win1 и win2. Размер маски h равен length(win1)x.gif (833 bytes)length(win2).

    Функция h=fwind1(f1, f2, H, …) формирует маску h линейного двумерного КИХ-фильтра, основываясь на желаемой АЧХ двумерного фильтра Н для частот, передаваемых в векторах f1 и f2. Векторы f1 и f2 содержат нормированные значения частот в диапазоне [-1, 1], где 1 соответствует половине частоты дискретизации. Размер маски h определяется размером окон, как это описано выше.

    Алгоритм:

    В методе Хуанга радиально-симметричное двумерное окно  создается из одномерного окна  как

    .

    При задании двух одномерных окон  и  двумерное окно  создается как их произведение: .

    Для вычисления маски фильтра h выполняет обратное преобразование Фурье желаемой АЧХ и умножение на матрицу двумерного окна:

    ;

    .

     

     

    Наверх

    fwind2 - формирование маски линейного фильтра по желаемой АЧХ с использованием двумерного окна

    Синтаксис:

    h=fwind2(H, win2)

    h=fwind2(f1, f2, H, win2)

    Описание:

    Функция h=fwind2(H, win2) формирует маску h линейного двумерного КИХ-фильтра, используя двумерное окно win2 и основываясь на желаемой АЧХ двумерного фильтра, передаваемой в матрице Н. Значения АЧХ в матрице Н соответствуют частотам по осям абсцисс и ординат, равномерно распределенным в диапазоне [-1, 1], где 1 соответствует половине частоты дискретизации. При формировании матрицы Н для получения более точного результата рекомендуется использовать отсчеты частоты, возвращаемые функцией freqspase.

    Маска h предназначена для передачи в функции filter2 или conv2, которые выполняют двумерную линейную фильтрацию. Размер маски h равен размеру двумерного окна win2.

    Функция h=fwind2(f1, f2, H, win2) формирует маску h линейного двумерного КИХ-фильтра, используя двумерное окно win2 и основываясь на желаемой АЧХ двумерного фильтра Н для частот, передаваемых в векторах f1 и f2. Векторы f1 и f2 содержат нормализованные значения частот в диапазоне [-1, 1], где 1 соответствует половине частоты дискретизации. Размер маски h также равен размеру двумерного окна win2.

    Алгоритм:

    Для вычисления маски фильтра h данная функция выполняет обратное преобразование Фурье желаемой АЧХ и умножение на матрицу двумерного окна :

    ;

    .

     

     

    Наверх

    blkproc - обработка блоков изображения

    Синтаксис:

    D=blkproc(S, [m n], fun)

    D=blkproc(S, [m n], fun, P1, P2, …)

    D=blkproc(S, [m n], [mborder nborder], fun, …)

    D=blkproc(S, ‘indexed’, …)

    Описание:

    Функция D=blkproc(S, [m n], fun) формирует новое изображение D, пиксели которого являются результатом обработки функцией fun каждого из неперекрывающихся блоков размера  исходного изображения S. Данная функция предназначена для обработки бинарных или полутоновых изображений. Исходное изображение S разбивается на неперекрывающиеся блоки  пикселей. Блоки располагаются вплотную друг к другу, начиная с левого верхнего угла изображения. При проведении вычислений исходное изображение временно дополняется столбцами нулей справа и строками нулей снизу так, чтобы размеры изображений были кратны соответствующим размерам блока. Например, на рис. 1 исходное изображение имеет 10 строк и 9 столбцов. Если для обработки использовать блок [3 4], то изображение дополняется двумя строками и тремя столбцами нулевых пикселей.

    pic1.gif (4146 bytes)

    Рис. 1.

    Существует 3 варианта задания параметра fun. Имя х является условным обозначением обрабатываемого блока изображения.

    Параметр fun Пример Комментарий
    Строка - имя функции D=blkproc(S, [m n], ‘myfunc’); Предварительно должна быть реализована функция myfunc, которая получает в качестве параметра блок х и возвращает матрицу или скаляр y: y=myfunc(x).
    Строка - выражение языка D=blkproc(S, [m n], ‘mean2(x)*ones(size(x))’); В строку помещается выражение, допустимое синтаксисом MATLAB. Это выражение интерпретируется при выполнении каждого блока.
    inline - функция f=inline(‘std2(x)*ones(size(x))’);
    D=blkproc(S, [m n], f);
    В качестве параметра функции inlineуказывается строка - выражение языка MATLAB. Оно компилируется и создается так называемая функция inline - функция, которая вызывается при обработке каждого блока. Использование inline - функций предпочтительнее по временным затратам.

    В результате обработки каждого блока создается матрица, вектор или скаляр, из которых формируется результирующее изображение D. Таким образом, размеры исходного и результирующего изображения, как правило, различаются.

    Функция D=blkproc(S, [m n], fun, P1, P2, …) формирует изображение D, передавая в функцию fun дополнительные параметры Р1, Р2 и т.д.

    Функция D=blkproc(S, [m n], [mborder nborder], fun, …) формирует изображение D, пиксели которого являются результатом обработки функцией fun частично перекрывающихся блоков размера исходного изображения S. Каждый блок размера  расширяется вверх и вниз на mborder строк, а также вправо и влево на nborder столбцов. При этом центральные части размера  (ядра) расширенных блоков не перекрываются друг с другом и располагаются, как и в предыдущем рассмотренном случае, последовательно начиная от левого верхнего угла изображения. В этом случае при проведении вычислений исходное изображение временно дополняется столбцами нулей справа и строками нулей снизу, чтобы размеры изображений были кратны соответствующим размерам блока , и дополнительно на mborder строк вверх и вниз и на nborder столбцов вправо и влево. Рис. 2 демонстрирует расположение двух соседних по диагонали блоков с размерами ядра 3х4 и mborder=1 nborder=2 на изображении, имеющем 10 строк и 9 столбцов. При вычислении изображение будет расширено на 3 строки вниз, 1 строку вверх, 5 столбцов вправо и 2 столбца влево.

    pic2.gif (4666 bytes)

    Рис. 2.

    Формат представления данных изображений S и D определяется реализацией функции fun.

    Функция D=blkproc(S, ‘indexed’, …) аналогична рассмотренным выше, но предназначена для обработки палитровых изображений. При проведении вычислений исходное изображение временно дополняется либо единицами при формате представления данных Xs-double, либо нулями при формате представления данных Xs-uint8.

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

    Пример:

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

    Исходное биомедицинское изображение показано на рис. 3,а. Это изображение характеризуется значительной неравномерностью фона. С помощью функции blkproc оценим яркость фона как среднее значение яркостей пикселей в блоках 25х25 пикселей. В результате работы blkproc получается изображение с размером в 25 раз меньшим, чем исходное. Для того чтобы изображение фона и исходное изображение были одинакового размера, изображение фона увеличивается с помощью функции imresize. Полученная оценка фона показана на рис. 3,б.

    Если вычесть изображение фона из исходного изображения, то получится изображение с равномерным фоном. Добавление константы 0.5 необходимо для того, чтобы значения пикселей получившегося изображения были в диапазоне [0, 1]. Функцией imadjast результирующее изображение дополнительно контрастируется. Получившийся результат показан на рис. 3,в.

    %Пример демонстрирует выравнивание фона.

    %Чтение изображения.

    I=imresd(‘image03.tif’);

    I=im2double(I);

    %Вывод на экран.

    imshow(I);

    %Получение оценки фона изображения как среднего

    %в блоках 25х25 пикселей.

    F=inline(‘mean2(x)’);

    fon=blkproc(I, [25 25],f);

    fon=imresize(fon, size(I), ‘bicubic’);

    figure, imshow(fon);

    %Вычитаем фон и контрастируем получившееся изображение.

    I=I-fon+0.5;

    I=imadjust(I, [0.2 0.7], 1);

    % Вывод на экран результата.

    figure, imshow(I);

    а)
    б)
    в)

    Рис. 3.

     

     

    Наверх

    bestblk - определение размера блока

    Синтаксис:

    siz=bestblk([m n], k)

    [mb, nb]=bestblk([m n], k)

    Описание:

    Функция siz=bestblk([m n], k) возвращает для изображения размера mx.gif (833 bytes)n оптимальный размер блока для обработки с помощью функции blkproc. Возвращаемый параметр siz является двухэлементным вектором, который содержит количество строк и столбцов в блоке. Параметр k определяет максимально возможное количество строк и столбцов в блоке. Если при вызове функции параметр k опущен, то ему присваивается значение 100.

    Функция [mb, nb]=bestblk([m n], k) возвращает в mb количество строк, а в nb - количество столбцов блока.

    Алгоритм:

    Если , то количество строк блока берется равным m. Иначе рассматриваются все значения в диапазоне [min(m/10, k/2), k] и выбирается количество строк блока, обеспечивающее наименьшее количество добавляемых к исходному изображению в функции blkproc нулевых строк.

    Алгоритм для выбора количества столбцов блока аналогичен.

     

     

    Наверх

    nlfilter - обобщенный нелинейный фильтр

    Синтаксис:

    D=nlfilter(S, [m n], fun)

    D=nlfilter(S, [m n], fun, P1, P2)

    Xd=nlfilter(Xs, ‘indexed’,…)

    Описание:

    Функция D=nlfilter(S, [m n], fun) формирует новое изображение D, пиксели которого являются результатом обработки функцией fun пикселей исходного изображения S, соответствующих положению маски фильтра размера mxn. Операция применяется нерекурсивно для всех положений маски. При проведении вычислений исходное изображение временно дополняется n/2 столбцами нулевых пикселей справа и слева, и m/2 строками нулевых пикселей сверху и снизу.

    Данная функция предназначена для обработки бинарных или полутоновых изображений.

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

    Функция D=nlfilter(S, [m n], fun, P1, P2) формирует изображение D, передавая в функцию fun дополнительные параметры Р1, Р2.

    Формат представления данных изображений S и D определяется реализацией функции fun. 

    Функция Xd=nlfilter(Xs, ‘indexed’,…) аналогична рассмотренным выше, но предназначена для обработки палитровых изображений. При проведении вычислений исходное изображение временно дополняется либо единицами при формате представления данных Xs-double, либо нулями при формате представления данных Xs-uint8.

    Повысить скорость осуществления нелинейной фильтрации можно с помощью функции colfilt, которая предварительно преобразует пиксели окна в столбцы.

    Пример:

    Реализуем с помощью функции nlfilter операцию усреднения с порогом. Данная операция предназначена для фильтрации импульсного шума. Смысл операции усреднения с порогом состоит в том, что центральному пикселю в пределах окна присваивается среднее значение яркости всех пикселей в пределах окна только в том случае, если разница между исходным значением центрального пикселя и средним больше некоторого порогового значения. В результате импульсная помеха отфильтровывается, а изображение не размывается так сильно, как при простой усредняющей фильтрации [1].

    На рис. 1,а приведено исходное изображение, поврежденное импульсным шумом. На рис. 1,б - результат фильтрации.

    %Пример демонстрирует работу усредняющего фильтра с порогом.

    %Чтение исходного изображения и вывод его на экран.

    I=imread(‘bacteria.tif’);

    I=im2double(I);

    imshow(I);

    %Усредняющая фильтрация с порогом.

    I=nlfilter(I, [3 3], ‘AverageWithTh’, 0.2);

    %Вывод на экран результата фильтрации.

    figure, imshow(I);

    %AverageWithTh.m

    %Функция усреднения с порогом.

    function R=AverageWithTh(x, Th);

    %Определяем размер маски.

    [r c]=size(x);

    n=r*c;

    %Определяем координаты центрального пиксела окна.

    r=floor((r+1)/2);

    c=floor((c+1)/2);

    %Результат усреднения.

    s=sum(x(:))/n;

    %Если разница центрального пиксела окна и среднего больше порога, то заменяем значение центрального

    %пиксела на среднее.

    if (abs(x(r, c)-s))>Th

    R=s;

    %Иначе значение текущего пиксела не изменяется.

    else

    R=x(r, c);

    end;

    end;

    а) б)

    Рис. 1.

     

     

    Наверх

    colfilt - оптимизированная операция фильтрации

    Синтаксис:

    D=colfilt(S, [m n], block_type, fun)

    D=colfilt(S, [m n], block_type, fun, P1, P2, …)

    Xd=colfilt(Xs, ‘indexed’, …)

    Описание:

    Функция D=colfilt(S, [m n], block_type, fun) выполняет операции фильтрации, полностью аналогичные выполняемым функциям blkproc или nlfilter, но значительно быстрее. Она предназначена для обработки полутоновых и бинарных изображений. Увеличение скорости обработки достигается за счет того, что обработке подвергается вспомогательное изображение, в котором каждый столбец представляет собой фрагмент исходного изображения S, передаваемый в функцию fun. Такой подход позволяет существенно уменьшить количество операций по чтению и записи отдельных пикселей изображения. Кроме того, каждый столбец может обрабатываться независимо от соседних. Для преобразования исходного изображения во вспомогательное и обратно в функции colfilt используются соответственно функции im2col и col2im.

    Режим работы функции colfilt определяется значением параметра block_type:


    • ‘distinct’ - функция colfilt аналогична функции blkproc, параметрами [m n] задается размер неперекрывающихся блоков изображения;

    • ‘sliding’ - функция colfilt аналогична функции nlfilter, параметрами [m n] задается размер маски фильтра.

  • Функция D=colfilt(S, [m n], block_type, fun, P1, P2, …) позволяет передавать дополнительные параметры Р1, Р2 и так далее при вызове функции fun.

    Формат представления данных изображений S и D определяется реализацией функции fun.

    Аналогично функциям blkproc и nlfilter с параметром ‘indexed’ функция Xd=colfilt(Xs, ‘indexed’, …) предназначена для обработки палитровых изображений и при проведении вычислений дополняет изображение либо единицами при формате представления данных Xs-double, либо нулями при формате представления данных Xs-uint8.

     

     

    Наверх

    ordfilt2 - ранговая фильтрация

    Синтаксис:

    D=ordfilt2(S, order, domain);

    D=ordfilt2(S, order, domain, S);

    Описание:

    Функция D=ordfilt2(S, order, domain) создает полутоновое изображение D, каждый пиксель которого формируется следующим образом. Пиксели исходного полутонового изображения S, соответствующие ненулевым элементам маски фильтра domain, сортируются по возрастанию. Пикселю изображения D, соответствующему центральному элементу маски, присваивается значение с номером order в отсортированном множестве. Операция применяется нерекурсивно для всех положений маски. Фильтрацию такого вида называют порядковой или ранговой [1].

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

    Функция D=ordfilt2(S, order, domain, S) работает аналогично функции ordfilt2(S, order, domain, A), за исключением того, что перед сортировкой к значениям пикселей, соответствующих ненулевым элементам маски фильтра domain, прибавляются значения из матрицы А. Матрицы domain и А должны быть одинакового размера. Матрица А имеет формат представления данных double. Соответственно формат представления данных результирующего изображения D - также double.

    Пример:

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

    На рис. 2,а приведено исходное изображение, на рис. 2,б и 2,в - соответственно результаты эрозии и наращивания фона с маской из единиц размера 3х3. Так как фон данного изображения серый, то эрозия приводит к уменьшению фона, а наращивание - к его увеличению.

    %Пример демонстрирует операции эрозии и наращения

    %над полутоновым изображением.

    %Чтение исходного изображения и вывод его на экран.

    I=imread(‘image.tif’);

    imshow(I);

    %Эрозия полутонового изображения.

    I_er=ordfilt2(I, 1, ones(3, 3));

    figure, imshow(I_er);

    %Наращение полутонового изображения.

    I_dil=ordfilt2(I, 9, ones(3, 3));

    figure, imshow(I_dil);


    а)

    б)

    в)

    Рис. 2.

     

     

    Наверх

    medfilt2 - медианная фильтрация

    Синтаксис:

    D=medfilt2(S, [m n])

    Xd=medfilt2(Xs, ‘indexed’,...)

    Описание:

    Медианная фильтрация является частным случаем ранговой фильтрации.

    Функция D=medfilt2(S, [m n]) создает полутоновое изображение D, каждый пиксель которого формируется следующим образом. Пиксели исходного полутонового изображения S, соответствующие всем элементам маски фильтра размера mx.gif (833 bytes)n, составляют упорядоченную последовательность А. Пикселю D(r, с), где r и с – координаты текущего положения центрального элемента маски, присваивается значение медианы последовательности А. Операция применяется нерекурсивно для всех положений маски.

    Медианой упорядоченной последовательности A(i), где i=1...N, называется величина A((N + 1)/2), если N - нечетное, и (A(N/2) + A((N+2)/2))/2, если N - четное.

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

    Если вектор [m n] при вызове функции D=medfilt2(S) не задан, то в качестве маски фильтра используется маска размера 3x.gif (833 bytes)3.

    Функция Xd=medfilt2(Xs, 'indexed', ...) аналогична рассмотренной выше, но предназначена для обработки палитровых изображений. При проведении вычислений исходное изображение временно дополняется либо единицами при формате представления данных Xs–double, либо нулями при формате представления данных Xs–uint8.

    Пример:

    Медианная фильтрация может эффективно применяться для устранения импульсного шума [1, 2]. На рис. 1 б приведен результат медианной фильтрации с маской 3x.gif (833 bytes)3 изображения на рис. 1,а.

    % Пример демонстрирует работу медианного фильтра.

    % Чтение исходного изображения и вывод его на экран.

    I=imread('bacteria.tif');

    imshow(l);

    % Медианная фильтрация.

    I=medfilt2(I);

    % Вывод на экран результата фильтрации.

    figure, imshow(I);

    а) б)

    Рис.1.

     

     

    Наверх

    wiener2 - адаптивная винеровская фильтрация

    Синтаксис:

    Id=wiener2(ls, [m n], noise)

    [Id, noise]=wiener2(ls, [m n])

    Описание:

    Функция Id=wiener2(Is, [m n], noise) формирует полутоновое изображение Id, которое является результатом адаптивной фильтрации Винера исходного полутонового изображения Is. Параметры m иn задают размеры скользящего окна, в пределах которого оцениваются среднее и среднеквадратичное отклонение значений яркости. Если при вызове функции параметры m и n опущены, то размер окна устанавливается равным 3x.gif (833 bytes)3.

    Параметр noise устанавливает мощность гауссова белого шума, которым повреждено изображение. Этот параметр должен быть определен из каких–либо априорных сведений об изображении. Если это сделать не удается, то при вызове функции wiener2 параметр noise можно опустить. В этом случае мощность шума будет оцениваться автоматически.

    Функция [Id, noise]=wiener2(Is, [m n]) работает аналогично описанной выше и дополнительно возвращает оценку мощности гауссова белого шума.

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

    Алгоритм:

    Функция wiener2 использует алгоритм адаптивной винеровской фильтрации для подавления аддитивного гауссова белого шума. Данный алгоритм основан на статистических оценках фрагментов изображения в пределах скользящего окна размера nx.gif (833 bytes)m пикселей [1, 2].

    Для всех положений скользящего окна с центральным пикселем и координатами (r, с) вычисляются:

     – средние значение яркости;

     – дисперсия.

    Данная формула применяется нерекурсивно для всех положений скользящего окна.

    Если мощность гауссова белого шума не задана, то она оценивается как среднее из всех .

     

     

    Наверх

    roifilt2 - фильтрация областей интереса

    Синтаксис:

    Id=roifilt2(h, ls, BW)

    Id=roifilt2(ls, BW, fun)

    Id=roifilt2(ls, BW, fun, P1, P2, ...)

    Описание:

    Функция roifilt2 предназначена для фильтрации отдельных фрагментов полутоновых изображений. Эти фрагменты – области интереса (regions of interest) - задаются с помощью бинарного изображения BW. Размеры BW и исходного полутонового изображения Is должны совпадать. Единичные значения в BW указывают на то, что пиксели исходного изображения с такими же координатами принадлежат области интереса. Таким образом, если BW(r, с) равно 1, то Id(r, с) равно значению пикселя с координатами (r, с), полученного в результате фильтрации исходного изображения Is. Если BW(r, с) равно 0, то Id(r, с) равно Is(r, с), т. е. изменение изображения происходит только в областях интереса.

    Функция Id=roifilt2(h, Is, BW) создает изображение Id как результат фильтрации областей интереса BW исходного изображения Is линейным фильтром с маской h. Для фильтрации функция roifilt2 вызывает функцию filter2. Результирующее изображение Id имеет формат представления данных double.

    Функция Id =roifilt2(Is, BW, fun) создает изображение Id как результат фильтрации областей интереса BW исходного изображения Is с помощью функции fun. Существует 3 варианта задания параметра fun. Они приведены в таблице в описании функции blkproc. Именем X должно быть обозначено обрабатываемое полутоновое изображение Is. Возвращаемое функцией fun результирующее изображение у должно иметь размеры, равные размерам изображения X.

    Функция Id=roifilt2(Is, BW, fun, PI, P2,. .) формирует изображение Id, передавая в функцию fun дополнительные параметры PI, P2, ...

    Формат представления данных изображений Is и id определяется реализацией функции fun.

    Пример:

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

    Использование фильтрации повышает контраст в области интереса. Результат фильтрации показан на рис. 1,б.

    % Пример демонстрирует фильтрацию области интереса.

    % Чтение изображения и вывод его на экран.

    I=imread(‘bacteria.tif');

    imshow(l);

    % Создаем область интереса в середине исходного изображения.

    [n m]=size(l);

    BW=zeros(n,m);

    BW(n/4 : 3*n/4, m/4 : 3*m/4) = 1;

    % Устанавливаем маску для фильтрации.

    h = [–1 –2–1 353–1 –2–1;

    –1 –2–1353–1 –2–1;

    –1 –2–1353–1 –2–1;

    –1 –2–1353–1 –2–1;

    –1 –2–1353–1 –2–1]/15;

    % Фильтрация области интереса.

    I2=roifilt2(h, I, BW);

    % Вывод результата фильтрации на экран.

    figure, imshow(I2).

    а) б)

    Рис. 1.

     

     

    Наверх

    imfilter - фильтрация двумерных и многомерных изображений

    Синтаксис:

    B=imfilter(A,H)

    B=imfilter(A, H, option1, option2, ...)

    Описание:

    Функция B=imfilter(A, H) фильтрует многомерный массив A многомерным фильтром H. МассивA должен быть неразреженным числовым массивом любого формата и размерности.Результирующий массив B имеет ту же размерность и формат представления данных,что и массив A.

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

    Функция B=imfilter(A, H, option1, option2, ...) выполняет многомерную фильтрацию всоответствии с заданными опциями. Аргументы опции могут принимать следующиезначения.

    Граничныеопции.

    Опция Описание
    Х Значения элементов внешних границ исходного массива принимают значения массива Х. Когда граничные опции не определены, функция imfilter использует значение X=0.
    'symmetric' Значения элементов внешних границ исходного массива вычисляются как зеркальное отражение края этого массива.
    'replicate' Значения элементов внешних границ исходного массива допускаются равными по значениям ближайшим элементам края массива.
    'circular' Значения элементов внешних границ исходного массива вычисляются как периодическая структура исходного массива.

    Опциирезультирующих размеров.

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

    Опциикорреляции и конволюции.

    Опция Описание
    'corr' Функция imfilter выполняет многомерную фильтрацию с использованием корреляции. Эта операция аналогична фильтрации, которая выполняется функцией filter2. Когда определены опции корреляции или конволюции, тогда функция imfilter использует корреляцию.
    'conv' Функция imfilter выполняет многомерную фильтрацию с использованием конволюции.

    N-D конволюцияотносительно N-D корреляции является отражением матрицы фильтрации.

    Пример.

    Этот примердемонстрирует считывание трехмерного изображения в формате uint8(rgb-изображение). С помощью функции imshow осуществляется визуализацияизображения.

    rgb=imread('flowers.tif');

    imshow(rgb), title('Original')

    Далее создаетсяфильтр h, который используется для аппроксимации линейного движения камеры.После применения функции imfilter к обработке трехмерного RGB изображения,создается новое изображение rgb2.

    h=fspecial('motion', 50, 45);

    rgb2=imfilter(rgb, h); 

    figure, imshow(rgb2), title('Filtered')

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

    whos rgb2Name    Size    Bytes   Classrgb2    362x500x3 543000    uint8 array

    Рассмотрим еще один пример фильтрации.

    rgb3=imfilter(rgb, h, 'replicate');figure, imshow(rgb3), title('Filtered with boundary replication')

     

     

    Наверх

    poly2mask - преобразование некоторой области в маску

    Синтаксис:

    BW=poly2mask(x, y, m, n)

    Описание:

    Функция BW=poly2mask(x, y, m, n) проводит вычисления бинарной маски области интереса BW на основе анализа этой же локальной области, представляя ее в виде векторов x и y. Размерность результата обработки BW равна mxn. Пиксели в BW, которые находятся внутри многоугольника (x, y), равны 1; пиксели вне этой области равны 0. Данные BW представляются в логическом формате.

    Функция poly2mask проводит автоматическое закрытие области многоугольника.Пример.x=[63 186 54 190 63];y=[60 60 209 204 60];bw=poly2mask(x, y, 256, 256);imshow(bw)hold onplot(x, y, 'b', 'LineWidth', 2)hold offСоздание маски с использованием случайных точек.x=256*rand(1, 4);y=256*rand(1, 4);x(end+1)=x(1);y(end+1)=y(1);bw=poly2mask(x, y, 256, 256);imshow(bw)hold onplot(x, y, 'b', 'LineWidth', 2)hold off

     

     

     

    Наверх

    qtdecomp - сегментация методом разделения

    Синтаксис:

    А=qtdecomp(l)

    А=qtdecomp(l, threshold)

    А=qtdecompO, threshold, mindim)

    A=qtdecomp(l, threshold, [mindim maxdim])

    A=qtdecomp(l, fun)

    A=qtdecomp(l, fun, P1, P2, ...)

    Описание:

    Функция qtdecomp осуществляет сегментацию полутоновых изображений методом разделения. Суть метода заключается в следующем [1]. Изображение разбивается на неперекрывающиеся блоки. Каждый блок с помощью некоторого критерия проверяется на однородность. Если блок неоднороден, то он разбивается на блоки меньшего размера, каждый из которых, в свою очередь, проверяется на однородность. Процесс завершается тогда, когда ни один из блоков не может быть разделен, т. е. либо блоки однородны, либо их размеры достигли предельно малых величин. В результате работы алгоритма получается набор однородных блоков различного размера.

    В функции qtdecomp каждый блок разбивается на 4 неперекрывающихся блока одинакового размера. На первом шаге алгоритма блоком считается все изображение. Мельчайшим по размерам является блок, который нельзя разделить на 4 блока одинакового размера, т. е. такой блок, у которого число строк или число столбцов нечетное. Таким образом, в функции qtdecomp рекомендуется использовать изображения с размерами, равными степеням двух. В этом случае мельчайший блок будет состоять из одного пикселя. При реализации алгоритма разделения используются структуры данных, основанные на квадро-деревьях. По этой причине данный алгоритм часто называют декомпозицией или разделением с помощью квадро-деревьев.

    Функция А=qtdecomp(I) осуществляет сегментацию полутонового изображения I методом разделения и помещает результат в разреженный массив А (тип данных sparse MATLAB). Разреженный массив А конструируется следующим образом. Элементам матрицы А(r, с), соответствующим координатам левых верхних углов блоков на исходном изображении I, присваиваются значения, определяющие размеры каждого блока. Таким образом, большинство элементов матрицы равно нулю. И поэтому для хранения квадро-дерева применяется разреженный массив, который эффективно использует память, когда большинство элементов массива равно нулю. Для данной функции критерием однородности блока является равенство всех пикселей блока друг другу.

    Функция А=qtdecomp(I, threshold) работает аналогично описанной выше, но в ней блок считается однородным, если разница между максимальным и минимальным значением пикселей блока меньше параметра threshold.

    В функции А=qtdecomp(I, threshold, mindim) параметр mindim определяет минимальный размер блока. Неоднородный блок не разделяется, если в результате разделения получаются блоки размером менее mindim.

    В функции А=qtdecomp(I, threshold, [mindim maxdim]) параметр mindim определяет минимальный, а параметр maxdim - максимальный размер блока. Неоднородный блок не разделяется, если в результате разделения получаются блоки размером менее mindim. Блок, превышающий размером maxdim, разделяется, даже если он однородный. Отношение параметров maxdim/mindim должно быть равно степени двух.

    Функция А=qtdecomp(I, fun) позволяет для определения однородности блока передать вторым параметром собственную функцию fun. Существует 3 варианта задания параметра fun. Они приведены в таблице в описании функции blkproc. В функцию fun передается массив В из всех текущих блоков размера mx.gif (833 bytes)m, т. е. массив mx.gif (833 bytes)mx.gif (833 bytes)k, где k - количество блоков. В результате работы функции fun возвращается вектор Z длиной k элементов, состоящий из 0 и 1. Единица указывает на то, что соответствующий блок должен быть разделен, а нуль - на то, что блок не следует далее разделять, т. е. если Z(i) = 1, то блок В(:,:, i) должен быть разделен.

    Функция А=qtdecomp(I, fun, PI, P2, ...) позволяет передать в функцию fun дополнительные параметры PI, P2,...

    Пример:

    Рассмотрим работу функции qtdecomp совместно с функциями qtgetblk и qtsetblk для полутонового изображения размера 8x.gif (833 bytes)8 пикселей. Формат представления данных изображения - uint8. Будем считать, что блок изображения является однородным, если величина разброса яркостей пикселей в блоке не превышает 10 градаций яркости. Минимально возможный размер блока установим равным двум.

    Будем считать, что к объекту относятся блоки, средняя яркость которых не превышает 50. Требуется изменить исходное изображение так, чтобы пикселям блоков, относящихся к объекту, было присвоено значение 1, а пикселям блоков, не относящихся к объекту, - 0.

    % Пример демонстрирует сегментацию небольшого тестового

    % изображения методом разделения.

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

    I= [ 10 11 10 15 20 25 47 51 

    11 14 17 13 27 29 52 55

    12 13 11 10 24 47 56 60

    13 14 11 13 49 54 74 77

    15 16 43 48 79 82 87 86

    17 18 45 50 85 80 80 84

    29 51 50 59 80 83 83 85

    59 61 58 61 81 85 86 88 ];

    % Сегментация методом разделения: размер минимального блока 2x.gif (833 bytes)2,

    % блок однородный, если в его пределах яркость изменяется

    % менее чем на 10 градаций.

    А=qtdecomp(l, 10, 2);

    % Для контроля выведем квадро-дерево с результатами сегментации

    % на экран. Для удобства визуального анализа предварительно

    % преобразуем разреженную матрицу А в обычную матрицу М

    % с помощью функции full.

    М=full(A)

    % Будет выведено:

    % 4 0 0 0 2 0 2 0

    % 0 0 0 0 0 0 0 0

    % 0 0 0 0 2 0 2 0

    % 0 0 0 0 0 0 0 0

    % 2 0 2 0 4 0 0 0

    % 0 0 0 0 0 0 0 0

    % 2 0 2 0 0 0 0 0

    % 0 0 0 0 0 0 0 0

    % В результате сегментации получилось 2 блока размера 4x.gif (833 bytes)4

    % (левая верхняя и правая нижняя части изображения)

    % и 8 блоков размера 2x.gif (833 bytes)2.

    % Переберем в цикле все возможные размеры блоков: 8, 4, 2.

    dim=8;

    while dim >= 2 

    % Получить в blocks все блоки размера dim.

    [blocks, idx]=qtgetblk(l, A, dim);

    [xy n] = size(blocks);

    % Если блоки такого размера есть в квадро-дереве,

    if n >0 

    % то перебираем все блоки размера dim.

    for j=1:n

    % Если среднее значение яркости пикселей 

    % в пределах блока меньше 50,

    if ( mean2(blocks(:,:,j)) < 50 )

    % то заменяем значения всех пикселей блока на 1,

    blocks(:,:,j)=ones(dim,dim); 

    else

    % иначе заменяем значения всех пикселей блока на 0.

    blocks(:,:,j)=zeros(dim,dim);

    end;

    end %end for

    % Устанавливаем новые значения для пикселей блоков размера

    % dim в изображении I.

    I=qtsetblk(l, A, dim, blocks);

    end; %end if

    dim = dim/2;

    end; %end while

    % Для контроля выведем получившееся изображение I.

    I=

    %1 1 1 1 1 1 0 0

    %1 1 1 1 1 1 0 0

    %1 1 1 1 1 1 0 0

    %1 1 1 1 1 1 0 0

    %1 1 1 1 1 1 0 0

    %1 1 1 1 0 0 0 0

    %1 1 1 1 0 0 0 0

    % 0 0 0 0 0 0 0 0

    % 0 0 0 0 0 0 0 0

     

     

    Наверх

    qtgetblk - получение блоков из квадро–дерева результатов сегментации

    Синтаксис:

    [vals, r, с]=qtgetblk(l, A, dim)

    [vals, idx]=qtgetblk(l, A, dim)

    Описание:

    Функция [vals, r, c]=qtgetblk(I, A, dim) возвращает в массив vals все блоки размера dim, получившиеся в результате сегментации полутонового изображения I с помощью функции qtdecomp. В параметре А передается разреженный массив, описывающий квадро-дерево с результатами сегментации. В векторы r и с помещаются соответственно номера строк и столбцов левых верхних углов блоков изображения, помещенных в массив vals. Если ни одного блока размера dim нет, то всем возвращаемым параметрам присваиваются значения пустых матриц.

    Функция [vals, idx]=qtgetblk(I, A, dim) работает аналогично описанной выше, но координаты левых верхних углов блоков, помещенных в массив vals, передает в векторе idx. Координату (r, с) пикселя по значению idx(k) можно вычислить с помощью следующих соотношений: 

    с=fix( (idx(k) + rows - 1) / rows);

    г=idx(k) - rows * (с - 1),

    где rows - количество строк в исходном изображении; k - номер блока.

     

     

    Наверх

    qtsetblk - замена блоков–результатов сегментации

    Синтаксис:

    Id=qtsetblk(Is, A, dim, vals)

    Описание:

    Функция Id=qtsetblk(Is, A, dim, vals) создает новое полутоновое изображение Id, заменяя в исходном полутоновом изображении Is все блоки размера dim, полученные в результате сегментации с помощью функции qtdecomp, на блоки из массива vals. В параметре А передается разреженный массив, описывающий квадро-дерево с результатами сегментации. Массив vals должен содержать столько же блоков размера dim, сколько их хранится в квадро-дереве А.

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

     

     

    Наверх

    edge - выделение границ

    Синтаксис:

    BW=edge(l, method)

    BW=edge(l, method, thresh)

    BW=edge(l, method, thresh, P)

    [BW, thresh]=edge(l, method, ...)

    Описание:

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

    Функция BW=edge(I, method) предназначена для выделения границ на исходном полутоновом изображении I. Данная функция возвращает бинарное изображение BW такого же размера, как исходное I. Пиксель BW(r, с) равен 1, если пиксель I(r, с) принадлежит границе. Для обнаружения границ может использоваться несколько методов. Применяемый метод задается в параметре method в виде одной из следующих строк: 'sobel', 'prewitt', 'roberts', 'log', 'zerocross', 'canny'. Если параметр method при вызове функции опущен, то по умолчанию он полагается равным 'sobel'.

    Для каждого из методов определения границ можно задать дополнительные параметры. Для этого используется одна из функций BW=edge(I, method, thresh), BW=edge(I, method, thresh, P), где параметр thresh задает порог для определения того, принадлежит ли пиксель к границе, а в параметре Р передаются настройки, специфичные для каждого из методов.

    Если при вызове функции параметр thresh опущен, то значение порога выбирается автоматически. Получить значение порога можно, дополнительно определив выходной параметр thresh: [BW, thresh]=edge(I, method,...).

    Рассмотрим использование функции edge для каждого из методов выделения границ.

    Функция BW=edge(I, 'sobel', thresh) для определения границ использует фильтрацию исходного изображения I фильтром Собеля [1, 3]; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh. Для данного метода можно указать дополнительный параметр direction: BW=edge(I, 'sobel', thresh, direction), который определяет, какие границы будут обнаруживаться. Параметр direction может принимать значения:

    • 'horizontal' - выделение горизонтальных границ;

    • 'vertical' - выделение вертикальных границ;

    • 'both' - выделение границ во всех направлениях (данное значение используется по умолчанию, когда параметр direction не определен).

    Функция BW=edge(I, 'prewitt', thresh) для определения границ использует фильтрацию исходного изображения I фильтром Превита [1,3]; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh. Для данного метода можно указать дополнительный параметр direction: BW=edge(I, 'prewitt', thresh, direction), который определяет, какие границы будут обнаруживаться. Возможные значения параметра direction описаны выше.

    Функция BW=edge(I, 'roberts', thresh) для определения границ использует фильтрацию исходного изображения I фильтром Робертса; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh.

    Функция BW=edge(I, 'log', thresh) для определения границ использует фильтрацию исходного изображения I фильтром лапласиан–гауссиана [1, 2]; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh. Для формирования маски фильтра используется функция  fspecial с параметрами sigma=2 (среднеквадратичное отклонение) и n=ceil(sigma*3)*2+1 (размер маски). Параметр sigma можно задать в параметре функции edge: BW=edge(I, 'log', thresh, sigma).

    Функция BW=edge(I, 'zerocross', thresh, h) для определения границ использует фильтрацию исходного изображения I линейным фильтром с маской h; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh.

    Функция BW=edge(I, 'canny', thresh) использует для определения границ метод Канни. Это достаточно сложный метод, состоящий из большого числа этапов [4]. Суть метода состоит в поиске локальных участков с перепадами яркости. Перепады яркости ищутся с помощью фильтрации по каждой из осей одномерным фильтром лапласиан–гауссиана (см. функцию fspecial). В методе Канни для классификации перепадов на "слабые" и "сильные" используется два порога - нижний и верхний. "Слабые" границы отмечаются в результирующем изображении, только если они соединены с "сильными". Для зашумленных изображений данный метод обеспечивает наилучшее обнаружение границ по сравнению с остальными методами функции edge, но требует существенно большего времени.

    Параметр thresh может являться двухэлементным вектором. В этом случае первый элемент вектора задает значение нижнего порога, а второй элемент - значение верхнего порога. Если параметр thresh является скалярным значением, то thresh задает значение верхнего порога, а для нижнего порога используется значение 0.4*thresh. Если параметр thresh при вызове функции опущен или в качестве thresh передан пустой массив ([ ]), то значения порогов определяются автоматически.

    В функцию BW=edge(I, 'canny', thresh, sigma) дополнительно передается параметр sigma, задающий среднеквадратичное отклонение распределения Гаусса, которое используется при формировании маски фильтра, выделяющего перепады яркости.

    Пример:

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

    % Пример демонстрирует выделение границ методом Собеля.

    % Чтение исходного изображения и вывод его на экран.

    I=imread(‘lena.bmp’);

    imshow(l);

    % Выделение границ методом Собеля и вывод результата на экран.

    BW=edge(l, ‘sobel’, 0.09);

    figure, imshow(BW);

    а)

    б)

    Рис. 1.

     

     

    Наверх

    roipoly - задание области интереса с помощью полигона

    Синтаксис:

    BW=roipoly(S)

    BW=roipoly(S, с, r)

    BW=roipoly(XData, YData, S, xi, yi)

    [BW, xi, yi]=roipoly(...)

    [XData, YData, BW, xi, yi]=roipoly(...)

    Описание:

    Функция BW=roipoly(S) позволяет интерактивно задать область интереса на исходном изображении S любого типа и поместить результат в бинарное изображение BW. Полученное бинарное изображение BW можно использовать в качестве области интереса для функции roifilt2 или для задания положения объектов и их последующего поиска с помощью функции bwlabel.

    Данная функция выводит изображение S в окно и ожидает от пользователя определения области интереса. Если при вызове функции параметр S опущен, то изображение берется из текущего окна. Интересующая область изображения должна быть обведена полигоном, вершины которого задаются однократным нажатием левой клавиши мыши. Предыдущую заданную вершину можно удалить, если нажать на клавиши Backspace или Delete. Нажатие на правую клавишу мыши или двойной щелчок левой клавишей задает последнюю вершину полигона. Также завершить процесс задания вершин без указания последней можно нажатием на клавишу Enter.

    Изображения BW и S имеют одинаковый размер. Пикселю бинарного изображения BW(r, с) присваивается значение 1, если пиксель S(r, с) находится внутри полигона. В противном случае BW(r, с) равно 0. Для определения точек, лежащих внутри полигона, используется правило Non-Zero Winding.

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

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

    Если для рассмотренных функций дополнительно определить два выходных параметра xi и yi: [BW, xi, yi]=roipoly(...), то в них будут возвращены координаты вершин полигона в пространственной системе координат. Если же дополнительно определить еще два выходных параметра XData и YData: [XData, YData, BW, xi, yi]=roipoly(...), то в них будут возвращены диапазоны значений по осям пространственной системы координат, которая использовалась для изображения S.

    Если функцию roipoly вызвать без выходных параметров, то результирующее бинарное изображение выводится на экран в новом окне. В любой из рассмотренных функций можно заменить параметр S (исходное изображение) на два параметра m и n, которые определяют размер исходного изображения. Например, если вызвать функцию BW=roipoly(100, 200), то на экран будет выведено черное изображение в 100 строк и 200 столбцов и функция будет ожидать от пользователя интерактивного задания вершин полигона. Результирующее изображение BW имеет формат представления данных uint8.

    Пример приведен в описании функции roifill. 

     

     

    Наверх

    roicolor - бинаризация по заданым цветам

    Синтаксис:

    BW=roicolor(S, low, high)

    BW =roicolor(S, v)

    Описание:

    Функция BW=roicolor(S, low, high) помещает результат бинаризации исходного полутонового или палитрового изображения S в бинарное изображение BW. Изображения BW и S имеют одинаковый размер. Пикселю бинарного изображения ВW(r, с) присваивается значение 1, если яркость пикселя S(r, с) исходного полутонового изображения или индекс S(r, с) палитрового изображения принадлежит диапазону [low, high]. В противном случае BW(r, с) присваивается значение 0.

    Полученное бинарное изображение BW можно использовать в качестве области интереса для функции roifilt2 или для задания диапазона яркостей объектов и их последующего поиска с помощью функции bwlabel.

    Функция BW=roicolor(S, v) помещает результат бинаризации исходного и полутонового или палитрового изображения S в бинарное изображение BW. Пикселю бинарного изображения BW(r, с) присваивается значение 1, если значение пикселя S(r, с) равно любому из значений вектора v. В противном случае BW(r, с) присваивается значение 0.

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

     

     

    Наверх

    watershed - Алгоритм маркерного водораздела

    Синтаксис:

    L=watershed(A)

    L=watershed(A,CONN)

    Описание:

    Функция L=watershed(A) вычисляет матрицу меток, которая идентифицирует области водораздела исходной матрицы A. Матрица А может быть любой размерности. Элементы матрицы L – это целые числа, которые больше или равны 0. Элементы, помеченные нулями не принадлежат никакой области водораздела. Они называются пикселами водораздела. Элементы помеченные единицами принадлежат области водораздела, элементы помеченные двойкой принадлежат другой области водораздела и т.д.

    По умолчанию, реализованный алгоритм маркерного водораздела использует 8-связные окрестности для двумерных и 26-связные окрестности для трехмерных изображений. Для –мерных изображений, алгоритм маркерного водораздела использует связность, которая определяется как conndef(ndims(A),'maximal').

    Функция L=watershed(A,CONN) определяет связность для использования в алгоритме маркерного водораздела. Параметр CONN принимает одно из приведенных ниже значений.

    Значение параметра

    CONN

    Описание

    Двумерная связность

    4

    4–связная окрестность

    8

    8–связная окрестность

    Трехмерная связность

    6

    6–связная окрестность

    18

    18–связная окрестность

    26

    26–связная окрестность

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

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

    Массив A может быть числовым или логическим массивом любой размерности. Также он должен быть не разреженным. Выходной массив L принадлежит классу double. 

    Примеры:

    Пример для двумерных массивов:

    1.Создать бинарное изображение, содержащее два перекрывающихся круглых объекта.

    center1=-10;

    center2=-center1;

    dist=sqrt(2*(2*center1)^2);

    radius=dist/2*1.4;

    lims=[floor(center1-1.2*radius) ceil(center2+1.2*radius)];

    [x,y]=meshgrid(lims(1):lims(2));

    bw1=sqrt((x-center1).^2+(y-center1).^2)<=radius;

    bw2=sqrt((x-center2).^2+(y-center2).^2)<=radius;

    bw=bw1|bw2;

    figure, imshow(bw,'n'), title('bw')

    2.Вычисление преобразования расстояний в дополнение к бинарному изображению.

    D=bwdist(~bw);

    figure, imshow(D,[],'n'), title('Distance transform of ~bw')

    3.Дополнительное преобразование расстояний и обработка пикселов, которые принадлежат объектам и имеют значение -Inf.

    D=-D;

    D(~bw)=-Inf;

    4.Вычисление алгоритма маркерного водораздела и визуализация результата в виде индексного изображения.

    L=watershed(D);

    rgb=label2rgb(L,'jet',[.5 .5 .5]);

    figure, imshow(rgb,'n'), title('Watershed transfrom of D');

    Пример для трехмерных массивов:

    1.Создать трехмерное бинарное изображение, которое содержит две перекрывающиеся сферы.

    center1=-10;

    center2=-center1;

    dist=sqrt(3*(2*center1)^2);

    radius=dist/2*1.4;

    lims=[floor(center1-1.2*radius) ceil(center2+1.2*radius)];

    [x,y,z]=meshgrid(lims(1):lims(2));

    bw1=sqrt((x-center1).^2+(y-center1).^2 + ...

    (z-center1).^2)<=radius;

    bw2=sqrt((x-center2).^2+(y-center2).^2 + ...

    (z-center2).^2)<=radius;

    bw=bw1|bw2;

    figure, isosurface(x,y,z,bw,0.5), axis equal, title('BW')

    xlabel x, ylabel y, zlabel z

    xlim(lims), ylim(lims), zlim(lims)

    view(3), camlight, lighting gouraud

    2.Вычисление преобразования расстояний.

    D=bwdist(~bw);

    figure, isosurface(x,y,z,D,radius/2), axis equal

    title('Isosurface of distance transform')

    xlabel x, ylabel y, zlabel z

    xlim(lims), ylim(lims), zlim(lims)

    view(3), camlight, lighting gouraud

    3.Дополнительное преобразование расстояний и обработка пикселов, которые не принадлежат объектам и имеют значение -Inf, вычисление алгоритма маркерного водораздела.

    D=-D;

    D(~bw)=-Inf;

    L=watershed(D);

    figure, isosurface(x,y,z,L==2,0.5), axis equal

    title('Segmented object')

    xlabel x, ylabel y, zlabel z

    xlim(lims), ylim(lims), zlim(lims)

    view(3), camlight, lighting gouraud

    figure, isosurface(x,y,z,L==3,0.5), axis equal

    title('Segmented object')

    xlabel x, ylabel y, zlabel z

    xlim(lims), ylim(lims), zlim(lims)

    view(3), camlight, lighting gouraud

    Алгоритм

    маркерного водораздела использует разновидность алгоритма Vincent-Soille [1]. Для более детальной информации смотрите toolbox/images/images/private/watershed_vs.h.

     

     

     

     

    Наверх

    uintlut - вычисление новых значений массива на основе табличных преобразований

    Синтаксис:

    B=uintlut(A, LUT)

    Описание:

    Функция uintlut(A, LUT) создает массив, содержащий новые значения A, на основе табличных преобразований (lookup table (LUT)). Например, когда A представляет собой вектор, в котором k-й элемент эквивалентный alpha, то B(k)эквивалентно соответствующему значению из табличных преобразований, LUT(alpha+1).

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

     

    Массив A представляется в формате uint8 или uint16. Когда массив A представлен в формате uint8, тогда табличные преобразования проводятся над 256-элементным вектором в формате uint8. Когда массив A представлен в формате uint16, тогда табличные преобразования поводятся над вектором, состоящим из 65536 элементов. Данные в B имеют ту же размерность и формат представления данных, что и массив A.

    Пример:

    A=uint8([1 2 3 4; 5 6 7 8; 9 10 11 12]);LUT=repmat(uint8([0 150 200 255]), 1, 64);B=uintlut(A, LUT);imview(A),imview(B);

     

     

    Наверх

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

    Синтаксис:

    D=applylift( BW, lut)

    Описание:

    Функция D=applylut(BW, lut) создает изображение D из бинарного изображения BW, используя таблицу перекодировки lut. Вектор lut является вектором, содержащим либо 16 либо 512 элементов. Подобный вектор формируется функцией makelut. Вектор lut содержит выходные значения для всех возможных конфигураций соседей пикселя бинарного изображения в квадрате 2x2 или 3x3 пикселя.

    Тип и формат представления данных изображения D зависит от значений в lut. Если lut содержит только 0 и 1, то D является бинарным изображением в формате uint8. В противном случае D - полутоновое изображение. Оно имеет формат представления данных uint8, если значения в lut принадлежат диапазону [0, 255], и double в противном случае.

    Чаще всего функция applylut используется для выполнения морфологических операций над бинарным изображением. Возможные размеры структурного элемента 2x2 и 3x3.

    Алгоритм:

    В функции applylut новое изображение создается из значений в таблице перекодировки.

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

    , если длина таблицы перекодировки равна 16, или матрицей

    , если длина равна 512. 

    Затем к результатам свертки добавляется 1. Это гарантирует, что значения в получившейся матрице индексов находятся в диапазоне [1, 16], если длина таблицы перекодировки равна 16, и в диапазоне [1, 512], если длина равна 512.

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

    Пример:

    Сконструируем с помощью makelut и applylut морфологическую операцию эрозии и наращения по преобладанию в окрестности пикселей фона или объекта, аналогичную операции 'majority' (см. функцию bwmorph), но с пороговым значением 4. То есть необходимо каждый пиксель изображения обработать следующим образом: если в окрестности пикселя размера 3x3 находится 4 или более пикселей объекта, то рассматриваемый пиксель устанавливается в 1, в противном случае он приравнивается к 0.

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

    % Пример демонстрирует реализацию операции эрозии и наращения

    % по преобладанию в окрестности пикселов фона или объекта.

    % Чтение исходного изображения и вывод его на экран.

    BW1=imread('objl.bmp');

    imshow(BWI);

    % Формирование соответствующей таблицы перекодировки.

    lut=makelut('sum(x(:))>=4', 3);

    % Применение эрозии и наращения по преобладанию.

    BW2=applylut(BW1, lut);

    % Вывод результата на экран.

    figure, imshow(BW2);


    а)

    б)

    Рис. 1.

     

     

    Наверх

    bwboundaries - отслеживание локальных границ на бинарном изображении

    Синтаксис:

    B=bwboundaries(BW)B=bwboundaries(BW, CONN)B=bwboundaries(BW, CONN, options)[B L]=bwboundaries(...)[B L N A]=bwboundaries()

    Описание:

     

    Функция B=bwboundaries(BW) отслеживает наружные границы объекта на бинарном изображении BW. Функция bwboundaries позволяет обрабатывать различные объекты, в том числе объекты, которые являются включенными в другие объекты. Исходный массив BW должен быть бинарным изображением, где ненулевые пиксели соответствуют объекту, а нулевые - фону. Рисунок внизу демонстрирует возможные варианты расположения объектов.

    Функция bwboundaries возвращает массив B с размерностью Px1, где P является числом объектов и отверстий. Каждый элемент массива содержит матрицу с размерностью Qx2. Каждая строка этой матрицы содержит координаты строки и столбца граничного пикселя. Q является числом граничных пикселей соответствующей области.

    Функция B=bwboundaries(BW, CONN) для определения границ объектов, которые находятся внутри других объектов, использует описание связности. Параметр связности CONN может принимать следующие скалярные значения.

    CONN Описание
    4 4-связная окрестность
    8 8-связная окрестность. Устанавливается по умолчанию.

    Функция B=bwboundaries(BW, CONN, options) при обработке использует аргумент options, который может принимать одно из следующих значений.

    option Описание
    'holes' Поиск для обоих объектов и границ отверстий.
    'noholes' Поиск только границ объекта (внешнего и внутреннего). Этот параметр обеспечивает улучшенную обработку.

    Функция [B, L]=bwboundaries(...) возвращает матрицу меток L в качестве второго дополнительного аргумента. Объекты и отверстия являются мечеными. Параметр L представляет собой двумерный массив неотрицательных целых чисел, которые отображают соседние окрестности. Число объектов и отверстий, представленных в L равно max(L(:)). Нулевые значения элементов соответствуют фону.

     

    Функция [B, L, N, A]=bwboundaries(...) возвращает N - число используемых объектов, A - смежные матрицы. Первые N элементов в B являются границами объекта. Массив A описывает объект, вложенный в объект. A - это квадратная разреженная логическая матрица со стороной длиною max(L(:)), чьи строки и столбцы описывают позиции границ, хранящихся в B.

    Закрытые границы B{m} могут быть найдены с использованием A следующим образом:

     

    enclosing_boundary=find(A(m,:));

    enclosed_boundaries=find(A(:,m));

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

     

    BW должен быть не разреженным двумерным логическим или числовым массивом вещественных чисел. Данные L и N имеют формат представления данных double. Массив A является логическим и разреженным.

    Примеры.

     

    Пример 1.

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

    I=imread('rice.png');BW=im2bw(I, graythresh(I));[B, L]=bwboundaries(BW, 'noholes');imshow(label2rgb(L, @jet, [.5 .5 .5]))hold onfor k=1:length(B)             boundary = B{k};             plot(boundary(:, 2), boundary(:, 1), 'w', 'LineWidth', 2)endПример 2.

    Считаем и отобразим на мониторе бинарное изображение. Поверх изображения отобразим контуры объектов. Отобразим также текст, показывая номер области (на основании матрицы меток). Дополнительно отобразим смежные матрицы с использованием функций MATLAB.

     

    Часто изображения отображают с использованием инструмента zoom и считывания индивидуальных меток.

    BW=imread('blobs.png');[B, L, N, A]=bwboundaries(BW);imshow(BW); hold on;colors=['b' 'g' 'r' 'c' 'm' 'y'];for k=1:length(B),        boundary=B{k};        cidx=mod(k, length(colors))+1;        plot(boundary(:, 2), boundary(:, 1), colors(cidx), 'LineWidth',2);        %randomize text position for better visibility        rndRow=ceil(length(boundary)/(mod(rand*k, 7)+1));        col=boundary(rndRow, 2); row=boundary(rndRow, 1);        h=text(col+1, row-1, num2str(L(row,col)));        set(h, 'Color', colors(cidx), 'FontSize', 14, 'FontWeight', 'bold');endfigure; spy(A);Пример 3.Отобразим границы объекта красным, а отверстий зеленым цветом.BW=imread('blobs.png');[B, L, N]=bwboundaries(BW);imshow(BW); hold on;for k=1:length(B),          boundary = B{k};          if(k > N)              plot(boundary(:,2), boundary(:,1), 'g','LineWidth',2);           else              plot(boundary(:,2), boundary(:,1), 'r','LineWidth',2);           endendПример 4.Отобразим границы внешнего объекта красным (пустая строка смежной матрицы соответствует объекту) и его отверстия зеленым цветом.BW=imread('blobs.png');[B, L, N, A]=bwboundaries(BW);imshow(BW); hold on;for k=1:length(B),        if(~sum(A(k, :)))            boundary=B{k};            plot(boundary(:,2), boundary(:,1), 'r','LineWidth',2);              for l=find(A(:,k))'                   boundary = B{l};                   plot(boundary(:,2), boundary(:,1), 'g','LineWidth',2);             end        endend

     

     

    Наверх

    bwmorph - морфологические операции над бинарным изображением

    Синтаксис: 

    BWd=bwmorph(BWs, operation)

    BWd=bwmorph(BWs, operation, n)

    Описание:

    Функция BWd=bwmorph(BWd, operation) создает бинарное изображение BWd, подвергая обработке морфологическим фильтром исходное бинарное изображение BWs. Тип используемого морфологического фильтра определяется параметром operation. Морфологические операции (их также называют морфологическими фильтрами) представляют собой нелинейный способ обработки изображений. Их применяют с целью изменения формы объектов. Рассматривая морфологические операции, будем называть связные области, значения пикселей которых равны единице, объектами, а области изображения, значения пикселей которых равны нулю, фоном.

    Параметр operation может принимать одно из следующих значений:

    "erode" Эрозия объекта. Приводит к замене значений граничных пикселей объекта на 0. Однократное применение эрозии приводит к удалению слоя границы толщиной в 1 пиксель (рис. 16).
    "dilate" Наращение объекта. Приводит к замене значений пикселей фона, граничащих с объектом, на 1. Однократное применение наращения приводит к добавлению к объекту слоя толщиной в 1 пиксель (рис. 1в).
    "open" Открытие. Представляет собой последовательное применение эрозии и наращения. Приводит к соединению областей фона, ранее разъединенных узкими участками пикселей объектов (рис. 1г).
    "close" Закрытие. Представляет собой последовательное применение наращения и эрозии. Приводит к удалению небольших по площади фрагментов фона внутри объектов, например "дыр" (замкнутых областей фона внутри объекта) (рис. 1д).
    "tophat" Преобразование типа "верх шляпы ". Соответствует вычитанию из исходного изображения результата его открытия (рис. 1е).
    "bothat" Преобразование типа "низ шляпы". Соответствует вычитанию исходного изображения из результата его закрытия (рис. 1ж).
    "clean" Удаление изолированных пикселей объектов. Пиксели равные l, все 8 соседей которых равны 0, заменяются на 0.
    "fill" Заполнение изолированных пикселей фона. Пиксели, равные 0, все 8 соседей которых равны 1, заменяются на 1.
    "diag" Уничтожение 8-связности фона. Осуществляется добавлением необходимого количества единиц во фрагменты объектов, связанных только по диагонали. Например, фрагмент изображения 
     заменяется на
    "bridge" Соединение пикселей объекта, разъединенных фрагментом фона толщиной в 1 пиксель. Например, фрагмент изображения
     заменяется на
    "hbreak" Удаление центрального пикселя в конфигурациях, похожих на букву "Н":
     и  заменятся соответственно на  и
    "remove" Удаление внутренних пикселей объектов. Для этого в 0 устанавливаются пиксели объекта, у которых 4 соседних по горизонтали и вертикали пикселя были равны 1, т.е. тоже являлись пикселями объекта. В результате применения этого морфологического фильтра не сброшенными останутся только пиксели границы объекта (рис. 1б).
    "majority" Эрозия и наращение по преобладанию в окрестности пикселей фона или объекта. Осуществляется следующим образом: если в окрестности пикселя размера 3x3 находится 5 или более пикселей объекта, то рассматриваемый пиксель устанавливается в 1, в противном случае – в 0.
    "skel" Построение остова (скелета) объекта. Операция выполняет эрозию объекта с учетом ряда условий для сохранения 8-связности остова. В результате последовательного применения данной операции можно построить остов, представляющий собой связную линию толщиной в 1 пиксель, проходящую по середине объекта (рис. 1в).
    "shrink" Сжатие объекта. Операция выполняет эрозию объекта с учетом ряда условий для сохранения 8-связности замкнутых участков остова. В результате последовательного применения данной операции объекты, не содержащие дыр, превращаются в точку, а объекты с дырами "сжимаются" в 8-связные замкнутые участки остова, проходящие посередине и по внешней границе объекта (рис. 1г).
    "thin" Утоньшение объекта. Операция выполняет эрозию объекта с учетом ряда условий для сохранения 8-связности участков остова. В результате последовательного применения данной операции объекты, не содержащие дыр, превращаются в одну или несколько связных линий с минимальным количеством разветвлении остова по сравнению с остовом, получаемым с помощью оператора 'skel", а объекты с дырами сжимаются в 8-связные замкнутые участки остова, проходящие посередине между границами дыр и внешней границей объекта (рис. 1д).
    "thicken" Утолщение объекта. Операция выполняет наращение объекта с учетом ряда условий для сохранения 4-связности участков фона. Данная операция может рассматриваться как построение остова фона и является по смыслу обратной операции 'thin'. Результат данной операции будет незначительно отличаться от результатов применения оператора 'thin' к инвертированному изображению (рис. 1е).
    "spur" Удаление ответвлений объекта толщиной в 1 пиксель, т. е. удаление пикселей, у которых только один из соседних пикселей установлен в 1, а остальные - в 0. 
    Например, фрагмент изображения
     заменяется на .
    В результате последовательного применения данной операции к изображению остова на изображении остаются только замкнутые участки остова.

    На рис. 1, б-ж показаны результаты применения одной итерации эрозии, наращения, открытия, закрытия, операций 'tophat' и 'bothat' соответственно к бинарному объекту, изображенному на рис. 1а. Изображения показаны в инверсных цветах относительно того, как они воспроизводятся в MATLAB.


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

    б) эрозия

    в) наращение

    г) открытие

    д) закрытие
    p1.gif (988 bytes)
    е) операция "tophat"
    p2.gif (1167 bytes)
    ж) операция "bothat"

    Рис. 1.

    Функция BWd=bwmorph(BWs, operation, n) создает бинарное изображение BWd, подвергая BWs морфологической фильтрации n раз. Параметр n может быть равен Inf, в этом случае обработка продолжается до тех пор, пока результаты двух последовательных итераци