{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":91249,"databundleVersionId":11294684,"sourceType":"competition"}],"dockerImageVersionId":30918,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-03-07T10:13:48.311378Z","iopub.execute_input":"2025-03-07T10:13:48.311849Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"**Algoritmo para identificar la presencia y ubicación de motores flagelares en reconstrucciones 3D de bacterias**\n\n**Requisitos previos**\n\n* Python 3.x\n* Bibliotecas: OpenCV, scikit-image, numpy, scipy\n* Reconstrucciones 3D de bacterias en formato de imagen (por ejemplo, TIFF o PNG)\n\n**Código**\n```python\nimport cv2\nimport numpy as np\nfrom skimage import filters, morphology\nfrom scipy import ndimage\n\ndef preprocesamiento(imagen):\n    # Aplicar filtros para reducir el ruido y mejorar la calidad de la imagen\n    imagen = cv2.GaussianBlur(imagen, (5, 5), 0)\n    imagen = cv2.normalize(imagen, None, 0, 255, cv2.NORM_MINMAX)\n    return imagen\n\ndef deteccion_bordes(imagen):\n    # Utilizar algoritmos de detección de bordes para identificar los bordes de la bacteria y los motores flagelares\n    bordes = cv2.Canny(imagen, 50, 150)\n    return bordes\n\ndef segmentacion(imagen):\n    # Utilizar algoritmos de segmentación para separar la bacteria en regiones de interés (ROI)\n    thresh = cv2.threshold(imagen, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]\n    kernel = np.ones((3, 3), np.uint8)\n    opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)\n    sure_bg = cv2.dilate(opening, kernel, iterations=3)\n    dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)\n    ret, sure_fg = cv2.threshold(dist_transform, 0.7 * dist_transform.max(), 255, 0)\n    sure_fg = np.uint8(sure_fg)\n    unknown = cv2.subtract(sure_bg, sure_fg)\n    return sure_fg, unknown\n\ndef analisis_caracteristicas(imagen, roi):\n    # Extraer características de los ROI identificados como motores flagelares\n    caracteristicas = []\n    for reg in roi:\n        x, y, w, h = reg\n        roi_img = imagen[y:y+h, x:x+w]\n        caracteristicas.append({\n            'forma': roi_img.shape,\n            'tamaño': roi_img.size,\n            'intensidad': np.mean(roi_img),\n            'textura': np.std(roi_img)\n        })\n    return caracteristicas\n\ndef ubicacion_motores_flagelares(imagen, caracteristicas):\n    # Utilizar la información de la segmentación y el análisis de características para determinar la ubicación de los motores flagelares\n    ubicaciones = []\n    for i, car in enumerate(caracteristicas):\n        if car['forma'][0] > 10 and car['forma'][1] > 10 and car['tamaño'] > 100:\n            ubicaciones.append((i, car['forma'][0], car['forma'][1]))\n    return ubicaciones\n\ndef main():\n    # Cargar la imagen de la bacteria\n    imagen = cv2.imread('bacteria.png', cv2.IMREAD_GRAYSCALE)\n    \n    # Preprocesamiento de la imagen\n    imagen = preprocesamiento(imagen)\n    \n    # Detección de bordes\n    bordes = deteccion_bordes(imagen)\n    \n    # Segmentación de la imagen\n    sure_fg, unknown = segmentacion(imagen)\n    \n    # Análisis de características\n    caracteristicas = analisis_caracteristicas(imagen, sure_fg)\n    \n    # Ubicación de los motores flagelares\n    ubicaciones = ubicacion_motores_flagelares(imagen, caracteristicas)\n    \n    # Mostrar los resultados\n    print('Ubicaciones de los motores flagelares:')\n    for ubicacion in ubicaciones:\n        print(f'ROI {ubicacion[0]}: ({ubicacion[1]}, {ubicacion[2]})')\n\nif __name__ == '__main__':\n    main()\n```\n#**Explicación**\n\n#El código se divide en varias funciones que realizan las siguientes tareas:\n\n#######1. `preprocesamiento`: aplica filtros para reducir el ruido y mejorar la calidad de la imagen.\n######2. `deteccion_bordes`: utiliza algoritmos de detección de bordes para identificar los bordes de la bacteria y los motores flagelares.\n#####3. `segmentacion`: utiliza algoritmos de segmentación para separar la bacteria en regiones de interés (ROI).\n####4. `analisis_caracteristicas`: extrae características de los ROI identificados como motores flagelares.\n###5. `ubicacion_motores_flagelares`: utiliza la información de la segmentación y el análisis de características para determinar la ubicación de los motores flagelares.\n##6. `main`: carga la imagen de la bacteria, aplica las funciones anteriores y muestra los resultados.\n\n#**Notas**\n\n######* El código asume que la imagen de la bacteria está en formato de escala de grises.\n#####* El código utiliza la biblioteca OpenCV para la detección de bordes y la segmentación.\n####* El código utiliza la biblioteca scikit-image para el análisis de características.\n###* El código utiliza la biblioteca numpy para la manipulación de arrays.\n##* El código utiliza la biblioteca scipy para la distancia transformada.\n#* El código es solo un ejemplo y puede requerir ajustes y mejoras para funcionar correctamente con imágenes reales.","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}