Scipy有ATLAS LAPACK和BLAS库构建的线性代数计算包, 可以高效的进行线性代数的计算。 线性代数包里的函数,操作对象都是二维数组。
与NumPy.linalg相比,scipy.linalg除了包含numpy.linalg中的所有函数,还具有numpy.linalg中没有的高级功能。 一方面scipy.linalg 包含 numpy.linalg 中的所有函数,同时还包含了很多 numpy.linalg 中没有的函数。 另一方面,scipy.linalg 能够保证这些函数使用 BLAS/LAPACK 加速,而 numpy.linalg 中这些加速是可选的。 因此,在使用时,我们一般使用 scipy.linalg 而不是 numpy.linalg。
print "number of items in numpy.linalg:", len(dir(numpy.linalg)) print "number of items in scipy.linalg:", len(dir(scipy.linalg))#scipy有更多模块和功能 number of items in numpy.linalg: 36 number of items in scipy.linalg: 115,接受一个矩阵作为输入,返回一个标量值,即该矩阵的行列式值。
# 导入scipy和numpy包 from scipy import linalg import numpy as np # 声明numpy数组 A = np.array([[3,4],[7,8]]) # 计算行列式 x = linalg.det(A) # 输出结果 print (x) -4.0图像滤波是一种修改/增强图像的技术。 例如,可以图像滤波突出图像的某些特性,弱化或删除图像的另一些特性。 滤波有很多种,例如:平滑、锐化、边缘增强等等。可以理解为滤镜。 高斯滤波。高斯滤波是一种模糊滤波,广泛用于滤除图像噪声。 一、图像噪声的成因 图像在生成和传输过程中常常因受到各种噪声的干扰和影响而是图像降质,这对后续图像的处理和图像视觉效应将产生不利影响。噪声种类很多,比如:电噪声,机械噪声,信道噪声和其他噪声。因此,为了抑制噪声,改善图像质量,便于更高层次的处理,必须对图像进行去噪预处理。 噪声是干扰和妨碍人类认知和理解信息的重要因素,而图像噪声则是图像中干扰和妨碍人类认识和理解图像信息的重要因素。由于噪声本身具有不可预测性,可以将它当做一种随机误差(这种误差只有通过概率统计的方法来识别)。因此,图像噪声可以视为一种多维随机过程,可以选择随机过程的概率分布函数和概率密度函数来作为对图像噪声进行描述的方法。 图像平滑的目的有两个,消除噪声和图像平滑。 高斯噪声 高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。 产生原因: 1)图像传感器在拍摄时市场不够明亮、亮度不够均匀; 2)电路各元器件自身噪声和相互影响; 3)图像传感器长期工作,温度过高。
高斯滤波是一种模糊滤波,广泛用于滤除图像噪声。
cat = mpimg.imread('./cat.png') plt.imshow(cat) plt.show()、
# 处理图片 cat = ndimage.gaussian_filter(cat, sigma=3)#sigma=3表示模糊程度为3,我们可以通过调整sigma值,来比较图像质量的变化。 # 显示图片 plt.imshow(cat) plt.show()边缘检测是一种寻找图像中物体边界的图像处理技术。 它的原理是通过检测图像中的亮度突变,来识别物体边缘。 边缘检测在图像处理、计算机视觉、机器视觉等领域中广泛应用。 常用边缘检测算法包括: Sobel Canny Prewitt Roberts Fuzzy Logic methods
生成一幅示例图片
import scipy.ndimage as nd import numpy as np im = np.zeros((256, 256)) im[64:-64, 64:-64] = 1 im[90:-90,90:-90] = 2 im = nd.gaussian_filter(im, 8) import matplotlib.pyplot as plt plt.imshow(im) # plt.savefig('./img5-1.png') # 保存要显示的图片 plt.show()图像看起来像一个正方形的色块,我们将检测这些彩色块的边缘。 这里使用ndimage的Sobel函数来检测图像边缘,该函数会对图像数组的每个轴分开操作, 产生两个矩阵,然后我们使用NumPy中的Hypot函数将这两个矩阵合并为一个矩阵,得到最后结果。
import scipy.ndimage as nd import numpy as np import matplotlib.pyplot as plt im = np.zeros((256, 256)) im[64:-64, 64:-64] = 1 im[90:-90,90:-90] = 2 im = nd.gaussian_filter(im, 8) sx = nd.sobel(im, axis = 0, mode = 'constant') sy = nd.sobel(im, axis = 1, mode = 'constant') sob = np.hypot(sx, sy) plt.imshow(sob) # plt.savefig('./img6-1.png') # 保存要显示的图片 plt.show()