La idea básica de la detección de objetivos basada en matlab

La idea básica de la detección de objetivos

Para obtener una imagen con un contorno claro, primero puede detectar su contorno. En este momento, también se agregará el contorno del fondo. Puede rellenar el agujero primero, luego corroer y expandir para eliminar los bordes sobrantes para encontrar el contorno del objetivo. Para imágenes con contornos poco claros o fondos complejos, puede usar la binarización de imágenes para filtrar los objetivos requeridos con un umbral específico, o dividir la imagen en bloques y luego realizar operaciones morfológicas para hacer el contorno más específico.

Problemas encontrados

ciervo

Para que se extraiga una imagen en color de un color particular es más difícil seleccionar el valor de umbral, el color objetivo de la imagen no es único, se seleccionó un color y blanco y negro, convirtiendo el espacio rgb y el espacio ycbcr, en el umbral ycbcr
FIG.
Inserte la descripción de la imagen aquí

El contorno del venado se puede identificar de forma aproximada, y luego la imagen se dilata y corroe para eliminar los pequeños dominios conectados para obtener la
corrosión del contorno , y se selecciona el dominio conectado más grande como se muestra en la figura.

Algunos lugares están corroídos.
el código se muestra a continuación:

y_min=0;y_max=256;
cb_min= 90;cb_max=150 ;
cr_min=124 ;cr_max= 180;
 
roi=roicolor(img_ycbcr(:,:,1),y_min,y_max) & roicolor(img_ycbcr(:,:,2),cb_min,cb_max) & roicolor(img_ycbcr(:,:,3),cr_min,cr_max);

personas

Después de binarizar la imagen, se encuentra que hay información de interferencia obvia en la mitad inferior de la imagen, por lo que se decide dividir la imagen en dos partes para ser procesada. Dado que no hay un objetivo para ser reconocido en la mitad inferior, la imagen original se puede mostrar en la mitad inferior. Después de que la parte superior se binarice, debido a que tiene una gran diferencia, el objetivo se puede mostrar más claramente, como se muestra en la figura
Inserte la descripción de la imagen aquí

El procesamiento de seguimiento es similar a la figura anterior y el
resultado se muestra en la figura
Inserte la descripción de la imagen aquí

Divide la imagen en dos partes:

img=imread('people.jpg');
img1=imcrop(img,[0,0,400,170]);
img2=imcrop(img,[0,171,400,304]);

Descanso de procesamiento normal

águila

Hay una gran diferencia entre el objetivo y el fondo en esta imagen, lo cual es mejor para la detección.
Al principio, puede seleccionar el umbral al binarizar y luego usar el operador astuto para extraer el borde
Inserte la descripción de la imagen aquí

Aunque hay una línea de fondo, no es un dominio conectado. Rellene el dominio conectado con imfill y luego corroerlo para eliminar esta línea
. El resultado después de la extracción del borde se muestra en la figura
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

el código se muestra a continuación:

img_bw=im2bw(img_gray,0.8);
 
img_edge=edge(img_bw,'canny');
%imshow(img_edge);
dil_filter=strel('square',2);%膨胀一下
img_edge=imdilate(img_edge,dil_filter);
 
img_edge=bwperim(img_edge);
img_full=imfill(img_edge,'holes');
 
 
ero_filter=strel('square',3);
img_full=imerode(img_full,ero_filter);
img_full=bwareaopen(img_full,50);
 
out_edge=edge(img_full,'canny');
out_edge=imdilate(out_edge,dil_filter);

flor

El color rojo de la flor en realidad puede separarse mediante r o g en rgb, pero también se puede convertir directamente en una imagen binaria para establecer un umbral de separación. Se detectarán hojas pequeñas y habrá manchas después de la corrosión. Solo necesita eliminar pequeñas El dominio conectado es suficiente. Como se muestra
Inserte la descripción de la imagen aquí

perro

Al igual que las flores, el primer paso es utilizar la segmentación de umbral para lograr mejores resultados.
Inserte la descripción de la imagen aquí

para resumir

