El flujo de trabajo del procesamiento de imágenes en Matlab

1. Proceso de identificación

Flujo de trabajo de identificación de recibos

Trabajar con imágenes en MATLAB

Importe, muestre y manipule imágenes en color y escala de grises.

Segmentar una imagen

Cree imágenes binarias mediante el umbral de los valores de intensidad de píxeles.

Técnicas de preprocesamiento y posprocesamiento

Mejore la segmentación de una imagen utilizando técnicas comunes de procesamiento previo y posterior.

Clasificación y procesamiento por lotes

Desarrolle una métrica para clasificar una imagen y aplique esa métrica a un conjunto de archivos de imagen.

 二 、 Trabajar con imágenes en MATLAB

1.Obtener imágenes en MATLAB

Importación de imágenes a MATLAB

En todos los flujos de trabajo de procesamiento de imágenes de MATLAB, el primer paso es importar imágenes al espacio de trabajo de MATLAB.

Una vez allí, puede utilizar las funciones de MATLAB para mostrar, procesar y clasificar las imágenes.

Puede importar una imagen a la memoria y asignarla a una variable en el espacio de trabajo de MATLAB para su posterior manipulación, visualización y exportación.
A = imread ("imgFile.jpg");
Terminar la línea con un punto y coma evita que MATLAB muestre los valores almacenados  A, lo cual es útil ya que las imágenes generalmente contienen millones de valores. 

I = imread("IMG_001.jpg");

En esta capacitación, trabajará con una combinación de imágenes de recibo y no recibo. Los nombres de los archivos no indican si una imagen es una imagen de recibo o no, pero puede averiguarlo mostrando la imagen.
Los datos de imagen almacenados en una variable  A se pueden mostrar usando la  imshow función.

imshow(A)
imshow(I)

I2 = imread("IMG_002.jpg");
imshow(I2)

 A menudo, desea ver varias imágenes. Por ejemplo, es posible que desee comparar una imagen y una versión modificada de esa imagen.

Puede mostrar dos imágenes juntas usando la  imshowpair función.

imshowpair (A1, A2, "montaje")

La  "montage" opción coloca las imágenes  A1 y una al  A2 lado de la otra,  A1 a la izquierda y  A2 a la derecha.

imshowpair(I,I2,"montage")

Cuando haya terminado de procesar una imagen en MATLAB, puede guardarla en un archivo. La función  imwrite  exporta datos almacenados en el espacio de trabajo de MATLAB a un archivo de imagen.

imwrite (imgData, "img.jpg")

El formato del archivo de salida se identifica automáticamente según la extensión del archivo.

Intente utilizar  imwrite para exportar  I como un archivo PNG. Luego use  imread para cargar el archivo de imagen en una nueva variable y mostrarlo.

imwrite (yo, "myImage.png")

Inew = imread ("myImage.png");

imshow (nuevo)

Recuerde que puede ejecutar su secuencia de comandos haciendo clic en el botón  Ejecutar  o  Ejecutar sección  en la barra de herramientas de MATLAB.
Cuando haya terminado de practicar, puede pasar a la siguiente sección.

2.Imágenes en escala de grises y en color

Imágenes de color planes in ticket

Si bien los recibos contienen principalmente colores en escala de grises, las imágenes de recibos aún se almacenan con tres planos de color como otras imágenes en color. Como la luz del sol, que se compone de un espectro completo de colores, los planos de color se combinan para crear un papel blanco brillante.

Extraer planos de color y valores de intensidad

Muchas técnicas de procesamiento de imágenes se ven afectadas por el tamaño de la imagen. Todas las imágenes que clasificarás tienen el mismo tamaño: 600 píxeles de alto y 400 píxeles de ancho.
Puedes encontrar el tamaño de una matriz usando la  size función.

sz = tamaño (A)

El primer valor devuelto por  size es el número de filas en la matriz, que corresponde a la altura de la imagen. El segundo valor es el número de columnas en la matriz, que corresponde al ancho de la imagen. 

I = imread("IMG_003.jpg");
imshow(I)
sz = size(I)

¿El tamaño de la matriz coincide con el tamaño de la imagen en píxeles? Casi. Usted probablemente ha notado que había un valor adicional devuelto por la  size función:  3.
Esto se debe a que la imagen importada es una imagen en color, por lo que necesita una tercera dimensión para almacenar los planos de color rojo, verde y azul.
Puede acceder a los planos de color individuales de una imagen indexando en la tercera dimensión. Por ejemplo, puede extraer el plano de color verde (segundo) utilizando el valor  2 como tercer índice.

Ig  = I(:,:,2);
R = I(:,:,1);
imshow(R)

 La mayoría de las imágenes utilizan el uint8tipo de datos entero de 8 bits sin signo ( ), que almacena números enteros de 0 a 255. Las imágenes brillantes o de colores brillantes contienen valores de intensidad de píxeles cercanos a 255 en uno o más planos de color.

El plano rojo de esta imagen de recibo tiene algunas áreas bastante brillantes. ¿Crees que alcanzará el valor máximo de 255?

Puede encontrar el valor más grande en una matriz usando la  max función.

Amax = max (A, [], "all") El

uso de la  "all" opción encuentra el máximo en todos los valores de la matriz. Los corchetes son obligatorios; son marcadores de posición para una entrada no utilizada.

Rmax = max(R,[],"all")

 Las áreas oscuras, como el texto del recibo, contienen valores cercanos a cero. Según la imagen del plano rojo de la Tarea 3, ¿crees que el plano rojo tiene elementos con un valor de 0?

Puede encontrar el valor más pequeño en una matriz usando la  min función.

Amin = min(A,[],"all")
Rmin = min(R,[],"all")

Muchas tareas comunes se pueden completar más rápidamente utilizando las funciones de Image Processing Toolbox. Por ejemplo, si desea extraer los tres planos de color de una matriz de imágenes, puede utilizarlos en  imsplit lugar de indexarlos en cada plano individualmente.

[R, G, B] = dividir (A);

Puede mostrar los tres planos de color a la vez usando  montage.

montaje ({R, G, B})

Intente usar  imsplit para extraer los planos de color de  I. Visualice los tres planos de color usando  montage.

Convertir de color a escala de grises

¿Por qué convertir a escala de grises?

  1. Cuando se carga en la memoria, una imagen en escala de grises ocupa un tercio del espacio requerido para una imagen RGB.
  2. Debido a que una imagen en escala de grises tiene un tercio de los datos, requiere menos poder de cálculo para procesar y puede reducir el tiempo de cálculo.
  3. Una imagen en escala de grises es conceptualmente más simple que una imagen RGB, por lo que desarrollar un algoritmo de procesamiento de imágenes puede ser más sencillo cuando se trabaja con escala de grises.

En las imágenes de recibos, como la que se muestra a continuación, se pierde poca información al convertir a escala de grises. Se conservan las características esenciales, como el texto oscuro y el papel brillante.

Por otro lado, si quisiera clasificar el producto visible en el fondo, los planos de color serían esenciales. Después de convertir a escala de grises, es difícil ver el brócoli, y mucho menos clasificarlo.

El algoritmo que implementará en esta capacitación se basa en la identificación de texto, por lo que el color no es necesario. La conversión de las imágenes a escala de grises elimina el color y ayuda al algoritmo a enfocarse en los patrones en blanco y negro que se encuentran en los recibos.

Puede convertir una imagen a escala de grises usando la  im2gray función.

Ags = im2gray(A);
I = imread("IMG_002.jpg");
imshow(I)

gs = im2gray(I);
imshow(gs)

 ¿Notó que el color púrpura del texto del recibo se pierde durante la conversión a escala de grises? Sin embargo, dado que no todos los recibos tienen texto violeta, los valores violetas no son útiles en un algoritmo de clasificación.

Esta insignificante pérdida de información tiene una ventaja:  gs es un tercio del tamaño de  I, teniendo solo dos dimensiones en lugar de tres. Puede verificar esto con la  size función.

sz = size(gs)

La imagen en escala de grises creada por  im2gray es un solo plano de valores de intensidad. Los valores de intensidad se calculan como una suma ponderada de los planos RGB, como se describe aquí.

Si más adelante necesitará sus imágenes en escala de grises convertidas, puede guardarlas en un archivo. Intente usar  imwrite para guardar  gs en el archivo  gs.jpg.

3.Ajuste de contraste

Histogramas de contraste e intensidad

Aunque estas dos imágenes de recibos son en escala de grises, el contraste es diferente.

Si está analizando un conjunto de imágenes, normalizar el brillo puede ser un paso de preprocesamiento importante, especialmente para identificar los patrones de texto en blanco y negro en las imágenes de recibos.

Un histograma de intensidad separa los píxeles en contenedores en función de sus valores de intensidad. Las imágenes oscuras, por ejemplo, tienen muchos píxeles agrupados en el extremo inferior del histograma. Las regiones brillantes tienen píxeles agrupados en el extremo superior del histograma.

El histograma a menudo sugiere dónde se pueden realizar ajustes simples para mejorar la definición de las características de la imagen. ¿Observa algún ajuste que podría hacerse en la imagen del recibo para que el texto sea más fácil de identificar?

Una de las características de identificación esenciales de una imagen de recibo es el texto. Las imágenes de los recibos deben tener un buen contraste para que el texto se destaque del fondo del papel.
Puede investigar el contraste en una imagen viendo su histograma de intensidad usando la  imhist función.

imista (yo)

Si el histograma muestra píxeles agrupados principalmente en los extremos alto y bajo del espectro, el recibo tiene un buen contraste. De lo contrario, probablemente podría beneficiarse de un ajuste de contraste.

I = imread("IMG_001.jpg");
I2 = imread("IMG_002.jpg");
gs = im2gray(I);
gs2 = im2gray(I2);
imshowpair(gs,gs2,"montage")

imhist(gs)
gs alto contraste

 

 ¿El histograma  gs sugiere un alto contraste entre el texto y el papel del recibo, o cree que podría necesitar un ajuste?

Se gs2muestra una segunda imagen,  en el guión. ¿Parece descolorido? Si bien una inspección visual puede ser útil, a menudo es más fácil evaluar el contraste al ver el histograma.

imhist(gs2)
 relación de contraste alta gs2 relativamente baja

El histograma de intensidad de  gs2 muestra un menor contraste entre el texto y el fondo. La mayoría de los píxeles oscuros tienen valores de intensidad alrededor de 100, y no muchos píxeles brillantes tienen valores de intensidad superiores a 200. Eso significa que el contraste es aproximadamente la mitad de lo que podría ser si la imagen usara el rango de intensidad completo (0 a 255).
El aumento del contraste de la imagen ilumina los píxeles claros y aumenta los píxeles oscuros. Puede utilizar la  imadjust función para ajustar el contraste de una imagen en escala de grises automáticamente.

Aadj = imadjust (A);
gs2Adj = imadjust(gs2);
imshowpair(gs2,gs2Adj,"montage")

 

4.Trabajar con imágenes de forma interactiva

Supongo que te gusta

Origin blog.csdn.net/seek97/article/details/108672984
Recomendado
Clasificación