Color Threshold
A idéia deste exemplo é colorir partes de uma imagem em escala de cinza com alguma cor, objetivando destacar certa região. Uma aplicação precisa destacar regiões mais prováveis de encontrarmos água a partir de uma imagem em escala de cinza. Tomando o rio como referência, podemos usar os tons presente neste para definir os intervalos de thresholding. Assim, há maior probabilidade de encontrarmos água nas regiões pintadas:
</center>
Para fazer isso, usamos a função abaixo, que recebe uma imagem em escala de cinzas, o intervalo dos pontos de corte utilizados para segmentar quais valores da escala serão coloridos e a cor para pintar a região.
def color_threshold(im, rr, cc):
"""
Convert a range of grayscale values in a RGB color.
Parameters
----------
* im: image (numpy matrix)
* rr: range of threshold (2 elements tuple)
* cc: RGB color (3 elemnts tuple -- (R,G,B) )
Written by Pedro Garcia Freitas [sawp@sawp.com.br]
Copyright 2010 by Pedro Garcia Freitas
see: http://www.sawp.com.br
"""
inputR = im
inputG = im
inputB = im
R = cc[0]
G = cc[1]
B = cc[2]
Om = zeros((im.shape[0], im.shape[1], 3))
for i in xrange(rr[0], rr[1]):
inputR = (inputR == i).choose(inputR, R)
inputG = (inputG == i).choose(inputG, G)
inputB = (inputB == i).choose(inputB, B)
Om[:,:,0] = inputR
Om[:,:,1] = inputG
Om[:,:,2] = inputB
return Om
Utilizamos esta função da seguinte forma:
if __name__ == "__main__":
inputim = imread('river.bmp')
grayrange = (inputim.min(), inputim.min() + 20)
color = (0xFF, 0x00, 0x00)
outputim = color_threshold(inputim, grayrange, color)
imsave('colored.bmp', outputim)
Este exemplo está disponível em http://www.sawp.com.br/code/ip/pots49_color_threashold.zip