Main Content

reducepoly

Reducir la densidad de puntos en el ROI

Descripción

ejemplo

P_reduced = reducepoly(P) reduce la densidad de puntos en la matriz.P Especifique como una matriz -by-2 del formulario, donde cada fila representa un punto.Pn[x1 y1; ...; xn yn] Por ejemplo, podría ser la matriz devuelta por una de las funciones de creación de ROI, como o . devuelve , una matriz -by-2 de puntos que suele ser más pequeña que .PdrawfreehanddrawpolygonreducepolyP_reducednP

utiliza el algoritmo de simplificación de línea Douglas-Peucker, eliminando puntos a lo largo de una línea recta y dejando sólo puntos de knickpoints (puntos donde la línea se curva).reducepoly

P_reduced = reducepoly(P,tolerance) reduce la densidad de puntos en la matriz , donde especifica cuánto un punto puede desviarse de una línea recta.Ptolerance Especifique en el rango .tolerance[0,1]

Ejemplos

contraer todo

Lea una imagen en el espacio de trabajo.

I = imread('coins.png'); 

Convierta la imagen de una imagen en escala de grises en una imagen binaria. La función para buscar límites requiere imágenes binarias.

bw = imbinarize(I); 

Obtener los límites de todas las monedas en la imagen binaria.

[B,L] = bwboundaries(bw,'noholes'); 

Trazar el límite de una de las monedas sobre la imagen original.

imshow(I) hold on; k = 1; boundary = B{k}; plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2) hold off; 

Se utiliza para reducir el número de puntos que definen el límite de la moneda.reducepoly

p = [boundary(:,2) boundary(:,1)]; tolerance = 0.02; % choose suitable tolerance p_reduced = reducepoly(p,tolerance); 

Compare el polígono original superpuesto sobre el polígono reducido y vea qué tan bien coincide la forma definida por menos vértices con el polígono original.

hf = figure; ha = axes('parent',hf,'box','on','Ydir','reverse'); axis equal % Original data. line(p(:,1),p(:,2),'parent',ha,...       'color',[1 0.5 0],'linestyle','-','linewidth',1.5,...       'marker','o','markersize',4.5) % Reduced data. line(p_reduced(:,1),p_reduced(:,2),'parent',ha,...        'color',[0 0 1],'linestyle','-','linewidth',2,...        'marker','o','markersize',5); legend('Original points','Reduced points'); title('Douglas-Peucker algorithm'); 

Argumentos de entrada

contraer todo

Puntos que se van a reducir, especificados como una matriz -by-2 del formulario.n[x1 y1; ...; xn yn] Cada fila de la matriz define un vértice en una forma de ROI de polilínea, polígono o a mano alzada.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Sensibilidad del algoritmo de reducción, especificado como un escalar numérico en el rango.[0,1] Aumentar la tolerancia aumenta el número de puntos eliminados. Un valor de tolerancia de tiene una reducción mínima de puntos.0 Un valor de tolerancia de da como resultado una reducción máxima de puntos, dejando solo los puntos finales de la línea.1

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Argumentos de salida

contraer todo

Conjunto de datos reducido, devuelto como una matriz numérica -by-2.n

Tipos de datos: double

Algoritmos

El algoritmo de simplificación de línea Douglas-Peucker subdivide recursivamente una forma que busca reemplazar una tirada de puntos con una línea recta. El algoritmo comprueba que ningún punto de la ejecución se desvía de la línea recta en más del valor especificado por .tolerance

Introducido en R2019b