Beispiel #1
0
def hough(im, R):
    '''
     return Hough transform of a binary image containing circles of radius R
     the axes in the Hough transform represent the a and b center coords
     of a circle given by the equation:
        
        (x - a)**2 + (y - b)**2 = R**2
        
     for each 'on' point, p0, in the binary image, the set of centers of 
     circles that could pass through p0 is represented by a circle of 
     radius R about p0.  Therefore, for each 'on' point in the image, p0, 
     I will add a circle of radius R centered at p0 to the accumulator

    '''
    circ = make_ball(R,shell=1,bgsize=(2*R+1,2*R+1)).astype(int)
    # create accumulator with shape of image since we can only vary the centers
    L,W = im.shape
    acc = np.zeros(im.shape)
    for i in range(L):
        for j in range(W):
            if im[i,j]==1:
                # if near the edges, appropriately crop the circle
                if i<R:
                    i_min = 0
                    crop_top = R - i
                    i_max = i + R
                    crop_bottom = 2 * R
                elif i>L-R:
                    i_min = i - R
                    crop_top = 0
                    i_max = L
                    crop_bottom = L - 1 - i - R
                else:
                    i_min = i - R
                    crop_top = 0
                    i_max = i + R
                    crop_bottom = 2 * R
                
                if j<R:
                    j_min = 0
                    crop_left = R - j
                    j_max = j + R
                    crop_right = 2 * R
                elif j>W-R:
                    j_min = j - R
                    crop_left = 0
                    j_max = W
                    crop_right = W - 1 - j - R
                else:
                    j_min = j - R
                    crop_left = 0
                    j_max = j + R
                    crop_right = 2 * R
                
                # add circle centered at i,j to accumulator
                acc[i_min:i_max,j_min:j_max] += circ[crop_top:crop_bottom,
                                                     crop_left:crop_right]
                                                     
    return acc
Beispiel #2
0
# Athanasios Athanassiadis Jan 2012
from segmentation import *
from ball import make_ball

fig1 = np.fromfile("figure1_problem_set_3", dtype=">i2").reshape((192, 161))
fig1 /= 1.0 * fig1.max()

# set a new starting point that is on the edge on the other side of the figure
i0, j0 = 71, 80
startpoint = np.zeros(fig1.shape)
startpoint[i0, j0] = 1
edge, chain = track_edge(fig1, (i0, j0))
ball = make_ball(5, shell=1, center=(i0, j0), bgsize=(192, 161))

# set up colors
r = fig1 * (1 - edge) * (1 - ball) * (1 - startpoint) + ball + startpoint
g = fig1 * (1 - edge) * (1 - ball) * (1 - startpoint) + startpoint
b = fig1 * (1 - ball) * (1 - startpoint)
imsave("3-2a.png", (r, g, b))