Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PIL import Image
- import numpy as np
- import matplotlib.pyplot as plt
- from skimage.filters import threshold_otsu
- import glob
- import sys
- from skimage import feature
- from skimage.transform import hough_line, hough_line_peaks, hough_circle, hough_circle_peaks
- from skimage.morphology import disk, square, closing, opening
- from skimage import measure
- from scipy import ndimage as ndi
- from copy import deepcopy
- import visualPercepUtils as vpu
- def testOtsu(im, params=None):
- nbins = 256
- th = threshold_otsu(im)
- hist = np.histogram(im.flatten(), bins=nbins, range=[0, 255])[0]
- # vpu.showInGrid([im,hist],m=2,n=1)
- # exit()
- return [th, im > th, hist] # threshold, binarized image (using such threshold), and image histogram
- def fillGaps(im, params=None):
- binIm = im > threshold_otsu(im)
- sElem = disk(params['closing-radius'])
- return [binIm, closing(binIm, sElem)]
- def removeSmallRegions(im, params=None):
- binIm = im > threshold_otsu(im)
- sElem = disk(params['opening-radius'])
- return [binIm, opening(binIm, sElem)]
- def fillGapsThenRemoveSmallRegions(im, params=None):
- out = fillGaps(im, params) # first, fill gaps
- binIm, closeIm = out[0], out[1]
- sElem = disk(params['opening-radius'])
- return [binIm, opening(closeIm, sElem)]
- def labelConnectedComponents(im, params=None):
- binIm = fillGapsThenRemoveSmallRegions(im, params)[1]
- return [binIm, measure.label(binIm, background=0)]
- def ss(im):
- plt.imshow(im, cmap="gray")
- def sc(im):
- plt.imshow(im, cmap="jet")
- im = Image.open('imgs-P5/monedas.pgm').convert('L')
- im1 = Image.open('imgs-P5/monedas1.pgm').convert('L')
- im2 = Image.open('imgs-P5/monedas2.pgm').convert('L')
- monedas = np.array(im)
- monedas1 = np.array(im1)
- monedas2 = np.array(im2)
- ss(monedas)
- labeled = labelConnectedComponents(monedas2, {'closing-radius': 2, 'opening-radius': 5})[1]
- sc(labeled)
- regions = measure.regionprops(labeled)
- r = 1
- for region in regions:
- print "Region", r
- print "\t area: ", region.area
- print "\t perimeter: ", region.perimeter
- r += 1
- edges = feature.canny(labeled, sigma=0, low_threshold=0, high_threshold=1, use_quantiles=False)
- hough_radii = np.arange(18, 26, 1)
- hough_res = hough_circle(edges, hough_radii)
- ss(feature.canny(labeled, sigma=0, low_threshold=0, high_threshold=1, use_quantiles=False))
- accums, cx, cy, radii = hough_circle_peaks(hough_res, hough_radii,total_num_peaks=4)
- for center_y, center_x, radius in zip(cy, cx, radii):
- print center_x, center_y
- print radius
Add Comment
Please, Sign In to add comment