Скачиваний:
4
Добавлен:
02.05.2014
Размер:
36.18 Кб
Скачать

Список функций Image Processing Toolbox. Описание функции QTDECOMP  Семинары   Обучение   Лицензирование   Разработка   Подписка   Форум  Регистрация    Matlab    Toolboxes    Simulink    Blocksets    Femlab    Полезное Вход Обработка сигналов и изображений\image Processing ToolboxСписок функций Image Processing Toolbox: Сегментация изображений

  В оглавление \ К следующему разделу \ К предыдущему разделу

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 передается массив В из всех текущих блоков размера mm, т. е. массив mmk, где k - количество блоков. В результате работы функции fun возвращается вектор Z длиной k элементов, состоящий из 0 и 1. Единица указывает на то, что соответствующий блок должен быть разделен, а нуль - на то, что блок не следует далее разделять, т. е. если Z(i) = 1, то блок В(:,:, i) должен быть разделен.

Функция А=qtdecomp(I, fun, PI, P2, ...) позволяет передать в функцию fun дополнительные параметры PI, P2,...

Пример:

Рассмотрим работу функции qtdecomp совместно с функциями qtgetblk и qtsetblk для полутонового изображения размера 88 пикселей. Формат представления данных изображения - 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 ];

% Сегментация методом разделения: размер минимального блока 22,

% блок однородный, если в его пределах яркость изменяется

% менее чем на 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 блока размера 44

% (левая верхняя и правая нижняя части изображения)

% и 8 блоков размера 22.

% Переберем в цикле все возможные размеры блоков: 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, QTSETBLK.

Ссылки на литературу: Павлидис Т. Алгоритмы машинной графики и обработки изображений. М. Радио и связь, 1986.

  В оглавление \ К следующему разделу \ К предыдущему разделу

  I Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)

  II Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2004 г.) На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro    E-mail: matlab@exponenta.ru      Информация на сайте была обновлена 14.05.05 Copyright 2001-2005 SoftLine Co 

Наши баннеры         hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=58396&im=33&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("") >

Соседние файлы в папке Функции Image Toolbox