Days
Hours
Minutes

pip install opencv-python
imagen en gris y guardar
import cv2
img= cv2.imread("1.jpeg", 0)
cv2.namedWindow("caballo", cv2.WINDOW_NORMAL)
cv2.imshow("caballo", img)
cv2.waitKey()
cv2.destroyAllWindows()
Guardar imagen en escala de grises
import cv2
img= cv2.imread("1.jpeg", 0)
cv2.namedWindow("caballo", cv2.WINDOW_NORMAL)
cv2.imshow("caballo", img)
cv2.imwrite('1-bw.jpeg', img)
cv2.waitKey()
cv2.destroyAllWindows()
Mostrar el histograma a color y bw
import cv2
from matplotlib import pyplot as plt
img= cv2.imread("1.jpeg")
color = ('b', 'g', 'r') #para la imagen a color
hist = cv2.calcHist([img],[0],None,[256],[0,255]) #histograma bw
for i, col in enumerate(color): #para el histograma a color
print(i,col)
hist = cv2.calcHist([img],[i],None,[256],[0,255])
plt.plot(hist, color = col)
plt.xlim([0,256])
plt.hist(img.ravel(), 256, [0,255])
plt.show()
cv2.namedWindow("caballo", cv2.WINDOW_NORMAL)
cv2.imshow("caballo", img)
cv2.waitKey()
cv2.destroyAllWindows()
histograma bw y color con numpy
import numpy as np
from matplotlib import pyplot as plt
import cv2
img = cv2.imread("1.jpeg")
img2 = cv2.imread("1.jpeg",0)
hist, bins = np.histogram(img.flatten(),256,[0,255])
plt.hist(img.flatten(), 256, [0,255], color = "b")
plt.xlim([0,256])
#plt.show()
hist, bins = np.histogram(img2.flatten(),256,[0,255])
plt.hist(img2.flatten(), 256, [0,255], color = "y")
plt.xlim([0,256])
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()
Imagen bw, aplicar umbralización binaria
import cv2
img = cv2.imread("1.jpeg", 0)
## umbral establecido, imagenBinarizada = cv2.threshold(imagen, valor del umbral, valor umbral maximo y tipo de algoritmo)
_, th=cv2.threshold(img, 89, 255, cv2.THRESH_BINARY)
cv2.imshow("original", img)
cv2.imshow("Binarizacion", th)
cv2.waitKey()
cv2.destroyAllWindows()
Imagen bw, aplicar umbralización otsu
import cv2
img = cv2.imread("1.jpeg", 0)
## umbral establecido, imagenBinarizada = cv2.threshold(imagen, valor del umbral, valor umbral maximo y tipo de algoritmo)
_, th=cv2.threshold(img, 89, 255, cv2.THRESH_OTSU)
cv2.imshow("original", img)
cv2.imshow("Otsu", th)
cv2.waitKey()
cv2.destroyAllWindows()
A la imagen médica aplicar umbralización usando ADAPTATIVE_THRESH_MEAN_C, y ADAPTATIVE_THRESH_GAUSSIAN_C, con su Trackbar
import cv2
import numpy as np
# Función callback para los trackbars (no necesita hacer nada)
def nothing(x):
pass
# Cargar imagen médica en escala de grises
img = cv2.imread('1.jpeg', cv2.IMREAD_GRAYSCALE) # Cambia la ruta
# Crear ventana y trackbars
cv2.namedWindow('Umbralizacion Adaptativa')
cv2.createTrackbar('Metodo', 'Umbralizacion Adaptativa', 0, 1, nothing)
cv2.createTrackbar('Tamano Bloque', 'Umbralizacion Adaptativa', 3, 200, nothing)
cv2.createTrackbar('C', 'Umbralizacion Adaptativa', 1, 30, nothing)
while True:
# Obtener valores actuales de los trackbars
metodo = cv2.getTrackbarPos('Metodo', 'Umbralizacion Adaptativa')
block_size = cv2.getTrackbarPos('Tamano Bloque', 'Umbralizacion Adaptativa')
c = cv2.getTrackbarPos('C', 'Umbralizacion Adaptativa')
# Asegurar que el tamaño de bloque sea impar y mayor que 1
block_size = max(3, block_size)
block_size = block_size + 1 if block_size % 2 == 0 else block_size
# Aplicar umbralización adaptativa
if metodo == 0:
adaptive_method = cv2.ADAPTIVE_THRESH_MEAN_C
else:
adaptive_method = cv2.ADAPTIVE_THRESH_GAUSSIAN_C
resultado = cv2.adaptiveThreshold(img, 255, adaptive_method,
cv2.THRESH_BINARY, block_size, c)
# Mostrar resultados
cv2.imshow('Imagen Original', img)
cv2.imshow('Umbralizacion Adaptativa', resultado)
# Salir con ESC
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
Realizar un solo código de la umbralización, binaria, outsu, ADAPTATIVE_THRESH_MEAN_C, y ADAPTATIVE_THRESH_GAUSSIAN_C, con su Trackbar
import cv2
import numpy as np
def nothing(x):
pass
# Cargar imagen médica en escala de grises
img = cv2.imread('1.jpeg', cv2.IMREAD_GRAYSCALE) # Cambia la ruta
# Crear ventana principal
cv2.namedWindow('Umbralizacion')
cv2.resizeWindow('Umbralizacion', 800, 600)
# Crear trackbars
cv2.createTrackbar('Metodo', 'Umbralizacion', 0, 3, nothing)
cv2.createTrackbar('Umbral/Block Size', 'Umbralizacion', 127, 255, nothing)
cv2.createTrackbar('C', 'Umbralizacion', 2, 30, nothing)
# Textos para los métodos
metodos = {
0: 'BINARIA MANUAL',
1: 'OTSU AUTOMATICO',
2: 'ADAPTATIVA (MEAN)',
3: 'ADAPTATIVA (GAUSSIAN)'
}
while True:
# Obtener valores actuales
metodo = cv2.getTrackbarPos('Metodo', 'Umbralizacion')
param1 = cv2.getTrackbarPos('Umbral/Block Size', 'Umbralizacion')
c = cv2.getTrackbarPos('C', 'Umbralizacion')
# Procesamiento según método
if metodo == 0: # Binaria manual
_, resultado = cv2.threshold(img, param1, 255, cv2.THRESH_BINARY)
texto = f"Umbral manual: {param1}"
elif metodo == 1: # Otsu
thresh, resultado = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
texto = f"Otsu - Umbral autocalculado: {thresh:.1f}"
else: # Adaptativas
block_size = max(3, param1)
block_size = block_size + 1 if block_size % 2 == 0 else block_size
if metodo == 2: # Mean
resultado = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, block_size, c)
else: # Gaussian
resultado = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, block_size, c)
texto = f"Block: {block_size} | C: {c}"
# Añadir información visual
cv2.putText(resultado, metodos[metodo], (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 1)
cv2.putText(resultado, texto, (10, 60),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 1)
# Mostrar resultados
cv2.imshow('Original', img)
cv2.imshow('Umbralizacion', resultado)
# Salir con ESC
if cv2.waitKey(1) & 0xFF == 27:
break
cv2.destroyAllWindows()
Otra versión pero con 4 ventanas
import cv2
import numpy as np
def nothing(x):
pass
# Cargar imagen médica
img = cv2.imread('1.jpeg', cv2.IMREAD_GRAYSCALE) # Cambiar por tu ruta
# Crear ventana de control
cv2.namedWindow('Controles')
cv2.resizeWindow('Controles', 400, 150)
# Trackbars comunes
cv2.createTrackbar('Umbral/Block', 'Controles', 127, 255, nothing)
cv2.createTrackbar('C', 'Controles', 2, 30, nothing)
# Diccionario de métodos
metodos = {
'BINARIA': cv2.THRESH_BINARY,
'OTSU': cv2.THRESH_OTSU,
'ADAPT-MEAN': cv2.ADAPTIVE_THRESH_MEAN_C,
'ADAPT-GAUSS': cv2.ADAPTIVE_THRESH_GAUSSIAN_C
}
while True:
# Leer parámetros actuales
param1 = cv2.getTrackbarPos('Umbral/Block', 'Controles')
c = cv2.getTrackbarPos('C', 'Controles')
# Asegurar tamaño de bloque impar para adaptativas
block_size = max(3, param1)
block_size = block_size + 1 if block_size % 2 == 0 else block_size
# Procesar con los 4 métodos
resultados = {}
# 1. Binarización manual
_, thresh_bin = cv2.threshold(img, param1, 255, cv2.THRESH_BINARY)
resultados['BINARIA'] = thresh_bin
# 2. Otsu
thresh_otsu, thresh_otsu_img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
resultados['OTSU'] = thresh_otsu_img
# 3. Adaptativa Mean
adapt_mean = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, block_size, c)
resultados['ADAPT-MEAN'] = adapt_mean
# 4. Adaptativa Gauss
adapt_gauss = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, block_size, c)
resultados['ADAPT-GAUSS'] = adapt_gauss
# Mostrar todas las ventanas con texto informativo
for metodo, resultado in resultados.items():
# Añadir información de parámetros
texto = f"{metodo} | "
if metodo == 'BINARIA':
texto += f"Umbral: {param1}"
elif metodo == 'OTSU':
texto += f"Auto: {thresh_otsu:.1f}"
else:
texto += f"Block: {block_size} | C: {c}"
display = cv2.putText(resultado.copy(), texto, (10,30),
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255,255,255), 1)
cv2.imshow(metodo, display)
# Salir con ESC
if cv2.waitKey(1) & 0xFF == 27:
break
# Destruir todas las ventanas
cv2.destroyAllWindows()
Lorem ipsum dolor sitope amet, consectetur adipisicing elitip. Massumenda, dolore!

Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit.Aenean commodo ligula.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet, consectetuer adipiscing.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
El Procesamiento Digital de Imágenes es una rama de la visión artificial que emplea técnicas algorítmicas para manipular imágenes digitales mediante operaciones en el dominio espacial (píxeles) o frecuencial (transformaciones espectrales). Incluye métodos como filtrado, segmentación, realce de contraste y extracción de características, con el objetivo de mejorar la calidad visual, reducir ruido o facilitar el análisis automatizado.
Píxel: Unidad mínima de información, con valores de tono, saturación y brillo.
Resolución: Dimensiones espaciales (M×N píxeles) y de intensidad (niveles de gris: L=2k).
Espacios de color: Modelos como RGB (rojo, verde, azul), HSV (tono, saturación, valor) y CMYK (cian, magenta, amarillo, negro).
Ejes de coordenadas: Sistema de referencia para ubicar píxeles, comúnmente con origen en la esquina superior izquierda.
Es la aplicación de técnicas computacionales para analizar imágenes adquiridas mediante modalidades como RMN, TAC o ultrasonido. Incluye procesos como segmentación de tejidos, corrección de artefactos, mejora de contraste y cuantificación de parámetros clínicos, con fines de diagnóstico, planificación quirúrgica o investigación biomédica.
| Aspecto | Muestreo | Cuantificación |
|---|---|---|
| Definición | Discretización de coordenadas (x, y). | Discretización de niveles de intensidad. |
| Representación | Matriz de píxeles (M×N). | Valores enteros en rango [0, L-1]. |
| Ejemplo | Imagen digital de 512×512 píxeles. | 8 bits por píxel (256 niveles de gris). |
NumPy: Manejo eficiente de arrays multidimensionales para operaciones matemáticas (ej: manipulación de matrices de imágenes).
Matplotlib: Visualización de datos e imágenes (ej: graficar histogramas o mostrar resultados de filtrado).
OpenCV: Implementación de algoritmos de visión artificial (ej: detección de bordes, umbralización, segmentación).
Gráfico que representa la distribución de frecuencias de los niveles de intensidad (rk) en una imagen. Matemáticamente, se define como h(rk)=nk, donde nk es el número de píxeles con intensidad rk. Su normalización (P(rk)=nnk) permite analizar propiedades estadísticas como media, desviación estándar y bimodalidad, cruciales para evaluar contraste y detectar anomalías.
Conjunto de técnicas aplicadas antes del análisis principal para optimizar la imagen. Incluye:
Reducción de ruido (filtrado Gaussiano o mediana).
Corrección de iluminación (ecualización del histograma).
Realce de contraste (transformaciones de intensidad).
Normalización (ajuste de rango dinámico).
| Dominio Espacial | Dominio Frecuencial |
|---|---|
| Opera directamente sobre píxeles. | Usa transformadas (ej: Fourier). |
| Técnicas: filtros de suavizado, umbralización. | Técnicas: análisis de frecuencias, filtrado pasa-banda. |
| Ejemplo: convolución con kernels. | Ejemplo: eliminación de ruido periódico. |
Información indeseada que degrada la calidad, originada durante la adquisición (ej: interferencias en RMN), transmisión (errores de compresión) o procesamiento (artefactos). Tipos comunes:
Gaussiano: Distribución normal (típico en sensores).
Sal y pimienta: Píxeles blancos/negros aleatorios (fallos en transmisión).
Speckle: Granulado en ultrasonidos.
Método de segmentación que convierte una imagen en escala de grises a binaria (blanco/negro) aplicando un umbral (T). Clasifica píxeles como:
Usado para aislar estructuras anatómicas en imágenes médicas.
| Variable | Umbralización Simple | Otsu | Adaptativa |
|---|---|---|---|
| Base de cálculo | Umbral global definido por el usuario. | Análisis bimodal del histograma. | Umbral local basado en vecindad. |
| Precisión en bordes | Baja (no considera variaciones locales). | Media (depende de bimodalidad). | Alta (ajuste local). |
| Manejo de ruido | Sensible a ruido. | Requiere preprocesado para ruido. | Robustez media/alta según método. |
| Uso en imágenes médicas | Imágenes con iluminación uniforme. | Imágenes bimodales (ej: TAC). | Imágenes con iluminación no uniforme. |
| Aplicaciones médicas | Detección de fracturas en radiografías. | Segmentación de tumores. | Ecografías o imágenes con sombras. |
| Limitaciones | No adaptable a variaciones locales. | Ineficaz en histogramas multimodales. | Costo computacional (Gaussian_C). |
Fuentes: Contenido de los archivos "01 Unidad 1 - PARTE 1.pdf", "01 Unidad 1 - PARTE 2.pdf", y "02 Unidad 2.pdf".
Consectetuer adipiscing elit leget odiogil voluptatum similique.
Adipisci reiciendis accusantium voluptatibus id voluptate tempore dolor harum nisi amet!

Lorem ipsum dolor sitope amet, consectetur adipisicing elitip.
Lorem ipsum dolor sitope amet, consectetur adipisicing elitip. Massumenda, dolore!