Функции Image Toolbox / qtdecomp.php
.htmСписок функций 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("") >