Tabla de contenido:

Proyecto BME 60B Sandbox: 6 pasos
Proyecto BME 60B Sandbox: 6 pasos

Video: Proyecto BME 60B Sandbox: 6 pasos

Video: Proyecto BME 60B Sandbox: 6 pasos
Video: UCI BME 60A: Heart Rate Monitor Project 2024, Mes de julio
Anonim
Proyecto BME 60B Sandbox
Proyecto BME 60B Sandbox

Nuestro proyecto Sandbox tiene como objetivo ayudar a los investigadores en el campo biológico a analizar muestras de células y descubrir las condiciones de sus células. Después de que el usuario ingresa una imagen de su muestra de celda, nuestro código procesa la imagen para prepararla para el conteo de celdas al convertir la imagen a escala de grises y binaria. El código utiliza umbrales para eliminar el exceso de información que no pertenece a las celdas reales con el fin de encontrar con precisión las masas de celdas. Después de contar el número de celdas en la imagen, nuestro código da el tamaño de píxel de la imagen y luego encuentra la distribución del área de celda trazando el número de celdas versus el área de celdas para darle al usuario la confluencia, que es la porcentaje de la superficie de una placa de cultivo que está cubierta por las células de interés. Basado en la confluencia, el investigador puede determinar si las células deben ser pasadas o no; el paso de células se refiere a expandir la vida o el número de células o microorganismos transfiriendo parte del cultivo a un medio de crecimiento fresco, y es útil cuando las células crecen demasiado o se quedan sin alimento. Después de ejecutar el código y procesar la imagen, el usuario puede decidir si acepta o rechaza los resultados y procede a ajustar el umbral para una mejor recuperación de los datos si es necesario.

Paso 1: seleccionar y configurar la imagen para el análisis

Seleccionar y configurar la imagen para el análisis
Seleccionar y configurar la imagen para el análisis

El primer paso en nuestro código es seleccionar la imagen adecuada y configurarla para su análisis en Matlab. Podemos seleccionar la imagen usando la función uigetfile que nos permite tomar cualquier archivo e insertarlo en el programa. Luego, usando imread, leemos la imagen y la configuramos para su análisis en Matlab. La imagen que se selecciona se muestra luego en una subtrama.

Paso 2: umbral y GUI

Umbral y GUI
Umbral y GUI
Umbral y GUI
Umbral y GUI

Al principio del código se elige una imagen usando “uigetfile” y luego definiendo esa imagen con una variable. Luego, la variable se utilizará para identificar el código cuando se ejecuten diferentes análisis. En la figura se crea una subtrama de 2x2. En la posición 1, se mostrará la imagen original. La siguiente sección del código es donde se llevan a cabo los ajustes de los umbrales. Inicialmente, se utiliza un umbral predeterminado de 0,6 y se muestra en la posición 2 de la subparcela. Luego, se usa una instrucción if para determinar si el usuario desea mantener el umbral o ajustarlo. El usuario puede ajustar el umbral utilizando una GUI que incluye la imagen en diferentes condiciones de umbral, el control deslizante y un botón de guardar. Una vez establecido el umbral, el usuario hará clic en el botón Guardar para guardar la imagen y se almacenará en los archivos MATLAB de los usuarios como-p.webp

Paso 3: Trazado de contornos y distribución celular

Trazado de contornos y distribución celular
Trazado de contornos y distribución celular
Trazado de contornos y distribución celular
Trazado de contornos y distribución celular

La siguiente parte del código traza los contornos. Hay un bucle en el que las celdas están encerradas por un perímetro rojo, y las celdas que están en la parte superior de otra celda están delineadas en verde. La imagen delineada se muestra en la posición 3 con una línea de distancia interactiva. Esta línea determinará la cantidad de píxeles en la línea ajustada por el usuario para un convertidor de píxel a milímetro. Luego, el factor de distancia se multiplica por el área determinada por los apoyos regionales y el área ahora se expresa en milímetros al cuadrado. Luego, los datos se trazan usando un histograma para ver la distribución de celdas por su área. Este histograma se mostrará en la posición 4.

