导包:
from PIL import Image, ImageFilter
读取图片
cat = Image.open('../data/cat.jpg')
cat
各种滤镜效果
- 全大写的才是滤镜
# blur 模糊, contour轮廓, detail 细节增加 edge_enhance边缘强化, emboss浮雕, find_edges找到边缘, sharpen锐化, Smooth柔化
cat.filter(ImageFilter.BLUR)
导包:
from scipy import misc
from scipy import ndimage
读取小浣熊的正脸照
face = misc.face()
face
plt.figure(figsize=(10,8))
plt.imshow(face)
使用ndimage移动坐标、旋转图片、切割图片、缩放图片
# mode : {'reflect'反射, 'constant', 'nearest', 'mirror', 'wrap'}
face_shift = ndimage.shift(face, shift=(-200, -300, 0), mode='constant')
plt.figure(figsize=(10,8))
plt.imshow(face_shift)
face_rotate = ndimage.rotate(face, angle=60)
plt.figure(figsize=(10,8))
plt.imshow(face_rotate)
注意: 彩色图片一定要记得不要对颜色进行缩放.
face_zoom = ndimage.zoom(face, zoom=(0.6, 0.7, 1))
plt.figure(figsize=(10,8))
plt.imshow(face_zoom)
face_cut = face[280:490, 500:800]
plt.figure(figsize=(10,8))
plt.imshow(face_cut)
步骤:
获取一张黑白图 (gray=True)
face = misc.face(gray=True)
plt.figure(figsize=(10,8))
plt.imshow(face, cmap='gray')
查看形状,是一个二维数据
查看数据,每个值都是0~255之间的数
face
face.std()
先拷贝一份数据,并转换成浮点型
face_noise = face.copy().astype(np.float64)
每个点的数值都加一个标准正太分布: += np.random.randn(768,1024) ,因为标准正太分布范围在-3~3之间,而face.std()是54,所以要把数值加大一点,噪点才明显一点。于是再乘以标准偏差的一半:* face.std() * 0.5
face_noise += np.random.randn(768,1024) * face.std() * 0.5
显示加了噪点后的图片
plt.figure(figsize=(10,8))
plt.imshow(face_noise, cmap='gray')
sigma:高斯(合适的)标准偏差
高斯的原理是把每一个噪点圈起来,在圈的范围内取平均值,sigma越小,圈越小,sigma的值不能太大(丢失细节,模糊),也不能太小(噪点还是很大),要自己尝试取值。
使用函数ndimage.gaussian_filter()
多次尝试后发现sigma取1效果最好
face_gaussian = ndimage.gaussian_filter(face_noise, sigma=1)
plt.figure(figsize=(10,8))
plt.imshow(face_gaussian, cmap='gray')
参数size就是列表的大小
1就是它自己,5就是周围取5个值放到列表中,再取列表中位数
face_median = ndimage.median_filter(face_noise, size=5)
plt.figure(figsize=(10,8))
plt.imshow(face_median, cmap='gray')