发布时间:2021-08-02 00:02:21编辑:run阅读(3259)
使用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()
47745
46237
37110
34627
29229
25886
24745
19863
19417
17909
5716°
6315°
5836°
5888°
6985°
5829°
5846°
6361°
6316°
7673°