Paso 4: convertir la imagen de la celda

Convertir imagen de celda
Convertir imagen de celda

En este paso, tomamos la imagen en escala de grises y la binarizamos, filtramos e invertimos. Al realizar estas funciones en la imagen, se eliminan los píxeles ruidosos que podrían confundirse con celdas y se hace que la imagen sea más suave y suave alrededor de los bordes de las celdas. Esto se hizo para extraer las células de la imagen como "manchas" distinguibles que diferían en intensidad del fondo. Las "manchas" eran imágenes blancas de alta intensidad y el fondo era negro. Si nos hubiera permitido un poco más de tiempo, habríamos utilizado una conversión de imagen de Blob diferente en lugar de la función imbinarize para ser más precisos y más adecuados a nuestras imágenes, pero necesitábamos más tiempo para investigar e implementar la función.

Paso 5: contar celdas y calcular la confluencia de celdas

Contar celdas y calcular la confluencia de celdas
Contar celdas y calcular la confluencia de celdas

En este paso del código, nuestro objetivo era contar la cantidad de celdas que estaban en la imagen. Principalmente usamos la función regionprops para calcular las áreas de las manchas y si el área se calculó para estar en nuestro límite deseado, se trazaría en una subparcela. Los límites se establecieron para eliminar pequeños píxeles ruidosos o grandes intensidades que no eran células. El contador de celdas luego contaría los centroides que luego se trazaron y los agregaría al contador en el ciclo for. Una vez que se determinaron las áreas de las células, pudimos calcular la confluencia. La principal importancia de este paso en el código fue encontrar la confluencia de las celdas y esto fue fundamental para nuestro objetivo final del código. Hicimos esto calculando sumando los píxeles (sum (allAreas)) en cada blob y luego dividiéndolo por el valor total de píxeles de la imagen (numel (img)). Esta relación nos daría la confluencia y, si se determinara que es mayor al 80%, entonces es el momento de que el investigador pase las células. Nuestro objetivo era ser lo más preciso y exacto posible, pero con el tiempo limitado, se produjo una inexactitud. Si el tiempo lo hubiera permitido, habríamos buscado formas de hacer que el recuento de manchas sea más preciso, como más técnicas de filtrado y / o una transformación de Hough, ya que aún no se han realizado suficientes investigaciones para probar esa técnica de filtrado.

Paso 6: redondez de las células

Redondez de las células
Redondez de las células
Redondez de las células
Redondez de las células

Antes de poder medir la redondez de la gota en una imagen, necesitamos convertir de RGB a escala de grises, binarizar, invertir y filtrar la imagen. Una técnica de filtrado consiste en utilizar la función bwareaopen, que filtra la imagen de interés y elimina las especificaciones o los píxeles que son demasiado pequeños y no representan el tamaño de una celda. Se crea un elemento de estructuración con la forma de un disco y una vecindad de 2 y se usa para llenar cualquier espacio en el fondo o dentro de las celdas. Luego usamos la función bwbo limits que rastrea blobs y los almacena en una matriz. Luego etiquetamos la imagen con diferentes colores para que se convierta en una imagen más clara. A continuación, utilizando un bucle for que se ejecuta de acuerdo con la cantidad de objetos y agujeros encontrados en la imagen, establece un límite alrededor de las manchas correspondientes a esta matriz. Una vez que este bucle termina, comienza otro bucle, nuevamente de acuerdo con la cantidad de objetos y agujeros encontrados en la imagen. Esta vez usamos la función regionprops que reúne ciertas propiedades como área de la matriz y almacena la información que contiene el número de objetos y huecos. Con esta información, calculamos el área y el perímetro de estos objetos usando la forma del centroide. Se establece un umbral para comparar los resultados una vez que calculamos la unidad métrica de un objeto circular y trazamos esta medida como texto junto a los centroides calculados. El código final mostrará la redondez de las diferentes celdas que se encuentran en la imagen y cualquier valor cercano al valor uno será más redondo que otros. Un valor de 1 implica que la celda es perfectamente redonda y está en buenas condiciones para ser pasada.

Recomendado: