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

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

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

qtdecomp возвращает разложение дерева квадрантов как разреженную матрицу, тот же размер как I. Ненулевые элементы представляют левые верхние углы блоков. Значение каждого ненулевого элемента указывает на размер блока.

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

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

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

I = imread('liftingbody.png');

Выполните разложение дерева квадрантов путем вызова qtdecomp функция, задавая в качестве аргументов изображение и тестовые критерии раньше определяла однородность каждого блока в разложении. Например, критерий может быть пороговым вычислением, таким как max(block(:)) - min(block(:)) >= 0.27. Можно также предоставить qtdecomp с функцией (а не пороговое значение) для решения, разделить ли блоки. Например, вы можете основывать решение об отклонении блока.

S = qtdecomp(I,0.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,[])