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.

Descomposición de Quadtree

La descomposición de Quadtree es una técnica de análisis que consiste en 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 primer paso en algoritmos de compresión adaptativa.

Puede realizar la descomposición de cuadrángulos 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 (por ejemplo, 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 puede 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 cuadrángulo como una matriz dispersa, del mismo tamaño que .qtdecompI Los elementos distintos de cero representan las esquinas superiores izquierdas de los bloques. El valor de cada elemento distinto de cero indica el tamaño del bloque.

Realizar la descomposición de Quadtree en una imagen

Este ejemplo muestra cómo realizar la descomposición de cuadrángulos en una imagen en escala de grises 512 por 512.

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

I = imread('liftingbody.png');

Realice la descomposición del cuadrángulo 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 dividir 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 cuadrángulo. 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 correspondientes 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,[])