第5章 Python 数字图像处理(DIP) - 图像复原与重建9 - 空间滤波 - 均值滤波器 - 算术平均、几何平均、谐波平均、反谐波平均滤波器

标题

    • 只存在噪声的复原 - 空间滤波
      • 均值滤波器
        • 算术平均滤波器
        • 几何均值滤波器
        • 谐波平均滤波器
        • 反(逆)谐波平均滤波器

只存在噪声的复原 - 空间滤波

仅被加性噪声退化
g(x,y)=f(x,y)+η(x,y)(5.21)g(x, y) = f(x, y) + \eta(x, y) \tag{5.21}g(x,y)=f(x,y)+η(x,y)(5.21)

G(u,v)=F(u,v)+N(u,v)(5.22)G(u, v) = F(u, v) + N(u, v) \tag{5.22}G(u,v)=F(u,v)+N(u,v)(5.22)

噪声项通常是未知的,因此不能直接从退化图像中减去噪声项来得到复原的图像。

对于周期噪声,只是个例外而不是规律,我们可以用谱G(u,v)G(u, v)G(u,v)来估计N(u,v)N(u, v)N(u,v),从G(u,v)G(u, v)G(u,v)中减去N(u,v)N(u, v)N(u,v)能够得到原图像的一个估计。

均值滤波器

算术平均滤波器

算术平均滤波器是最简单的均值滤波器。
f^(x,y)=1mn∑(r,c)∈Sxyg(r,c)(5.23)\hat{f}(x, y) = \frac{1}{mn} \sum_{(r,c)\in S_{xy}} g(r,c) \tag{5.23}f^(x,y)=mn1(r,c)Sxyg(r,c)(5.23)

SxyS_{xy}Sxy表示中心为(x,y)(x, y)(x,y)、大小为m×nm\times{n}m×n的矩形子图像窗口(邻域)的一组坐标。算术平均滤波器在由SxyS_{xy}Sxy定义的区域中,计算被污染图像g(x,y)g(x, y)g(x,y)的平均值。复原的图像f^\hat{f}f^(x,y)(x, y)(x,y)处的值,是使用SxyS_{xy}Sxy定义的邻域中的像素算出的算术平均值。

均值滤波平滑图像中的局部变化,它会降低图像中的噪声,但会模糊图像

