Red de conocimientos turísticos - Conocimientos sobre calendario chino - ¡Expertos en procesamiento de imágenes, por favor respondan! ¿Qué es la tecnología de segmentación de imágenes a la deriva? ¿Cómo funciona? ¡Gracias por tu ayuda!

¡Expertos en procesamiento de imágenes, por favor respondan! ¿Qué es la tecnología de segmentación de imágenes a la deriva? ¿Cómo funciona? ¡Gracias por tu ayuda!

Después de buscar en Internet, no pude encontrar un artículo que explique claramente el principio del cambio de media. Escribiré un párrafo:

Primero que nada, debes saber que este es un artículo de 2003 de PAMI. Es un cambio medio muy clásico: implementación de métodos robustos de análisis. Por supuesto, el texto original tiene 17 páginas y está lleno de fórmulas complejas. . . . .

El cambio medio se utiliza principalmente para el suavizado y la segmentación de imágenes (ahora no sé sobre el seguimiento, primero, introduzcamos el principio de suavizado:

La entrada es una). Espacio de 5 dimensiones, coordenadas geográficas de 2 dimensiones (x, y), coordenadas de espacio de color tridimensional (L, u, v). Por supuesto, su principio se puede reescribir en un espacio de color rgb o un espacio de características de textura. .

Primero introduzca la función del núcleo. Hay funciones del núcleo uniformes y funciones del núcleo gaussianas. No importa cuál, la idea básica es la siguiente: un algoritmo de suavizado simple utiliza un promedio de plantilla, para todos los píxeles. píxeles circundantes. Se realiza el promedio.

Este CAMBIO MEDIO se basa en la distribución de densidad de probabilidad y es un muestreo no paramétrico. El muestreo paramétrico supone que todas las muestras obedecen a una función de distribución de probabilidad con parámetros, como la distribución de Poisson, la distribución normal, etc. Todos los estudiantes de secundaria saben que hay parámetros en la fórmula de probabilidad. El espacio de características es un espacio de 5 dimensiones, que utiliza el sistema euclidiano. La distancia en el espacio es suficiente, al menos así es como se implementa en el código, y el muestreo no paramétrico en este artículo es así: hay una ventana de espacio de características tridimensional en el espacio de características (imagine una ventana de 2 dimensiones). ventana dimensional), para el espacio de características Un punto en corresponde a un vector de 5 dimensiones, y la función de densidad de este punto se puede calcular, si se parametriza, la probabilidad de la densidad de coordenadas de este punto se puede obtener directamente. La idea basada en la función de ventana es considerar sus ventanas adyacentes la contribución de los puntos, suponiendo que la densidad se moverá hacia puntos más densos, se puede calcular el movimiento de una coordenada de 5 dimensiones, que a su vez se mueve a una coordenada de 5 dimensiones. que es lo mismo que la función de ventana de una coordenada de 5 dimensiones. Supone que la densidad se moverá a un lugar más denso y calcula una coordenada de 5 dimensiones después del movimiento. La coordenada será estable después de múltiples iteraciones, el lugar estable es el modo, por lo que cada punto de píxel corresponde a dicho modo. point Los últimos valores tridimensionales son los resultados del suavizado. Por supuesto, al calcular cada punto, los cálculos pueden repetirse en algunos lugares. Aquellos que estén interesados ​​pueden consultar el código fuente para optimizarlos realmente. En resumen, el principio del movimiento suave de la media es moverse (desplazarse) a un lugar con mayor densidad en el espacio de características.

En segundo lugar, cómo utilizar la traducción media para segmentar la imagen.

El primer paso es suavizar la imagen.

El segundo paso es utilizar los resultados del suavizado. para establecer regiones La matriz de adyacencia o la lista vinculada de adyacencia de área cuenta dos píxeles que están relativamente cerca en el espacio de características y los píxeles que están relativamente cerca en el plano de la imagen bidimensional como una región. lista vinculada, registrando cada uno El valor de la etiqueta del píxel. Por supuesto, hay otro código que utiliza el cálculo de celdas convexas para fusionar dos áreas adyacentes con tensiones superficiales muy cercanas. Aún no he descubierto cómo entender esto. Espero que alguien con una comprensión más clara pueda decirme. Finalmente, hay una operación de fusionar áreas más pequeñas. ¿Una región corresponde a un valor de módulo? En el área más pequeña a fusionar, busque todas las áreas adyacentes, encuentre el área con la distancia más pequeña y fusione en esta área.

void msImageProcessor::Filter(int sigmaS, float sigmaR, SpeedUpLevel speedUpLevel) Esta es una operación de suavizado, sigmaS es una función de ventana de plano bidimensional, sigmaR es una función de ventana de espacio de color y el último parámetro indica si acelera el algoritmo.

void msImageProcessor::FuseRegions(float sigmaS, int minRegion) Esta es una función que fusiona regiones más pequeñas.

void msImageProcessor::Segment(int sigmaS, float sigmaR, int minRegion, SpeedUpLevel speedUpLevel) Esta es una función de segmentación que incluye suavizado. No entraré en detalles. . . . .

Finalmente, está la cuestión de cómo llamarlo: void CImageProcessing::mydebug()

{

int x,y;

int width_ = imageWidth;

int height_ = imageHeight;

unsigned char *tmp = nuevo unsigned char[width_ * height_ * 3];

char unsigned * dst = tmp;

for (x = 0;x < imageHeight; x ++)

for (y = 0;y < imageWidth; y++)

{

//Color tmp = (*imageData_RGB)(y, x);

//uchar * datos = &CV_IMAGE_ELEM(ip,uchar,x,y *3) ;

// *(dst++) = datos[2]

// *(dst++) = datos[1]

/ / *( dst++) = datos[0];

*(dst++) = (*imageData_RGB)(y, x).channel[0];

*(dst++) = (*imageData_RGB) (y, x).canal[1];

*(dst++) = (*imageData_RGB)(y, x).canal[2];

}

cbgImage_->.SetImageFromRGB(tmp, width_, height_, true);

eliminar []tmp;

msImageProcessor *iProc = new msImageProcessor();

iProc-> DefineImage(cbgImage_->im_, COLOR, altura_, ancho_);

iProc-> SetSpeedThreshold(0.1);

iProc->Segmento(5,8 ,10, NO_SPEEDUP);

// iProc->Filter(5,8,NO_SPEEDUP);

// iProc->FuseRegions(mWinSize,mAreaSize);//°뾶 ?×? Сò

}En cuanto a cómo depurar la compilación, supongo que no puedo decirlo. . . . . . . . . . . . . . . . . . . . . .

Materiales de referencia recomendados: /zzf378139208/blog/item/33a47c35b7ed95b9d1a2d304.html

/zzf378139208/blog/item/ee395c115019e80f203f2e85.html