Arquivos
Find Circular Objects in images
Olá pessoal !
Bom vamos falar hoje sobre como identificar objetos dentro de imagens ..
Fiz alguns testes para identificar objetos circulares pelo método “covariance matrix” existem outros métodos por exemplo a transformada de Hough pode ser modificado para identificar circulos!
Mas vamos aos testes
vamos iniciar por uma imagem geometrica mais simples como esta
A idéia é encontrar todos os objetos da figura para depois comparar suas propriedades !
Para isso vamos tentar encontrar todos os objetos conectados dentro de uma figura utilizado Label …
Apos isso teremos que percorrer todos os objetos e aplicar a formula covariance matrix !
Se todas as propriedades forem verdadeiras teremos um circulo na imagem …
Segue código que faz tudo isso:
#Eng Eder de Souza Find Circular Objects Example Source
from __future__ import division
from scipy.misc.pilutil import imread
from scipy import ndimage
from pymorph import add4dilate, binary, blob
from numpy import *
import pylab
import math
f = imread(‘hgjkdngm.GIF’, flatten=True)
f = binary(f, k=110)
arr=asarray(f)
l, n = ndimage.label(arr)
ObjectsAreas = blob(l, ‘area’, output=’data’)
ObjectsAreas = asarray(ObjectsAreas)
ObjectsBoundingbox = blob(l,’boundingbox’, output=’data’)
NumberOfCircles = 0
fo = ndimage.find_objects(l)
for i in range(n):
# Squares or Retangular Objects
(x1, y1, x2, y2) = ObjectsBoundingbox[i]
RegionArea = (x1 – x2) * (y1 – y2)
Area = ObjectsAreas[i]
x = array(where(arr[fo[i]] == 1))
# compute mean
m = x.mean(axis=1)
# compute covariance matrix
# http://en.wikipedia.org/wiki/Estimation_of_covariance_matrices
Sxx = (1.0/n)*sum((x[0]-m[0])*(x[0]-m[0]))
Sxy = (1.0/n)*sum((x[0]-m[0])*(x[1]-m[1]))
Syy = (1.0/n)*sum((x[1]-m[1])*(x[1]-m[1]))
if Syy > Sxx:
div = float(Syy/Sxx)
result = (div -1) * 100
else:
div = float(Sxx/Syy)
result = (div -1) * 100
#test conditions for objects circules!
if RegionArea != Area and Sxy < 5 and result < 100:
NumberOfCircles += 1
print NumberOfCircles
