qtdecomp

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

Описание

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