[Image processing][Soglie] Aiuto con Otsu
Inviato: venerdì 10 marzo 2017, 17:28
Ciao, sto imprecando come un dannato pechè non ho capito esattamente come si comporti l'algoritmo otsu per il calcolo delle soglie.
In teoria dovrebbe massimizzare la varianza inter-classe, ma la teroia, si sa, è diversa dalla pratica e io vorrei capire come implementarlo.
Per ora ho capito che:
1- devo calcolare l'istogramma dell'immagine (OK)
2- devo determinare una soglia da cui partire (ma non so da dove partire)
3- il buio più scuro
Qualcuno saprebbe aiutarmi?
per ora il codice che ho scritto è questo:
sottolineo che vorrei evitare di usare funzioni di libreria perchè devo capirene bene il funzionamento
In teoria dovrebbe massimizzare la varianza inter-classe, ma la teroia, si sa, è diversa dalla pratica e io vorrei capire come implementarlo.
Per ora ho capito che:
1- devo calcolare l'istogramma dell'immagine (OK)
2- devo determinare una soglia da cui partire (ma non so da dove partire)
3- il buio più scuro
Qualcuno saprebbe aiutarmi?
per ora il codice che ho scritto è questo:
Codice: Seleziona tutto
import numpy as np
hist(image,bin=255): #funzione che calcola l'istogramma
hist = np.zeros(bin)
for i in xrange(0,bin):
hist[i]=sum(img[img==i])
return hist
media_cumulativa(hst,level):
mc = 0
for i in xrange(0,level):
mc = (hst[i]*i) + mc
return mc
def OTSU(image,max=255):
def OTSU(image,max=255):
hst = hist(image,max)
num_pix_liv_1 = sum(hst[:th])
num_pix_liv_2 = sum(hst[th:])
somma_pix_liv_1 = 0
for i in xrange (0,th):
somma_pix_liv_1 = somma_pix_liv_1 + ( hst[i]*i )
somma_pix_liv_2 = 0
for i in xrange (th,max):
somma_pix_liv_2 = somma_pix_liv_2 + ( hst[i]*i )
media_pix_liv_1 = somma_pix_liv_1 / float(num_pix_liv_1)
media_pix_liv_2 = somma_pix_liv_2 / float(num_pix_liv_2)
media_globale = np.average(image)