<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Ex09 - Técnicas de segmentação
Step1:  Parte 1 - Segmentando múltiplos objetos por limiarização
A limiarização também pode ser feita em imagens com mais de um objeto e usando limiares múltiplos. Tente segmentar separadamente a cartela de comprimidos em uma imagem e os comprimidos em outra. Utilize o hstograma da imagem para escolher os limiares.
Step2:  Parte 2 - Demonstração da limiarização por Otsu
Tente melhorar a demonstração da limiarização por Otsu (Demo).
<ASSISTANT_TASK:>
Python Code:
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
Explanation: Ex09 - Técnicas de segmentação
End of explanation
im2 = mpimg.imread('../data/astablet.tif')
plt.imshow(im2, cmap='gray')
Explanation: Parte 1 - Segmentando múltiplos objetos por limiarização
A limiarização também pode ser feita em imagens com mais de um objeto e usando limiares múltiplos. Tente segmentar separadamente a cartela de comprimidos em uma imagem e os comprimidos em outra. Utilize o hstograma da imagem para escolher os limiares.
End of explanation
def otsu(f):
     n = np.product(np.shape(f))
     h = 1.*np.bincount(f.ravel()) / n  
     if len(h) == 1: return 1,1
     x = np.arange(np.product(np.shape(h)))
     w0 = np.cumsum(h)
     w1 = 1 - w0
     eps = 1e-10
     m0 = np.cumsum(x * h) / (w0 + eps)
     mt = m0[-1]
     m1 = (mt - m0[0:-1]*w0[0:-1]) / w1[0:-1]
     sB2 = w0[0:-1] * w1[0:-1] * ((m0[0:-1] - m1)**2)
     t = np.argmax(sB2)
     v = sB2[t]
     st2 = sum((x-mt)**2 * h)
     eta = v / st2
     return t, eta
Explanation: Parte 2 - Demonstração da limiarização por Otsu
Tente melhorar a demonstração da limiarização por Otsu (Demo).
End of explanation
<END_TASK>