Contenido principal

qtdecomp

Descomposición de árbol cuaternario

Descripción

S = qtdecomp(I) realiza una descomposición de árbol cuaternario en la imagen en escala de grises I y devuelve la estructura de árbol cuaternario en la matriz dispersa S. De forma predeterminada, qtdecomp divide un bloque a menos que sean iguales todos los elementos del bloque.

S = qtdecomp(I,threshold) divide un bloque si el valor máximo de los elementos del bloque menos el valor mínimo de los elementos del bloque es mayor que threshold.

ejemplo

S = qtdecomp(I,threshold,mindim) no producirá bloques más pequeños que mindim, aunque los bloques resultantes no cumplan la condición del umbral.

S = qtdecomp(I,threshold,[mindim maxdim]) no producirá bloques más pequeños que mindim ni más grandes que maxdim. Los bloques más grandes que maxdim se dividen incluso si cumplen la condición del umbral.

S = qtdecomp(I,fun) utiliza la función fun para determinar si se debe dividir un bloque.

Ejemplos

contraer todo

Cree una pequeña matriz de muestra.

I = uint8([1 1 1 1 2 3 6 6;...
             1 1 2 1 4 5 6 8;...
             1 1 1 1 7 7 7 7;... 
             1 1 1 1 6 6 5 5;... 
             20 22 20 22 1 2 3 4;... 
             20 22 22 20 5 4 7 8;... 
             20 22 20 20 9 12 40 12;...
             20 22 20 20 13 14 15 16]);

Realice la descomposición de árbol cuaternario y muestre los resultados.

S = qtdecomp(I,.05);
disp(full(S));
     4     0     0     0     4     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     4     0     0     0     2     0     2     0
     0     0     0     0     0     0     0     0
     0     0     0     0     2     0     1     1
     0     0     0     0     0     0     1     1

Lea una imagen en el área de trabajo.

I = imread('liftingbody.png');

Realice la descomposición de árbol cuaternario y muestre la representación en bloques en una figura.

S = qtdecomp(I,.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 contains an axes object. The hidden axes object contains an object of type image.

figure
imshow(blocks,[])

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

Argumentos de entrada

contraer todo

Imagen en escala de grises, especificada como matriz numérica de m por n. Si la sintaxis incluye un identificador de función, fun, la imagen puede ser de cualquier tipo de datos admitido por la función.

Tipos de datos: single | double | int16 | uint8 | uint16 | logical

Umbral de homogeneidad de bloques, especificado como un número en el intervalo [0, 1].

  • Si I es del tipo de datos uint8, entonces qtdecomp multiplica el valor de threshold por 255 para determinar el umbral real que se utilizará.

  • Si I es del tipo de datos uint16, entonces qtdecomp multiplica el valor de threshold por 65535 para determinar el umbral real que se utilizará.

Tamaño del bloque mínimo, especificado como entero positivo. mindim debe ser un factor del tamaño de imagen.

Tamaño del bloque máximo, especificado como entero positivo. maxdim/mindim debe ser una potencia de 2.

Identificador de función, especificado como identificador. La función debe aceptar como entrada todos los bloques de m por m apilados en un arreglo de m por m por k, donde k es el número de bloques. La función debe devolver un vector de k elementos lógicos, cuyos valores son 1 si el bloque correspondiente debe dividirse y 0 en caso contrario. Por ejemplo, si k(3) es 0, el tercer bloque de m por m no debe dividirse.

Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

Argumentos de salida

contraer todo

Estructura de árbol cuaternario, devuelta como matriz dispersa. Si S(k,m) es distinto de cero, entonces (k,m) es la esquina superior izquierda de un bloque en la descomposición, y el tamaño del bloque viene dado por S(k,m).

Tipos de datos: double

Sugerencias

  • La función qtdecomp es apropiada principalmente para imágenes cuadradas cuyas dimensiones son una potencia de 2, como 128 por 128 o 512 por 512. Estas imágenes se pueden dividir hasta que los bloques sean tan pequeños como 1 por 1. Si se utiliza qtdecomp con una imagen cuyas dimensiones no sean una potencia de 2, en algún punto los bloques no se podrán dividir más. Por ejemplo, si una imagen es de 96 por 96, se puede dividir en bloques de 48 por 48, luego de 24 por 24, 12 por 12, 6 por 6 y, finalmente, 3 por 3. No es posible realizar ninguna división más allá de 3 por 3. Para procesar esta imagen, debe establecer la función mindim en 3 (o en 3 veces una potencia de 2); si está utilizando la sintaxis que incluye una función, fun, la función debe devolver 0 al punto en el que el bloque no se puede dividir más.

Algoritmos

La función qtdecomp divide una imagen cuadrada en cuatro bloques cuadrados de igual tamaño y luego prueba cada bloque para ver si cumple algún criterio de homogeneidad. Si un bloque cumple el criterio, no se divide más. Si no cumple el criterio, se subdivide nuevamente en cuatro bloques y se aplica el criterio de prueba a esos bloques. Este proceso se repite iterativamente hasta que cada bloque cumpla el criterio. El resultado puede tener bloques de varios tamaños diferentes.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a

expandir todo

Consulte también

|