exponenta event banner

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

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

Вы можете выполнить декомпозиция quadtree, используя 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.