Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

La descomposición Quadtree

La descomposición de Quadtree es una técnica de análisis que implica subdividir una imagen en bloques que son más homogéneos que la propia imagen. Esta técnica revela información sobre la estructura de la imagen. También es útil como el primer paso en los algoritmos de compresión adaptable.

Puede realizar la descomposición del cuadriárbol utilizando la función.qtdecomp Esta función funciona dividiendo una imagen cuadrada en cuatro bloques cuadrados de igual tamaño y, a continuación, probando cada bloque para ver si cumple algún criterio de homogeneidad (p. ej., si todos los píxeles del bloque están dentro de un rango dinámico específico). Si un bloque cumple el criterio, no se divide más. Si no cumple el criterio, se subdivide de nuevo en cuatro bloques, y el criterio de prueba se aplica a esos bloques. Este proceso se repite de forma iterativa hasta que cada bloque cumple el criterio. El resultado podría tener bloques de varios tamaños diferentes. Los bloques pueden ser tan pequeños como 1 por 1, a menos que especifique lo contrario.

Devuelve la descomposición del cuadriárbol como una matriz dispersa, del mismo tamaño que.qtdecompI Los elementos distintos de cero representan las esquinas superiores izquieras de los bloques. El valor de cada elemento distinto de cero indica el tamaño del bloque.

Realice la descomposición de Quadtree en una imagen

Este ejemplo muestra cómo realizar la descomposición de Quadtree en una imagen en escala de grises 512-by-512.

Lea la imagen en escala de grises en el espacio de trabajo.

I = imread('liftingbody.png');

Realice la descomposición del cuadriárbol llamando a la función, especificando como argumentos la imagen y los criterios de prueba utilizados para determinar la homogeneidad de cada bloque en la descomposición.qtdecomp Por ejemplo, el criterio podría ser un cálculo de umbral, como.max(block(:)) - min(block(:)) >= 0.27 También puede suministrar una función (en lugar de un valor umbral) para decidir si desea dividir los bloques.qtdecomp Por ejemplo, puede basar la decisión en la varianza del bloque.

S = qtdecomp(I,0.27);

Ver una representación de bloque de la descomposición del cuadriárbol. Cada cuadrado negro representa un bloque homogéneo, y las líneas blancas representan los límites entre los bloques. Observe cómo los bloques son más pequeños en áreas que corresponden a grandes cambios de intensidad en la imagen.

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,[])