exponenta event banner

Декомпозиция квадратного дерева

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

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

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

Выполнение декомпозиции Quadtree для изображения

В этом примере показано, как выполнить декомпозицию квадратного дерева для изображения в градациях серого 512 на 512.

Считывание изображения в градациях серого в рабочую область.

I = imread('liftingbody.png');

Выполните декомпозицию quadtree, вызвав 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,[])

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

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