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.

qtdecomp

La descomposición Quadtree

Descripción

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

ejemplo

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

S = qtdecomp(I,threshold,mindim) no producirá bloques menores que, incluso si los bloques resultantes no cumplen con la condición de umbral.mindim

S = qtdecomp(I,threshold,[mindim maxdim]) no producirá bloques menores o mayores que.mindimmaxdim Los bloques mayores que se dividen incluso si cumplen la condición de umbral.maxdim

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

Ejemplos

contraer todo

Cree una matriz de muestra pequeña.

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 del cuadriárbol y visualice 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 

Leer la imagen en el espacio de trabajo.

I = imread('liftingbody.png');

Realice la descomposición del cuadriárbol y visualice la representación de bloque 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 imshow(blocks,[])

Argumentos de entrada

contraer todo

Imagen en escala de grises, especificada como una matriz numérica.mn Si la sintaxis incluye un identificador de función, la imagen puede ser de cualquier clase admitida por la función.fun

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

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

  • Si es de clase, entonces multiplica el valor de por 255 para determinar el umbral real a utilizar.Iuint8qtdecompthreshold

  • Si es de clase, entonces multiplica el valor de por 65535 para determinar el umbral real a utilizar.Iuint8qtdecompthreshold

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

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

Identificador de función, especificado como un identificador. La función debe aceptar como entrada todo-por-bloques apilados en un-por--por-Array, donde es el número de bloques.mmmmkk La función debe devolver un vector de elemento lógico, cuyos valores son si el bloque correspondiente debe dividirse, y de lo contrario.k10 Por ejemplo, if () es, a continuación, el tercer por bloque no debe dividirse.k30mm

Para obtener más información acerca de los identificadores de función, vea.Crear identificador de función (MATLAB)

Argumentos de salida

contraer todo

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

Tipos de datos: double

Sugerencias

  • es adecuado principalmente para imágenes cuadradas cuyas dimensiones son una potencia de 2, como 128-by-128 o 512-by-512.qtdecomp Estas imágenes se pueden dividir hasta que los bloques sean tan pequeños como 1-por-1. Si se utiliza con una imagen cuyas dimensiones no son una potencia de 2, en algún momento los bloques no se pueden dividir más.qtdecomp Por ejemplo, si una imagen es 96-by-96, se puede dividir en bloques de tamaño 48-por-48, luego 24-por-24, 12-por-12, 6-por-6, y finalmente 3-por-3. No hay más división más allá de 3 por 3 es posible. Para procesar esta imagen, usted debe fijar a 3 (o a 3 veces una potencia de 2); Si está utilizando la sintaxis que incluye una función, la función debe devolver en el momento en que el bloque no se puede dividir más.mindimfun0

Algoritmos

La función divide una imagen cuadrada en cuatro bloques cuadrados de igual tamaño y, a continuación, prueba cada bloque para ver si cumple algún criterio de homogeneidad.qtdecomp 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.

Consulte también

|

Introducido antes de R2006a