def arithmentic_mean(image, kernel):"""define arithmentic mean filter, math: $$\hat{f}(x, y) = \frac{1}{mn} \sum_{(r,c)\in S_{xy}} g(r,c)$$param image: input imageparam kerne: input kernel, actually use kernel shapereturn: image after arithmentic mean filter, """img_h = image.shape[0]img_w = image.shape[1]m, n = kernel.shape[:2]padding_h = int((m -1)/2)padding_w = int((n -1)/2)# 这样的填充方式,可以奇数核或者偶数核都能正确填充image_pad = np.pad(image, ((padding_h, m - 1 - padding_h), \(padding_w, n - 1 - padding_w)), mode="edge")image_mean = image.copy()for i in range(padding_h, img_h + padding_h):for j in range(padding_w, img_w + padding_w):temp = np.sum(image_pad[i-padding_h:i+padding_h+1, j-padding_w:j+padding_w+1])image_mean[i - padding_h][j - padding_w] = 1/(m * n) * tempreturn image_mean
# 算术平均滤波器
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0507(b)(ckt-board-gauss-var-400).tif', 0) #直接读为灰度图像mean_kernal = np.ones([3, 3])
mean_kernal = mean_kernal / mean_kernal.sizeimg_arithmentic = arithmentic_mean(img_ori, kernel=mean_kernal)img_cv2_mean = cv2.filter2D(img_ori, ddepth= -1, kernel=mean_kernal)plt.figure(figsize=(18, 6))
plt.subplot(131), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(img_arithmentic, 'gray'), plt.title('Self Mean'), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(img_cv2_mean, 'gray'), plt.title('CV2 mean'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

几何均值滤波器

f^(x,y)=[∏(r,c)∈Sxyg(r,c)]1mn(5.24)\hat{f}(x, y) = \Bigg[\prod_{(r,c)\in S_{xy}} g(r,c) \Bigg]^{\frac{1}{mn}} \tag{5.24}f^(x,y)=[(r,c)Sxyg(r,c)]mn1(5.24)

几何均值滤波器实现的平滑可与算术平均滤波器的相比,但损失的图像细节更少

def geometric_mean(image, kernel):"""define geometric mean filter, math: $$\hat{f}(x, y) = \Bigg[\prod_{(r,c)\in S_{xy}} g(r,c) \Bigg]^{\frac{1}{mn}}$$param image:  input imageparam kerne:  input kernel, actually use kernel shapereturn: image after geometric mean filter, """img_h = image.shape[0]img_w = image.shape[1]m, n = kernel.shape[:2]order = 1 / (kernel.size)padding_h = int((m -1)/2)padding_w = int((n -1)/2)# 这样的填充方式,可以奇数核或者偶数核都能正确填充image_pad = np.pad(image.copy(), ((padding_h, m - 1 - padding_h), \(padding_w, n - 1 - padding_w)), mode="edge")image_mean = image.copy()# 这里要指定数据类型,但指定是uint64或者float64,但结果不正确,反而乘以1.0,也是float64,但却让结果正确for i in range(padding_h, img_h + padding_h):for j in range(padding_w, img_w + padding_w):prod = np.prod(image_pad[i-padding_h:i+padding_h+1, j-padding_w:j+padding_w+1]*1.0)image_mean[i - padding_h][j - padding_w] = np.power(prod, order)return image_mean
def geometric_mean(image, kernel):""":param image: input image:param kernel: input kernel:return: image after convolution"""img_h = image.shape[0]img_w = image.shape[1]kernel_h = kernel.shape[0]kernel_w = kernel.shape[1]# paddingpadding_h = int((kernel_h -1)/2)padding_w = int((kernel_w -1)/2)image_pad = np.pad(image.copy(), (padding_h, padding_w), mode="constant", constant_values=1)image_convol = image.copy()for i in range(padding_h, img_h + padding_h):for j in range(padding_w, img_w + padding_w):temp = np.prod(image_pad[i-padding_h:i+padding_h+1, j-padding_w:j+padding_w+1] * kernel)image_convol[i - padding_h][j - padding_w] = np.power(temp, 1/kernel.size)return image_convol
# 几何均值滤波器
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0507(b)(ckt-board-gauss-var-400).tif', 0) #直接读为灰度图像mean_kernal = np.ones([3, 3])
arithmetic_kernel = mean_kernal / mean_kernal.sizeimg_geometric = geometric_mean(img_ori, kernel=mean_kernal)img_arithmentic = arithmentic_mean(img_ori, kernel=arithmetic_kernel)plt.figure(figsize=(18, 6))
plt.subplot(131), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(img_geometric, 'gray'), plt.title('Geomentric Mean'), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(img_arithmentic, 'gray'), plt.title('Arithmetic mean'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
# plt.show()

在这里插入图片描述

谐波平均滤波器

f^(x,y)=mn∑(r,c)∈Sxy1g(r,c)(5.25)\hat{f}(x, y) = \cfrac{mn}{\sum_{(r,c)\in S_{xy}} \cfrac{1}{g(r,c)}} \tag{5.25}f^(x,y)=(r,c)Sxyg(r,c)1mn(5.25)

可以处理盐粒噪声,又能处理类似于高斯噪声的其他噪声,但不能处理胡椒噪声

def harmonic_mean(image, kernel):"""define harmonic mean filter, math: $$\hat{f}(x, y) = \Bigg[\prod_{(r,c)\in S_{xy}} g(r,c) \Bigg]^{\frac{1}{mn}}$$param image:  input imageparam kerne:  input kernel, actually use kernel shapereturn: image after harmonic mean filter, """epsilon = 1e-8img_h = image.shape[0]img_w = image.shape[1]m, n = kernel.shape[:2]order = kernel.sizepadding_h = int((m -1)/2)padding_w = int((n -1)/2)# 这样的填充方式,可以奇数核或者偶数核都能正确填充image_pad = np.pad(image.copy(), ((padding_h, m - 1 - padding_h), \(padding_w, n - 1 - padding_w)), mode="edge")image_mean = image.copy()# 这里要指定数据类型,但指定是uint64或者float64,但结果不正确,反而乘以1.0,也是float64,但却让结果正确# 要加上epsilon,防止除0for i in range(padding_h, img_h + padding_h):for j in range(padding_w, img_w + padding_w):temp = np.sum(1 / (image_pad[i-padding_h:i+padding_h+1, j-padding_w:j+padding_w+1]*1.0 + epsilon))image_mean[i - padding_h][j - padding_w] = order / tempreturn image_mean
# 谐波滤波处理高斯噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0507(b)(ckt-board-gauss-var-400).tif', 0) #直接读为灰度图像mean_kernal = np.ones([3, 3])
arithmetic_kernel = mean_kernal / mean_kernal.sizeimg_geometric = geometric_mean(img_ori, kernel=mean_kernal)img_harmonic_mean = harmonic_mean(img_ori, kernel=mean_kernal)plt.figure(figsize=(18, 6))
plt.subplot(131), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(img_geometric, 'gray'), plt.title('Geomentric Mean'), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(img_harmonic_mean, 'gray'), plt.title('Harmonic mean'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 谐波滤波处理盐粒噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0508(b)(circuit-board-salt-prob-pt1).tif', 0) #直接读为灰度图像mean_kernal = np.ones([3, 3])
arithmetic_kernel = mean_kernal / mean_kernal.sizeimg_geometric = geometric_mean(img_ori, kernel=mean_kernal)img_harmonic_mean = harmonic_mean(img_ori, kernel=mean_kernal)plt.figure(figsize=(18, 6))
plt.subplot(131), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(img_geometric, 'gray'), plt.title('Geomentric Mean'), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(img_harmonic_mean, 'gray'), plt.title('Harmonic mean'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 谐波滤波处理胡椒噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0508(a)(circuit-board-pepper-prob-pt1).tif', 0) #直接读为灰度图像mean_kernal = np.ones([3, 3])
arithmetic_kernel = mean_kernal / mean_kernal.sizeimg_geometric = geometric_mean(img_ori, kernel=mean_kernal)img_harmonic_mean = harmonic_mean(img_ori, kernel=mean_kernal)plt.figure(figsize=(18, 6))
plt.subplot(131), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(img_geometric, 'gray'), plt.title('Geomentric Mean'), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(img_harmonic_mean, 'gray'), plt.title('Harmonic mean'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

反(逆)谐波平均滤波器

f^(x,y)=∑(r,c)∈Sxyg(r,c)Q+1∑(r,c)∈Sxyg(r,c)Q(5.26)\hat{f}(x, y) = \frac{\sum_{(r,c)\in S_{xy}} g(r,c)^{Q+1}}{\sum_{(r,c)\in S_{xy}} g(r,c)^Q} \tag{5.26}f^(x,y)=(r,c)Sxyg(r,c)Q(r,c)Sxyg(r,c)Q+1(5.26)

Q称为滤波器的阶数。这种滤波器适用于降低或消除椒盐噪声。Q值为正时,该滤波器消除胡椒噪声;Q值为负时,该滤波器消除盐粒噪声。然而,该滤波器不能同时消除这两种噪声。注意当Q=0Q=0Q=0时,简化为算术平均滤波器;当Q=−1Q=-1Q=1时,简化为谐波平均滤波器。

def inverse_harmonic_mean(image, kernel, Q=0):"""define inverse harmonic mean filter, math: $$\hat{f}(x, y) = \frac{\sum_{(r,c)\in S_{xy}} g(r,c)^{Q+1}}{\sum_{(r,c)\in S_{xy}} g(r,c)^Q}$$param image : input imageparam kernel: input kernel, actually use kernel shapeparam Q     : input order of the filter, default is 0, which equal to arithmentic mean filter, while is -1 is harmonic mean filterreturn: image after inverse harmonic mean filter, """epsilon = 1e-8img_h = image.shape[0]img_w = image.shape[1]m, n = kernel.shape[:2]padding_h = int((m -1)/2)padding_w = int((n -1)/2)# 这样的填充方式,可以奇数核或者偶数核都能正确填充image_pad = np.pad(image.copy(), ((padding_h, m - 1 - padding_h), \(padding_w, n - 1 - padding_w)), mode="edge")image_mean = image.copy()# 这里要指定数据类型,但指定是uint64或者float64,但结果不正确,反而乘以1.0,也是float64,但却让结果正确# 要加上epsilon,防止除0for i in range(padding_h, img_h + padding_h):for j in range(padding_w, img_w + padding_w):temp = image_pad[i-padding_h:i+padding_h+1, j-padding_w:j+padding_w+1] * 1.0 + epsilon# image_mean[i - padding_h][j - padding_w] = np.sum(temp**(Q+1)) / np.sum(temp**Q + epsilon)image_mean[i - padding_h][j - padding_w] = np.sum(np.power(temp, (Q+1))) / np.sum(np.power(temp, Q) + epsilon)return image_mean
# 反谐波滤波处理胡椒噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0508(a)(circuit-board-pepper-prob-pt1).tif', 0) #直接读为灰度图像mean_kernel = np.ones([3, 3])
arithmetic_kernel = mean_kernel / mean_kernel.sizeimg_inverse_harmonic = inverse_harmonic_mean(img_ori, kernel=mean_kernel, Q=1.5)img_harmonic_mean = harmonic_mean(img_ori, kernel=mean_kernel)plt.figure(figsize=(18, 6))
plt.subplot(131), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(img_inverse_harmonic, 'gray'), plt.title('Inverse Harmonic Mean'), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(img_harmonic_mean, 'gray'), plt.title('Harmonic mean'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 反谐波滤波处理椒盐噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0510(a)(ckt-board-saltpep-prob.pt05).tif', 0) #直接读为灰度图像mean_kernel = np.ones([3, 3])
arithmetic_kernel = mean_kernel / mean_kernel.sizeimg_inverse_harmonic = inverse_harmonic_mean(img_ori, kernel=mean_kernel, Q=1.5)
img_arithmentic_mean = inverse_harmonic_mean(img_ori, kernel=mean_kernel, Q=0)
# img_arithmentic_mean = arithmentic_mean(img_ori, kernel=mean_kernel)plt.figure(figsize=(18, 6))
plt.subplot(131), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(img_inverse_harmonic, 'gray'), plt.title('Inverse Harmonic Mean'), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(img_arithmentic_mean, 'gray'), plt.title('Arithmentic mean'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

下面是各种滤波器的对比与总结

# 算术平均滤波器和几何均值滤波器对比
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0507(a)(ckt-board-orig).tif', 0) #直接读为灰度图像
img_noise = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0507(b)(ckt-board-gauss-var-400).tif', 0) #直接读为灰度图像mean_kernel = np.ones([3, 3])
arithmetic_kernel = mean_kernel / mean_kernel.sizeimg_arithmentic = arithmentic_mean(img_noise, kernel=mean_kernel)
img_geometric   = geometric_mean(img_noise, kernel=mean_kernel)plt.figure(figsize=(12, 12))
plt.subplot(221), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(img_noise, 'gray'), plt.title('Noisy'), plt.xticks([]), plt.yticks([])
plt.subplot(223), plt.imshow(img_arithmentic, 'gray'), plt.title('Arithmentic mean'), plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(img_geometric, 'gray'), plt.title('Geomentric mean'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

反谐波滤波器可以处理胡椒与盐粒噪声。在处理胡椒噪声的时候,Q值一般为正值;在处理盐粒噪声时,Q值一般为负值。错误的选择Q值,不仅不能得到好的滤波效果,反而带来灾难性的结果。

# 反谐波滤波器分别使用不同的Q值对胡椒与盐粒噪声的滤波器
img_pepper = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0508(a)(circuit-board-pepper-prob-pt1).tif', 0) 
img_salt = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0508(b)(circuit-board-salt-prob-pt1).tif', 0)mean_kernel = np.ones([3, 3])
arithmetic_kernel = mean_kernel / mean_kernel.sizeinverse_harmonic_15 = inverse_harmonic_mean(img_pepper, kernel=mean_kernel, Q=1.5)
inverse_harmonic_15_ = inverse_harmonic_mean(img_salt, kernel=mean_kernel, Q=-1.5)plt.figure(figsize=(12, 12))
plt.subplot(221), plt.imshow(img_pepper, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(img_salt, 'gray'), plt.title('Noisy'), plt.xticks([]), plt.yticks([])
plt.subplot(223), plt.imshow(inverse_harmonic_15, 'gray'), plt.title('Pepper Noise Q = 1.5'), plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(inverse_harmonic_15_, 'gray'), plt.title('Salt Noise Q = -1.5'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 错误的使用Q值,反谐波滤波器得到的是严重的后果
img_pepper = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0508(a)(circuit-board-pepper-prob-pt1).tif', 0) 
img_salt = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0508(b)(circuit-board-salt-prob-pt1).tif', 0)mean_kernel = np.ones([3, 3])
arithmetic_kernel = mean_kernel / mean_kernel.sizeinverse_harmonic_15 = inverse_harmonic_mean(img_pepper, kernel=mean_kernel, Q=-1.5)
inverse_harmonic_15_ = inverse_harmonic_mean(img_salt, kernel=mean_kernel, Q=1.5)plt.figure(figsize=(12, 12))
plt.subplot(221), plt.imshow(img_pepper, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(img_salt, 'gray'), plt.title('Noisy'), plt.xticks([]), plt.yticks([])
plt.subplot(223), plt.imshow(inverse_harmonic_15, 'gray'), plt.title('Pepper Noise Q = -1.5'), plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(inverse_harmonic_15_, 'gray'), plt.title('Salt Noise Q = 1.5'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

librosa能量_librosa与python_speech_features

在语音识别领域,比较常用的两个模块就是librosa和python_speech_features了。最近也是在做音乐方向的项目,借此做一下笔记,并记录一些两者的差别。下面是两模块的官方文档LibROSA - librosa 0.6.3 documentation​librosa.github.ioWelcome t…

java Unicode转码

1 //中文转UNICODE2 public static String chinaToUnicode(String str) {3 String result "";4 for (int i 0; i < str.length(); i) {5 int chr1 (char) str.charAt(i);6 if (chr1 > 19968 && ch…

oracle-备份工具exp-imp

虽然是按照用户的方式导出的&#xff0c;但导入之前&#xff0c;还是必须要有相同的用户存在&#xff0c;删除用户以后&#xff0c;是无法进行导入的 --重新创建回zlm用户 SQL> create user zlm identified by zlm; 尽管zlm用户的默认表空间是USERS&#xff0c;但是用imp导入…

继承String?

不能继承&#xff0c;因为 public final class String extends Objectimplements Serializable, Comparable<String>, CharSequence final修饰的类是不能被继承的转载于:https://www.cnblogs.com/crane-practice/p/3666006.html

python中字典数据的特点_Python数据类型(字典)

Python 字典(Dictionary) 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值(key>value)对用冒号(:)分割&#xff0c;每个对之间用逗号(,)分割&#xff0c;整个字典包括在花括号({})中 ,格式如下所示&#xff1a; d {key1: value1, key2: value2}…

第5章 Python 数字图像处理(DIP) - 图像复原与重建10 - 空间滤波 - 统计排序滤波器 - 中值、最大值、最小值、中点、修正阿尔法均值滤波器

标题统计排序滤波器中值、最大值、最小值、中点 滤波器修正阿尔法均值滤波器统计排序滤波器 中值、最大值、最小值、中点 滤波器 f^(x,y)median{g(r,c)}(5.27)\hat{f}(x, y) \text{median} \{g(r,c)\} \tag{5.27}f^​(x,y)median{g(r,c)}(5.27) f^(x,y))max{g(r,c)}(5.28)\ha…

如何设置坐标原点值_氨气检测仪电化学原理及报警值如何设置

氨气体检测仪检定规程&#xff1a;一般氨气体检测仪检定规程主要是针对技术参数设定的一些标准&#xff0c;具体包含有规程的名称和范围、仪器示值误差、充分性标准差、响应时间、稳定性、报警功能、流量控制器、检定项目表、检定操作有数值误差、重复性、响应时间、稳定性等。…

统计信息及相关说明

统计信息&#xff1a;0 recursive calls20434 db block gets 317970511 consistent gets 0 physical reads 3759764 redo size 382 bytes sent via SQL*Net to client 1061 bytes received via SQL*Net from client 3 SQL*Ne…

Android横竖屏切换的生命周期

关于Android手机横竖屏切换时Activity的生命周期问题&#xff0c;网上有很多相似的文章&#xff0c;大多数都是说明在竖屏切换横屏时Activity会重启一次&#xff0c;而在横屏切换竖屏时Activity会重启两次。 我本身不太理解这样设计的意义&#xff0c;并且觉得新版本会解决这个…

python 随机字符串_python生成随机数、随机字符串

python生成随机数、随机字符串 import random import string # 随机整数&#xff1a; print random.randint(1,50) # 随机选取0到100间的偶数&#xff1a; print random.randrange(0, 101, 2) # 随机浮点数&#xff1a; print random.random() print random.uniform(1, 10) # 随…

ACM 会场安排问题

会场安排问题 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述学校的小礼堂每天都会有许多活动&#xff0c;有时间这些活动的计划时间会发生冲突&#xff0c;需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动&#xff0c;…

第5章 Python 数字图像处理(DIP) - 图像复原与重建11 - 空间滤波 - 自适应滤波器 - 自适应局部降噪、自适应中值滤波器

标题自适应滤波器自适应局部降噪滤波器自适应中值滤波器自适应滤波器 自适应局部降噪滤波器 均值是计算平均值的区域上的平均灰度&#xff0c;方差是该区域上的图像对比度 g(x,y)g(x, y)g(x,y)噪声图像在(x,y)(x, y)(x,y)处的值 ση2\sigma_{\eta}^2ση2​ 为噪声的方差&am…

关闭防火墙_从零开始学Linux运维|09.关闭防火墙和SElinux

firewalld是centos7默认的防火墙安全增强型 Linux(Security-Enhanced Linux)简称 SELinux初学者建议先关闭,等熟悉了之后再来使用前期联系中的好多错误都有可能是由于没有关闭或者正确配置上面两项造成的1.临时关闭centos7下的防火墙firewalld一行命令就能够关闭firewalld--&qu…

Discuz!NT - 在线显示列表 游客 bug 修复

引发bug的条件&#xff1a;当你修改了系统组里面的[游客]组 的名字后&#xff01;&#xff01; 你会发现首页上底部的在线显示列表里始终都是显示"游客"字样而非你改过得字样&#xff01;如图 至此你需要运行一个t-sql脚本去修复这个bug&#xff01;&#xff08;但是…

Linux查看物理CPU个数、核数、逻辑CPU个数

# 总核数 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l# 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu …

基于空间方法的图神经网络模型_用于时空图建模的图神经网络模型 Graph WaveNet | 课程上新...

课程概要本课程来自集智学园图网络论文解读系列活动。是对论文《Graph WaveNet for Deep Spatial-Temporal Graph Modeling》的解读。时空图建模 (Spatial-temporal graph modeling)是分析系统中组成部分的空间维相关性和时间维趋势的重要手段。已有算法大多基于已知的固定的图…

dataframe类型数据的遍历_Python零基础入门到爬虫再到数据分析,这些你都是要学会的...

1.必须知道的两组Python基础术语A.变量和赋值Python可以直接定义变量名字并进行赋值的&#xff0c;例如我们写出a 4时&#xff0c;Python解释器干了两件事情&#xff1a;在内存中创建了一个值为4的整型数据在内存中创建了一个名为a的变量&#xff0c;并把它指向4用一张示意图表…

第5章 Python 数字图像处理(DIP) - 图像复原与重建12 - 空间滤波 - 使用频率域滤波降低周期噪声 - 陷波滤波、最优陷波滤波

标题使用频率域滤波降低周期噪声陷波滤波深入介绍最优陷波滤波本章陷波滤波器有部分得出的结果不佳&#xff0c;如果有更好的解决方案&#xff0c;请赐教&#xff0c;不胜感激。 使用频率域滤波降低周期噪声 陷波滤波深入介绍 零相移滤波器必须关于原点(频率矩形中心)对称&a…

Android之Menu动态改变文字

Menu创建&#xff1a; Override//这里遇到一个问题add的是MenuItem的idpublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubmenu.add(0,1023, 0, "一");menu.add(0,1022, 1, "开启线程");Log.e("onCreateOptionsMenu…

iOS 开发周报:Apple 发布 iPhone 7 / 7 Plus 、Apple Watch 2 等新品

新闻\\Apple 发布 iPhone 7 / 7 Plus 、Apple Watch 2 等新品&#xff1a;Apple 正式发布了 iPhone 7 / 7 Plus、Apple Watch 2 新品&#xff0c;带来 AirPods 无线耳机&#xff0c;并把马里奥带进了 iOS。iPhone 7 新增亮黑色&#xff0c;移除3.5mm 耳机孔&#xff0c;支持 IP…