The problem sets is here, and the answers I did is here.

smooth the image
In order not to generate a black edge at the right side of the image after smoothing, we’s better choose the method ‘symmetric’ instead of others to smooth the image.
gauss_f = fspectial('gaussian', 9, 3); img_smoothed = imfilter(img, gauss_f, 'symmetric');

find the edge
I’d like to use canny edge detector for edge finding, and we also can control the up/down threshold to generated the best looking edge we’d like.
img_edges = edge(img_smoothed, 'canny', [up, down]);

Hough lines implementation
The lines in the image is transformed to a point in hough space, meanwhile the point in image is transformed as a line in hough space.
 point > line
 line > point
for a point in the edge image, we transform the points to the corresponding lines in hough space at all possible theta.

Hough circle fitting
The circle is mapping to a circle in hough space. if we know the radius for the circle, we can get the center of the circle by plot the circles on the points with the same radius, the center would be the maximum with intersection.
If we don’t know the radius, we’d better find the circles with all the possible radius and get the maximum of intersection.

find the paralell lines
The paralell lines have the same $\theta$ or little difference, try to sort the peaks with this feature, we can get the paralell lines.