%matplotlib inline
from PIL import Image
import numpy as np
from scipy.ndimage import filters
from matplotlib import pyplot as plt
im = np.array(Image.open(u'测试图片集/1.jpg').convert('L'))
im2 = filters.gaussian_filter(im,3)
im3 = filters.gaussian_filter(im,5)
plt.subplot(1,3,1)
plt.axis('off')
plt.imshow(im,cmap='gray')
plt.title('original')
plt.subplot(1,3,2)
plt.axis('off')
plt.imshow(im2,cmap='gray')
plt.title('gaussian(kernel 3)')
plt.subplot(1,3,3)
plt.axis('off')
plt.imshow(im3,cmap='gray')
plt.title('gaussian(kernel 5)')
To blur color images, simply apply filter to each color channel
im = np.array(Image.open(u'测试图片集/1.jpg'))
im2 = np.zeros(im.shape)
im3 = np.zeros(im.shape)
for i in range(3):
im2[:,:,i] = filters.gaussian_filter(im[:,:,i],3)
im3[:,:,i] = filters.gaussian_filter(im[:,:,i],5)
im2 = np.uint8(im2)#color
im3 = np.uint8(im3)
plt.subplot(1,3,1)
plt.axis('off')
plt.imshow(im)
plt.title('original')
plt.subplot(1,3,2)
plt.axis('off')
plt.imshow(im2)
plt.title('gaussian(kernel 3)')
plt.subplot(1,3,3)
plt.axis('off')
plt.imshow(im3)
plt.title('gaussian(kernel 5)')
filters.sobel has 3 parament: input, direction, output
im = np.array(Image.open(u'测试图片集/1.jpg').convert('L'))
imx = np.zeros(im.shape)
filters.sobel(im,1,imx)
imy = np.zeros(im.shape)
filters.sobel(im,0,imy)
magnitude = np.sqrt(imx**2+imy**2)
plt.subplot(1,4,1)
plt.axis('off')
plt.imshow(im,cmap='gray')
plt.title('original')
plt.subplot(1,4,2)
plt.axis('off')
plt.imshow(imx,cmap='gray')
plt.title('x')
plt.subplot(1,4,3)
plt.axis('off')
plt.imshow(imy,cmap='gray')
plt.title('y')
plt.subplot(1,4,4)
plt.axis('off')
plt.imshow(magnitude,cmap='gray')
plt.title('x**2+y**2')
Due to background on book is white, I invert it.
plt.imshow(255.0-magnitude,cmap='gray')
for sigma in [2,5,10]: # standard deviation
im = np.array(Image.open(u'测试图片集/1.jpg').convert('L'))
imx = np.zeros(im.shape)
filters.gaussian_filter(im,(sigma,sigma),(0,1),imx)
imy = np.zeros(im.shape)
filters.gaussian_filter(im,(sigma,sigma),(1,0),imy)
magnitude = np.sqrt(imx**2+imy**2)
plt.figure()
plt.subplot(1,4,1)
plt.axis('off')
plt.imshow(im,cmap='gray')
plt.title('original')
plt.subplot(1,4,2)
plt.axis('off')
plt.imshow(imx,cmap='gray')
plt.title('x (%d)'%sigma)
plt.subplot(1,4,3)
plt.axis('off')
plt.imshow(imy,cmap='gray')
plt.title('y (%d)'%sigma)
plt.subplot(1,4,4)
plt.axis('off')
plt.imshow(magnitude,cmap='gray')
plt.title('x**2+y**2 (%d)'%sigma)
plt.show()
from scipy.ndimage import morphology,measurements
im = np.array(Image.open(u'测试图片集/1.jpg').convert('L'))
im = 1*(im<128)
labels,nbr_object = measurements.label(im)
print 'Number of object:',nbr_object
im_open = morphology.binary_opening(im,np.ones((9,5)),iterations=2)#binary open???
labels_open,nbr_object_open = measurements.label(im_open)
print 'Number of object:',nbr_object_open
im_close = morphology.binary_closing(im,np.ones((9,5)),iterations=2)
labels_close,nbr_object_close = measurements.label(im_close)
print 'Number of object:',nbr_object_close
Number of object: 459
Number of object: 15
Number of object: 41
plt.subplot(1,3,1)
plt.axis('off')
plt.imshow(labels)
plt.title('raw binary')
plt.subplot(1,3,2)
plt.axis('off')
plt.imshow(labels_open)
plt.title('binary open')
plt.subplot(1,3,3)
plt.axis('off')
plt.imshow(labels_close)
plt.title('binary close')