[Reproducido] Algoritmo OTSU de la serie OpenCV-Python (17)

En el último tutorial, hablamos de dos métodos de binarización de imágenes, uno es el método de umbral fijo y el otro es el método de umbral adaptativo En general, el método de umbral adaptativo se debe a un umbral fijo en algunos aspectos. Método de umbral, pero aún no ha terminado, esta vez presentaremos nuestro jugador de peso pesado, es decir, el algoritmo OTSU (también conocido como algoritmo Otsu y método de varianza máxima entre clases).

El método de varianza máxima entre clases fue propuesto por el erudito japonés Otsu en 1979. Es un método de determinación de umbral adaptativo, también llamado método Otsu, o OTSU para abreviar. Es un algoritmo de binarización global, que se basa en la escala de grises de la imagen. Características del grado, la imagen se divide en dos partes: primer plano y fondo. Cuando se toma el umbral óptimo, la diferencia entre las dos partes debe ser la más grande El estándar utilizado en el algoritmo OTSU para medir la diferencia es la varianza máxima más común entre clases. Si la variación entre clases entre el primer plano y el fondo es mayor, significa que la diferencia entre las dos partes de la imagen es mayor. Cuando una parte del objetivo se clasifica por error como fondo o una parte del fondo se clasifica erróneamente como el objetivo, causará la diferencia. Disminuir, cuando la segmentación del umbral hace que la varianza entre clases sea la más grande, significa que la probabilidad de clasificación errónea es la más pequeña.

Principio OSTU

En el algoritmo de Otsu, podemos hacer una búsqueda exhaustiva de la varianza mínima del umbral de clase, definida como la varianza ponderada y dos clases:
Inserte la descripción de la imagen aquí
la ponderación es el umbral de probabilidad t dos clases separadas, y es la varianza de estas dos clases de Otsu demostró que minimizar la variación dentro de la clase y maximizar la variación entre clases es lo mismo:
Inserte la descripción de la imagen aquí

Está representado por la probabilidad de clase y la media de clase .

La probabilidad de la clase se calcula utilizando un histograma con un umbral de t:
Inserte la descripción de la imagen aquí
y la media de la clase es:
Inserte la descripción de la imagen aquí

La probabilidad de la clase y la media de la clase se pueden calcular de forma iterativa, y el algoritmo de Otsu ha obtenido un umbral en el rango de 0: 1. Este umbral se utiliza para el rango dinámico de intensidades de píxeles que aparecen en la imagen. Por ejemplo, si la imagen contiene solo intensidades de píxeles entre 155 y 255, el umbral de Otsu de 0,75 se asignará al umbral de gris de 230 (en lugar de 192, porque la imagen contiene píxeles que no están en el rango completo de 0-255).

Para la imagen I (x, y), el umbral de segmentación del primer plano (objetivo) y el fondo se denota como T, y la proporción de píxeles que pertenecen al primer plano a toda la imagen se denota como ω0, y su nivel de gris promedio es μ0; el número de píxeles de fondo ocupa todo el marco La proporción de la imagen es ω1 y su escala de grises promedio es μ1. El nivel de gris promedio total de la imagen se denota como μ, y la varianza entre clases se denota como g.

Suponiendo que el fondo de la imagen es oscuro y el tamaño de la imagen es M × N, el número de píxeles de la imagen cuyo valor de gris es menor que el umbral T se registra como N0, y el número de píxeles cuya escala de grises es mayor que el umbral T se registra como N1, entonces hay :

(1) ω0 = N0 / (M × N)

(2) ω1 = N1 / (M × N)

(3) N0 + N1 = M × N

(4) ω0 + ω1 = 1

(5) μ = ω0 * μ0 + ω1 * μ1

(6) g = ω0 * (μ0 - μ) 2 + ω1 * (μ1 - μ) 2

Sustituyendo la fórmula (5) en la fórmula (6), se obtiene la fórmula equivalente:

(7) g = ω0 * ω1 * (μ0 - μ1) 2

El método transversal se utiliza para obtener el umbral T que maximiza la varianza g entre clases.

Implementación del algoritmo OTSU

OTSU se utiliza para imágenes bimodales, y el histograma en escala de grises de la imagen que suele aplicarse para el umbral fijo es unimodal:
Inserte la descripción de la imagen aquí

Y si encuentra una imagen de este histograma, se filtrará información extremadamente importante:
Inserte la descripción de la imagen aquí

OTSU es adecuado para este tipo de imagen bimodal. Puede encontrar el umbral óptimo por sí mismo. Para mostrar el efecto de la prueba, encontramos una imagen de bimodal:
Inserte la descripción de la imagen aquí

Primero use el método de umbral fijo para experimentar:

	view plaincopy to clipboardprint?
import cv2 as cv  
import matplotlib.pyplot as plt  
  
img = cv.imread('sh.jpg',0)  
ret,threshold = cv.threshold(img,60,127,cv.THRESH_BINARY)  
cv.imshow("res",threshold)  
cv.waitKey(0)  
image.png

Inserte la descripción de la imagen aquí
Experimentemos con el método OTSU:

	view plaincopy to clipboardprint?
import cv2 as cv  
import matplotlib.pyplot as plt  
  
img = cv.imread('sh.jpg',0)  
ret,threshold = cv.threshold(img,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)  
cv.imshow("res",threshold)  
cv.waitKey(0)  

En cuanto al código, cabe señalar que cuando usamos OTSU, no necesitamos establecer el umbral. Solo necesitamos establecer un valor mínimo de 0 y un valor máximo de 255. El algoritmo encontrará automáticamente el umbral óptimo para el cálculo:
Inserte la descripción de la imagen aquí
puedes ver que el efecto sigue siendo relativamente bueno. Bueno, en resumen, las ventajas y desventajas de OTSU:

Ventajas: El algoritmo es simple y la imagen se puede segmentar de manera efectiva cuando el área del objetivo y el fondo no son muy diferentes.

Desventajas: cuando el área del objetivo y el fondo en la imagen es muy diferente, parece que el histograma no tiene picos dobles obvios, o el tamaño de los dos picos es muy diferente, el efecto de segmentación no es bueno o la escala de grises del objetivo y el fondo son relativamente diferentes Cuando hay una gran superposición, el objetivo y el fondo no se pueden separar con precisión.

Motivo: este método ignora la información espacial de la imagen y, al mismo tiempo, utiliza la distribución de grises de la imagen como base para segmentar la imagen, y también es bastante sensible al ruido.

Consulte la página de resumen del artículo https://blog.csdn.net/weixin_44237705/article/details/107864965
Se puede intercambiar más información técnica de openvino en el grupo ~
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44237705/article/details/108233646
Recomendado
Clasificación