发布时间:2021-08-02 00:02:21编辑:run阅读(4178)
使用scikit-image,matplotlib进行图片处理,PIL提供了许多图像处理的函数,使用点变换来更改像素值对图像实现几何变换
scikit-image模块安装
pip install scikit-image
pip install scikit-learn
pip install simpleITK
scikit-image使用warp()函数进行反向扭曲和几何转换,在图像上应用仿射变换,可以使用SimilarityTransform()函数来计算变换矩阵,然后使用warp()函数来执行变换
from skimage.io import imread
from skimage.transform import SimilarityTransform, warp
import numpy as np
import matplotlib.pylab as plt
im = imread(r'D:\image_processing\jpgs\ss.jpg')
tform = SimilarityTransform(scale=0.9, rotation=np.pi/4, translation=(im.shape[0]/2, -30))
warped = warp(im, tform)
plt.subplot(221), plt.imshow(im), plt.title('原图', size=15),plt.axis('off')
plt.subplot(222), plt.imshow(warped), plt.title('矩阵变换图', size=15),plt.axis('off')
plt.show()
scikit-image应用旋流变换,这是scikit-image文档中定义的非线性变换,使用swirl()函数来实现变换,其中strength是函数的旋流量参数,radius以像素表示旋流程度,rotation用来添加旋转角度
from skimage.io import imread
from skimage.transform import SimilarityTransform, warp, swirl
import matplotlib.pylab as plt
# 指定默认字体
plt.rcParams['font.sans-serif'] = ['KaiTi']
# 解决保存图像是负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
im = imread(r'D:\image_processing\jpgs\ss.jpg')
swirled = swirl(im, rotation=45, strength=10, radius=150)
plt.subplot(221), plt.imshow(im), plt.title('原图', size=15),plt.axis('off')
plt.subplot(222), plt.imshow(swirled), plt.title('旋流变换图', size=15),plt.axis('off')
plt.show()
scikit-image在图像中添加随机高斯噪声,可以使用random_noise()函数向图像添加不同类型的噪声.
from skimage.io import imread
from skimage import color, viewer, exposure, img_as_float
from skimage.util import invert, random_noise
import matplotlib.pylab as plt
# 指定默认字体
plt.rcParams['font.sans-serif'] = ['KaiTi']
# 解决保存图像是负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
im = img_as_float(imread(r'D:\image_processing\jpgs\ss.jpg'))
plt.figure(figsize=(15,12))
sigmas = [0.1, 0.25, 0.5, 1]
for i in range(4):
noisy = random_noise(im, var=sigmas[i]**2)
plt.subplot(2, 2, i+1)
plt.imshow(noisy)
plt.axis('off')
plt.title('sigma=' + str(sigmas[1]) + '高斯噪声', size=20)
plt.tight_layout()
plt.show()
使用matplotlib进行图像操作,使用pylab模块进行图像操作,为图像绘制轮廓线,图像的轮廓线是一条连接所有像素的曲线,这些像素具有相同的特定值
from skimage.io import imread
from skimage import color
import numpy as np
import matplotlib.pylab as plt
# 指定默认字体
plt.rcParams['font.sans-serif'] = ['KaiTi']
# 解决保存图像是负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
im = color.rgb2gray(imread(r'D:\image_processing\jpgs\b.jpg'))
plt.figure(figsize=(20,8))
plt.subplot(131), plt.imshow(im, cmap='gray'), plt.title('原始图像', size=20)
plt.subplot(132), plt.contour(np.flipud(im), colors='k', levels=np.logspace(-15, 15, 100))
plt.title('图像轮廓线', size=20)
plt.subplot(133), plt.contourf(np.flipud(im), cmap='inferno')
plt.title('图像填充轮廓', size=20)
plt.show()
51225
50650
41264
38077
32544
29448
28309
23169
23130
21463
1527°
2238°
1864°
1802°
2100°
1853°
2536°
4258°
4112°
2935°