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]);

Выполните декомпозицию quadtree и отобразите результаты.

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');

Выполните декомпозицию quadtree и отобразите представление блока на рисунке.

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 contains an axes. The axes contains an object of type image.

figure
imshow(blocks,[])

Figure contains an axes. The axes contains an object of type image.

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

свернуть все

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

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

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

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

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

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

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

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

Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».

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

свернуть все

Структура Квадтри, возвращенная как разреженная матрица. Если 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 в точке, когда блок не может быть разделен дальше.

Алгоритмы

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

См. также

|

Представлено до R2006a
Для просмотра документации необходимо авторизоваться на сайте