El uso de la segmentación del método de umbral puede obtener la mayoría de los mejores resultados. Tengo entendido que este umbral es que en una imagen en escala de grises, la primera derivada de la imagen de un área con un valor de escala de grises constante es cero hasta que cambia el valor de la escala de grises. La derivada de primer orden es mayor o menor que cero, y la existencia del umbral es seleccionar un estándar para determinar cuándo la derivada de primer orden no es cero, y el valor de píxel de la imagen gris está determinado por los tres valores de RGB de la imagen en color. Generalmente Se calcula mediante la fórmula tradicional Gris = R 0.299 + G 0.587 + B * 0.114. Se puede ver que la proporción de G es la más grande y la proporción de B es la más pequeña. Entonces, en el resultado de convertir la imagen gris, si la imagen original tiene información verde o roja La información es más sensible, por lo que puede obtener mejores resultados con la segmentación de un paso al realizar la segmentación de umbral, como una imagen de una flor. Además, la diferencia de color en la imagen RGB en sí es muy grande, por lo que los valores de los tres canales RGB son todos muy diferentes y se pueden obtener mejores resultados, como una imagen de un perro. Esta imagen es más adecuada para la segmentación por umbral.
Sin una imagen tan congénita, RGB no tiene buena información de color específica del objeto, así que elijo usar el espacio de color ycbcr para la selección del umbral, donde Y representa el brillo y la densidad del color, y Cb y Cr representan respectivamente El desplazamiento de la densidad del azul y el desplazamiento de la densidad del rojo del color. Puede definir un rango para seleccionar el área deseada, de modo que el efecto de la binarización sea mucho mejor.

apéndice

Filtro h = fspecial (tipo, parámetros); los parámetros son opcionales y son
parámetros de configuración relacionados con el tipo de filtro seleccionado , como el tamaño y la desviación estándar.
type es el tipo de filtro. Los valores legales son los siguientes:

Función de valor legal
'promedio' plantilla promedio ' disco' plantilla promedio de área
circular
'gaussiana
' plantilla gaussiana 'laplaciana
' plantilla laplaciana ' registro' plantilla gauss-laplaciana
'prewitt' operador de detección de borde horizontal Prewitt
'sobel' Operador de detección de bordes horizontales Sobel

Mediana de filtrado h = medfilt2 (I1, [m, n]);
elemento de estructura función strel (forma, parámetros); forma especifica la forma del elemento de estructura. Los parámetros son los parámetros relacionados con la forma de entrada.

Valor legal Descripción de la función
'
arbitraria ' o vacía Cualquier elemento de estructura personalizada 'disco' Elemento de estructura
redonda 'cuadrado' Elemento de estructura
cuadrada 'rectángulo' Elemento de estructura rectangular
'línea' Elemento de estructura
lineal 'par' Una estructura que contiene 2 puntos El elemento 'diamante'
El elemento de estructura del
diamante 'octágono' El elemento de estructura del octágono

Expansión I2 = imdilate (I, SE) ; SE = strel (forma, parámetros);
Corrosión I2 = imerode (I, SE) ;
operación de apertura I2 = imopen (I, SE) ; eliminar objetos pequeños
operación de cierre I3 = imclose (I , SE); Rellenar pequeños agujeros, conectar objetos vecinos,
golpear y fallar transformar Ihm = bwhitmiss (I, SE1, SE2);

Procesamiento morfológico Iout = bwmorph (I, operación, n)

Valor legal descripción de la función
'puente'
une los píxeles de primer plano divididos por un espacio de un solo píxel 'limpio' píxeles de primer plano claramente aislados 'diag'
llena los píxeles de primer plano conectados en diagonal '
rellena
' llena los agujeros de un solo píxel 'rompe' elimina Conexión en forma de H en primer plano
"mayoría" Si más de la mitad de los píxeles en el área 8 del punto P son píxeles de primer plano, entonces P es el píxel de primer plano, de lo contrario, es el fondo.
'eliminar' dentro del píxel se elimina (no hay píxeles de fondo adyacentes al primer plano)
'Reducir' se encogerá a un objeto puntual o agujeros de cinturón infinitos
'skel' imagen esqueletizada
'estimular' eliminar 'fallas'
'espesar' objeto rugoso
'delgado 'Refina el objeto a la línea mínima conectada

Detección de bordes BW = borde (I, tipo, umbral, dirección, 'nada') El umbral es el parámetro de umbral de sensibilidad, no se detectará ningún borde con un valor de gris inferior a este umbral. El valor predeterminado es una matriz vacía [], en este momento el algoritmo calcula automáticamente el umbral.

Tipo valor legal gradiente operator'sobel
'Sobel operator'prewitt
' Prewitt operator'reberts
'Robert operador

Detección de bordes basada en el operador Gaussiano-Laplaciano BW = borde (I, 'log', thresh, sigma) sigma especifica la desviación estándar utilizada para generar el filtro gaussiano. De forma predeterminada, la desviación estándar es 2.
Detección de bordes basada en el operador Canny BW = borde (I, 'canny', thresh, sigma)

Supongo que te gusta

Origin blog.csdn.net/qq_36587495/article/details/108164684
Recomendado
Clasificación