qtdecomp

Разложение дерева квадрантов

Синтаксис

S = qtdecomp(I)
S = qtdecomp(I,threshold)
S = qtdecomp(I,threshold,mindim)
S = qtdecomp(I,threshold,[mindim maxdim])
S = qtdecomp(I,fun)

Описание

S = qtdecomp(I) выполняет разложение дерева квадрантов на полутоновом изображении I и возвращает структуру дерева квадрантов в разреженной матрице S. По умолчанию qtdecomp разделяет блок, если все элементы в блоке не равны.

пример

S = qtdecomp(I,threshold) разделяет блок, если максимальное значение элементов блока минус минимальное значение элементов блока больше, чем threshold.

S = qtdecomp(I,threshold,mindim) не произведет блоки, меньшие, чем mindim, даже если получившиеся блоки не удовлетворят пороговому условию.

S = qtdecomp(I,threshold,[mindim maxdim]) не произведет блоки, меньшие, чем mindim или больше, чем maxdim. Блоки, больше, чем maxdim, разделены, даже если они удовлетворяют пороговому условию.

S = qtdecomp(I,fun) использует функциональный fun, чтобы определить, разделить ли блок.

Примеры

свернуть все

Создайте матрицу небольшой выборки.

I = uint8([1 1 1 1 2 3 6 6;...
             1 1 2 1 4 5 6 8;...
             1 1 1 1 7 7 7 7;... 
             1 1 1 1 6 6 5 5;... 
             20 22 20 22 1 2 3 4;... 
             20 22 22 20 5 4 7 8;... 
             20 22 20 20 9 12 40 12;...
             20 22 20 20 13 14 15 16]);

Выполните разложение дерева квадрантов и отобразите результаты.

S = qtdecomp(I,.05);
disp(full(S));
     4     0     0     0     4     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     4     0     0     0     2     0     2     0
     0     0     0     0     0     0     0     0
     0     0     0     0     2     0     1     1
     0     0     0     0     0     0     1     1

Считайте изображение в рабочую область.

I = imread('liftingbody.png');

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

S = qtdecomp(I,.27);
blocks = repmat(uint8(0),size(S));

for dim = [512 256 128 64 32 16 8 4 2 1];    
  numblocks = length(find(S==dim));    
  if (numblocks > 0)        
    values = repmat(uint8(1),[dim dim numblocks]);
    values(2:dim,2:dim,:) = 0;
    blocks = qtsetblk(blocks,S,dim,values);
  end
end

blocks(end,1:end) = 1;
blocks(1:end,end) = 1;

imshow(I)

figure
imshow(blocks,[])

Входные параметры

свернуть все

Полутоновое изображение, заданное как m-by-n числовая матрица. Если синтаксис включает указатель на функцию, fun, то изображение может иметь любой класс, поддержанный функцией.

Типы данных: single | double | int16 | uint8 | uint16 | logical

Порог однородности блока, заданной как скаляр в области значений [0, 1].

  • Если I имеет класс uint8, то qtdecomp умножает значение threshold на 255, чтобы определить фактический порог, чтобы использовать.

  • Если I имеет класс uint8, то qtdecomp умножает значение threshold на 65 535, чтобы определить фактический порог, чтобы использовать.

Минимальный размер блока, заданный как положительное целое число. mindim должен быть фактором размера изображения.

Максимальный размер блока, заданный как положительное целое число. maxdim/mindim должен быть степенью 2.

Указатель на функцию, заданный как указатель. Функция должна принять как вход весь m-by-m блоки, сложенные в m-by-m-by-k массив, где k является количеством блоков. Функция должна возвратить логический k - вектор элемента, значениями которого является 1, если соответствующий блок должен быть разделен, и 0 в противном случае. Например, если k (3) является 0, то третий m-by-m блок не должен быть разделен.

Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

Выходные аргументы

свернуть все

Структура дерева квадрантов, возвращенная как разреженная матрица. Если S(k,m) является ненулевым, то (k,m) является левым верхним углом блока в разложении, и размер блока дан S(k,m).

Типы данных: double

Советы

  • qtdecomp подходит, в основном, для квадратных изображений, размерности которых являются степенью 2, такой как 128 128 или 512 512. Эти изображения могут быть разделены, пока блоки не столь маленькие как 1 на 1. Если вы используете qtdecomp с изображением, размерности которого не являются степенью 2, в какой-то момент блоки не могут быть разделены далее. Например, если изображение 96 96, оно может быть разделено на блоки размера 48 48, затем 24 24, 12 12, 6 6, и наконец 3х3. Никакое дальнейшее деление вне 3х3 не возможно. Чтобы обработать это изображение, необходимо установить mindim на 3 (или на 3 раза степень 2); если вы используете синтаксис, который включает функцию, fun, функция должна возвратить 0 в точке, когда блок не может быть разделен далее.

Алгоритмы

Функция qtdecomp делит квадратное изображение на четыре квадратных блока равного размера, и затем тестирует каждый блок, чтобы видеть, соответствует ли это некоторому критерию однородности. Если блок соответствует критерию, он не разделен дальше. Если это не соответствует критерию, это подразделено снова в четыре блока, и тестовый критерий применяется к тем блокам. Этот процесс повторяется итеративно, пока каждый блок не соответствует критерию. Результат может иметь блоки нескольких различных размеров.

Смотрите также

|

Представлено до R2006a